Skip to main content

drizzle_core/builder/
states.rs

1//! Shared typestate markers for dialect query builders.
2
3use super::{
4    ExecutableState, GroupByAllowed, GroupByApplied, HavingAllowed, JoinAllowed, LimitAllowed,
5    OffsetAllowed, OrderByAllowed, WhereAllowed,
6};
7
8//------------------------------------------------------------------------------
9// SELECT states
10//------------------------------------------------------------------------------
11
12/// Marker for the initial state of `SelectBuilder`.
13#[derive(Debug, Clone, Copy, Default)]
14pub struct SelectInitial;
15
16/// Marker for the state after FROM clause.
17#[derive(Debug, Clone, Copy, Default)]
18pub struct SelectFromSet;
19
20/// Marker for the state after JOIN clause.
21#[derive(Debug, Clone, Copy, Default)]
22pub struct SelectJoinSet;
23
24/// Marker for the state after WHERE clause.
25#[derive(Debug, Clone, Copy, Default)]
26pub struct SelectWhereSet;
27
28/// Marker for the state after GROUP BY clause.
29#[derive(Debug, Clone, Copy, Default)]
30pub struct SelectGroupSet;
31
32/// Marker for the state after ORDER BY clause.
33#[derive(Debug, Clone, Copy, Default)]
34pub struct SelectOrderSet;
35
36/// Marker for the state after LIMIT clause.
37#[derive(Debug, Clone, Copy, Default)]
38pub struct SelectLimitSet;
39
40/// Marker for the state after OFFSET clause.
41#[derive(Debug, Clone, Copy, Default)]
42pub struct SelectOffsetSet;
43
44/// Marker for the state after set operations (UNION/INTERSECT/EXCEPT).
45#[derive(Debug, Clone, Copy, Default)]
46pub struct SelectSetOpSet;
47
48impl ExecutableState for SelectFromSet {}
49impl ExecutableState for SelectWhereSet {}
50impl ExecutableState for SelectLimitSet {}
51impl ExecutableState for SelectOffsetSet {}
52impl ExecutableState for SelectOrderSet {}
53impl ExecutableState for SelectGroupSet {}
54impl ExecutableState for SelectJoinSet {}
55impl ExecutableState for SelectSetOpSet {}
56
57impl WhereAllowed for SelectFromSet {}
58impl WhereAllowed for SelectJoinSet {}
59
60impl GroupByAllowed for SelectFromSet {}
61impl GroupByAllowed for SelectJoinSet {}
62impl GroupByAllowed for SelectWhereSet {}
63
64impl OrderByAllowed for SelectFromSet {}
65impl OrderByAllowed for SelectJoinSet {}
66impl OrderByAllowed for SelectWhereSet {}
67impl OrderByAllowed for SelectGroupSet {}
68impl OrderByAllowed for SelectSetOpSet {}
69
70impl LimitAllowed for SelectFromSet {}
71impl LimitAllowed for SelectJoinSet {}
72impl LimitAllowed for SelectWhereSet {}
73impl LimitAllowed for SelectGroupSet {}
74impl LimitAllowed for SelectOrderSet {}
75impl LimitAllowed for SelectSetOpSet {}
76
77impl OffsetAllowed for SelectFromSet {}
78impl OffsetAllowed for SelectLimitSet {}
79impl OffsetAllowed for SelectSetOpSet {}
80
81impl JoinAllowed for SelectFromSet {}
82impl JoinAllowed for SelectJoinSet {}
83
84impl HavingAllowed for SelectGroupSet {}
85
86impl GroupByApplied for SelectGroupSet {}
87impl GroupByApplied for SelectOrderSet {}
88impl GroupByApplied for SelectLimitSet {}
89impl GroupByApplied for SelectOffsetSet {}
90impl GroupByApplied for SelectSetOpSet {}
91
92#[doc(hidden)]
93pub trait AsCteState {}
94
95impl AsCteState for SelectFromSet {}
96impl AsCteState for SelectJoinSet {}
97impl AsCteState for SelectWhereSet {}
98impl AsCteState for SelectGroupSet {}
99impl AsCteState for SelectOrderSet {}
100impl AsCteState for SelectLimitSet {}
101impl AsCteState for SelectOffsetSet {}
102
103//------------------------------------------------------------------------------
104// INSERT states
105//------------------------------------------------------------------------------
106
107/// Marker for the initial state of `InsertBuilder`.
108#[derive(Debug, Clone, Copy, Default)]
109pub struct InsertInitial;
110
111/// Marker for the state after VALUES are set.
112#[derive(Debug, Clone, Copy, Default)]
113pub struct InsertValuesSet;
114
115/// Marker for the state after RETURNING clause is added.
116#[derive(Debug, Clone, Copy, Default)]
117pub struct InsertReturningSet;
118
119/// Marker for the state after ON CONFLICT is set.
120#[derive(Debug, Clone, Copy, Default)]
121pub struct InsertOnConflictSet;
122
123/// Marker for the state after DO UPDATE SET (before optional WHERE).
124#[derive(Debug, Clone, Copy, Default)]
125pub struct InsertDoUpdateSet;
126
127impl ExecutableState for InsertValuesSet {}
128impl ExecutableState for InsertReturningSet {}
129impl ExecutableState for InsertOnConflictSet {}
130impl ExecutableState for InsertDoUpdateSet {}
131
132//------------------------------------------------------------------------------
133// DELETE states
134//------------------------------------------------------------------------------
135
136/// Marker for the initial state of `DeleteBuilder`.
137#[derive(Debug, Clone, Copy, Default)]
138pub struct DeleteInitial;
139
140/// Marker for the state after WHERE clause.
141#[derive(Debug, Clone, Copy, Default)]
142pub struct DeleteWhereSet;
143
144/// Marker for the state after RETURNING clause.
145#[derive(Debug, Clone, Copy, Default)]
146pub struct DeleteReturningSet;
147
148impl ExecutableState for DeleteInitial {}
149impl ExecutableState for DeleteWhereSet {}
150impl ExecutableState for DeleteReturningSet {}
151
152//------------------------------------------------------------------------------
153// UPDATE states
154//------------------------------------------------------------------------------
155
156/// Marker for the initial state of `UpdateBuilder`.
157#[derive(Debug, Clone, Copy, Default)]
158pub struct UpdateInitial;
159
160/// Marker for the state after SET clause.
161#[derive(Debug, Clone, Copy, Default)]
162pub struct UpdateSetClauseSet;
163
164/// Marker for the state after WHERE clause.
165#[derive(Debug, Clone, Copy, Default)]
166pub struct UpdateWhereSet;
167
168/// Marker for the state after RETURNING clause.
169#[derive(Debug, Clone, Copy, Default)]
170pub struct UpdateReturningSet;
171
172impl ExecutableState for UpdateSetClauseSet {}
173impl ExecutableState for UpdateWhereSet {}
174impl ExecutableState for UpdateReturningSet {}