pg_extras/queries/
shared.rs1use sqlx::postgres::{types::PgInterval, PgRow};
2use std::env;
3
4use crate::PgStatsVersion;
5
6pub trait Query: serde::Serialize {
7 fn new(row: &PgRow) -> Self;
8 fn to_row(&self) -> prettytable::Row;
9 fn headers() -> prettytable::Row;
10 fn read_file(pg_statement_version: Option<PgStatsVersion>) -> String;
11 fn description() -> String {
12 let file_content = Self::read_file(None);
13 let desc = file_content.lines().take(1).next().unwrap_or_default();
14 extract_desc(desc)
15 }
16
17 fn to_json(&self) -> serde_json::Value {
18 serde_json::to_value(self).unwrap_or_default()
19 }
20}
21
22fn extract_desc(desc: &str) -> String {
23 if let (Some(start), Some(end)) = (desc.find("/*"), desc.find("*/")) {
24 let extracted = &desc[start + 2..end];
25 let mut trimmed = extracted.trim().to_string();
26 if trimmed.ends_with('.') {
27 trimmed.pop();
28 }
29 trimmed
30 } else {
31 desc.to_string()
32 }
33}
34
35pub fn get_default_interval() -> PgInterval {
36 PgInterval {
37 microseconds: 0,
38 days: 0,
39 months: 0,
40 }
41}
42
43pub fn get_default_schema() -> String {
44 env::var("PG_EXTRAS_SCHEMA").unwrap_or("public".to_string())
45}