gluesql_core/ast_builder/
table_factor.rs1use {
2 super::{ExprNode, IndexItemNode, QueryNode, SelectNode},
3 crate::ast::Dictionary,
4};
5
6#[derive(Clone, Debug)]
7pub enum TableType<'a> {
8 Table,
9 Series(ExprNode<'a>),
10 Dictionary(Dictionary),
11 Derived {
12 subquery: Box<QueryNode<'a>>,
13 alias: String,
14 },
15}
16
17#[derive(Clone, Debug)]
18pub struct TableFactorNode<'a> {
19 pub table_name: String,
20 pub table_type: TableType<'a>,
21 pub table_alias: Option<String>,
22 pub index: Option<IndexItemNode<'a>>,
23}
24
25impl<'a> TableFactorNode<'a> {
26 pub fn select(self) -> SelectNode<'a> {
27 SelectNode::new(self)
28 }
29}
30
31pub fn glue_objects() -> TableFactorNode<'static> {
32 TableFactorNode {
33 table_name: "GLUE_OBJECTS".to_owned(),
34 table_type: TableType::Dictionary(Dictionary::GlueObjects),
35 table_alias: None,
36 index: None,
37 }
38}
39
40pub fn glue_tables() -> TableFactorNode<'static> {
41 TableFactorNode {
42 table_name: "GLUE_TABLES".to_owned(),
43 table_type: TableType::Dictionary(Dictionary::GlueTables),
44 table_alias: None,
45 index: None,
46 }
47}
48
49pub fn glue_indexes() -> TableFactorNode<'static> {
50 TableFactorNode {
51 table_name: "GLUE_INDEXES".to_owned(),
52 table_type: TableType::Dictionary(Dictionary::GlueIndexes),
53 table_alias: None,
54 index: None,
55 }
56}
57
58pub fn glue_table_columns() -> TableFactorNode<'static> {
59 TableFactorNode {
60 table_name: "GLUE_TABLE_COLUMNS".to_owned(),
61 table_type: TableType::Dictionary(Dictionary::GlueTableColumns),
62 table_alias: None,
63 index: None,
64 }
65}
66
67pub fn series<'a, T: Into<ExprNode<'a>>>(args: T) -> TableFactorNode<'a> {
68 TableFactorNode {
69 table_name: "SERIES".to_owned(),
70 table_type: TableType::Series(args.into()),
71 table_alias: None,
72 index: None,
73 }
74}