sea_schema/postgres/query/
enumeration.rs1use super::SchemaQueryBuilder;
2use crate::sqlx_types::postgres::PgRow;
3use sea_query::{Expr, Order, Query, SelectStatement};
4
5#[derive(Debug, sea_query::Iden)]
6pub enum PgType {
7 #[iden = "pg_type"]
8 Table,
9 #[iden = "typname"]
10 TypeName,
11 #[iden = "oid"]
12 Oid,
13}
14
15#[derive(Debug, sea_query::Iden)]
16pub enum PgEnum {
17 #[iden = "pg_enum"]
18 Table,
19 #[iden = "enumlabel"]
20 EnumLabel,
21 #[iden = "enumtypid"]
22 EnumTypeId,
23 #[iden = "enumsortorder"]
24 EnumSortOrder,
25}
26
27#[derive(Debug, Default)]
28pub struct EnumQueryResult {
29 pub typename: String,
30 pub enumlabel: String,
31}
32
33impl SchemaQueryBuilder {
34 pub fn query_enums(&self) -> SelectStatement {
35 Query::select()
36 .column((PgType::Table, PgType::TypeName))
37 .column((PgEnum::Table, PgEnum::EnumLabel))
38 .from(PgType::Table)
39 .inner_join(
40 PgEnum::Table,
41 Expr::col((PgEnum::Table, PgEnum::EnumTypeId)).equals((PgType::Table, PgType::Oid)),
42 )
43 .order_by((PgType::Table, PgType::TypeName), Order::Asc)
44 .order_by((PgEnum::Table, PgEnum::EnumSortOrder), Order::Asc)
45 .order_by((PgEnum::Table, PgEnum::EnumLabel), Order::Asc)
46 .take()
47 }
48}
49
50#[cfg(feature = "sqlx-postgres")]
51impl From<&PgRow> for EnumQueryResult {
52 fn from(row: &PgRow) -> Self {
53 use crate::sqlx_types::Row;
54 Self {
55 typename: row.get(0),
56 enumlabel: row.get(1),
57 }
58 }
59}
60
61#[cfg(not(feature = "sqlx-postgres"))]
62impl From<&PgRow> for EnumQueryResult {
63 fn from(_: &PgRow) -> Self {
64 Self::default()
65 }
66}