pg_extras/queries/
locks.rs1use crate::queries::shared::{get_default_interval, Query};
2use crate::PgStatsVersion;
3use sqlx::postgres::{types::PgInterval, PgRow};
4use sqlx::Row;
5
6#[derive(Debug, Clone)]
7pub struct Locks {
8 pub pid: i32,
9 pub relname: String,
10 pub transactionid: String,
11 pub granted: bool,
12 pub mode: String,
13 pub query_snippet: String,
14 pub age: PgInterval,
15 pub application: String,
16}
17
18impl serde::Serialize for Locks {
19 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
20 where
21 S: serde::Serializer,
22 {
23 use serde::ser::SerializeStruct;
24 let mut state = serializer.serialize_struct("Locks", 8)?;
25 state.serialize_field("pid", &self.pid)?;
26 state.serialize_field("relname", &self.relname)?;
27 state.serialize_field("transactionid", &self.transactionid)?;
28 state.serialize_field("granted", &self.granted)?;
29 state.serialize_field("mode", &self.mode)?;
30 state.serialize_field("query_snippet", &self.query_snippet)?;
31 state.serialize_field("age", &format!("{:?}", self.age))?;
32 state.serialize_field("application", &self.application)?;
33 state.end()
34 }
35}
36
37impl Query for Locks {
38 fn new(row: &PgRow) -> Self {
39 Self {
40 pid: row.try_get("pid").unwrap_or_default(),
41 relname: row.try_get("relname").unwrap_or_default(),
42 transactionid: row.try_get("transactionid").unwrap_or_default(),
43 granted: row.try_get("granted").unwrap_or_default(),
44 mode: row.try_get("mode").unwrap_or_default(),
45 query_snippet: row.try_get("query_snippet").unwrap_or_default(),
46 age: row.try_get("age").unwrap_or(get_default_interval()),
47 application: row.try_get("application").unwrap_or_default(),
48 }
49 }
50
51 fn to_row(&self) -> prettytable::Row {
52 row![
53 self.pid,
54 self.relname,
55 self.transactionid,
56 self.granted,
57 self.mode,
58 self.query_snippet,
59 format!("{:?}", self.age),
60 self.application
61 ]
62 }
63
64 fn headers() -> prettytable::Row {
65 row![
66 "pid",
67 "relname",
68 "transactionid",
69 "granted",
70 "mode",
71 "query_snippet",
72 "age",
73 "application"
74 ]
75 }
76
77 fn read_file(_pg_statement_version: Option<PgStatsVersion>) -> String {
78 include_str!("../sql/locks.sql").to_string()
79 }
80}