pg_extras/queries/
bloat.rs1use crate::{queries::shared::Query, PgStatsVersion};
2use sqlx::postgres::PgRow;
3use sqlx::types::BigDecimal;
4use sqlx::Row;
5
6#[derive(Debug, Clone)]
7pub struct Bloat {
8 pub typefield: String,
9 pub schemaname: String,
10 pub object_name: String,
11 pub bloat: BigDecimal,
12 pub waste: String,
13}
14
15impl serde::Serialize for Bloat {
16 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
17 where
18 S: serde::Serializer,
19 {
20 use serde::ser::SerializeStruct;
21 let mut state = serializer.serialize_struct("Bloat", 5)?;
22 state.serialize_field("typefield", &self.typefield)?;
23 state.serialize_field("schemaname", &self.schemaname)?;
24 state.serialize_field("object_name", &self.object_name)?;
25 state.serialize_field("bloat", &format!("{}", self.bloat))?;
26 state.serialize_field("waste", &self.waste)?;
27 state.end()
28 }
29}
30
31impl Query for Bloat {
32 fn new(row: &PgRow) -> Self {
33 Self {
34 typefield: row.try_get("type").unwrap_or_default(),
35 schemaname: row.try_get("schemaname").unwrap_or_default(),
36 object_name: row.try_get("object_name").unwrap_or_default(),
37 bloat: row.try_get("bloat").unwrap_or_default(),
38 waste: row.try_get("waste").unwrap_or_default(),
39 }
40 }
41
42 fn to_row(&self) -> prettytable::Row {
43 row![
44 self.typefield,
45 self.schemaname,
46 self.object_name,
47 self.bloat,
48 self.waste
49 ]
50 }
51
52 fn headers() -> prettytable::Row {
53 row!["type", "schemaname", "object_name", "bloat", "waste"]
54 }
55
56 fn read_file(_pg_statement_version: Option<PgStatsVersion>) -> String {
57 include_str!("../sql/bloat.sql").to_string()
58 }
59}