1use super::expr::Expr;
2use super::span::{Span, Spanned};
3
4#[derive(Debug, Clone)]
5pub struct Select {
6 pub distinct: bool,
7 pub projection: Vec<SelectItem>,
8 pub from: TableRef,
9 pub selection: Option<Expr>,
10 pub order_by: Vec<OrderByExpr>,
11 pub limit: Option<Expr>,
12 pub offset: Option<Expr>,
13 pub span: Span,
14}
15
16#[derive(Debug, Clone)]
17pub enum SelectItem {
18 Wildcard {
19 span: Span,
20 },
21 Expr {
22 expr: Expr,
23 alias: Option<String>,
24 span: Span,
25 },
26}
27
28#[derive(Debug, Clone)]
29pub struct TableRef {
30 pub name: String,
31 pub alias: Option<String>,
32 pub span: Span,
33}
34
35#[derive(Debug, Clone)]
36pub struct OrderByExpr {
37 pub expr: Expr,
38 pub asc: Option<bool>,
39 pub nulls_first: Option<bool>,
40 pub span: Span,
41}
42
43#[derive(Debug, Clone)]
44pub struct Insert {
45 pub table: String,
46 pub columns: Option<Vec<String>>,
47 pub values: Vec<Vec<Expr>>,
48 pub span: Span,
49}
50
51#[derive(Debug, Clone)]
52pub struct Update {
53 pub table: String,
54 pub assignments: Vec<Assignment>,
55 pub selection: Option<Expr>,
56 pub span: Span,
57}
58
59#[derive(Debug, Clone)]
60pub struct Assignment {
61 pub column: String,
62 pub value: Expr,
63 pub span: Span,
64}
65
66#[derive(Debug, Clone)]
67pub struct Delete {
68 pub table: String,
69 pub selection: Option<Expr>,
70 pub span: Span,
71}
72
73impl Spanned for Select {
74 fn span(&self) -> Span {
75 self.span
76 }
77}
78
79impl Spanned for SelectItem {
80 fn span(&self) -> Span {
81 match self {
82 SelectItem::Wildcard { span } => *span,
83 SelectItem::Expr { span, .. } => *span,
84 }
85 }
86}
87
88impl Spanned for TableRef {
89 fn span(&self) -> Span {
90 self.span
91 }
92}
93
94impl Spanned for OrderByExpr {
95 fn span(&self) -> Span {
96 self.span
97 }
98}
99
100impl Spanned for Insert {
101 fn span(&self) -> Span {
102 self.span
103 }
104}
105
106impl Spanned for Update {
107 fn span(&self) -> Span {
108 self.span
109 }
110}
111
112impl Spanned for Assignment {
113 fn span(&self) -> Span {
114 self.span
115 }
116}
117
118impl Spanned for Delete {
119 fn span(&self) -> Span {
120 self.span
121 }
122}