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 {}
68// `SelectSetOpSet` is deliberately absent: a compound query orders by output
69// column names, so each dialect builder provides its own `order_by` there.
70
71impl LimitAllowed for SelectFromSet {}
72impl LimitAllowed for SelectJoinSet {}
73impl LimitAllowed for SelectWhereSet {}
74impl LimitAllowed for SelectGroupSet {}
75impl LimitAllowed for SelectOrderSet {}
76impl LimitAllowed for SelectSetOpSet {}
77
78impl OffsetAllowed for SelectFromSet {}
79impl OffsetAllowed for SelectLimitSet {}
80impl OffsetAllowed for SelectSetOpSet {}
81
82impl JoinAllowed for SelectFromSet {}
83impl JoinAllowed for SelectJoinSet {}
84
85impl HavingAllowed for SelectGroupSet {}
86
87impl GroupByApplied for SelectGroupSet {}
88impl GroupByApplied for SelectOrderSet {}
89impl GroupByApplied for SelectLimitSet {}
90impl GroupByApplied for SelectOffsetSet {}
91impl GroupByApplied for SelectSetOpSet {}
92
93#[doc(hidden)]
94pub trait AsCteState {}
95
96impl AsCteState for SelectFromSet {}
97impl AsCteState for SelectJoinSet {}
98impl AsCteState for SelectWhereSet {}
99impl AsCteState for SelectGroupSet {}
100impl AsCteState for SelectOrderSet {}
101impl AsCteState for SelectLimitSet {}
102impl AsCteState for SelectOffsetSet {}
103
104//------------------------------------------------------------------------------
105// INSERT states
106//------------------------------------------------------------------------------
107
108/// Marker for the initial state of `InsertBuilder`.
109#[derive(Debug, Clone, Copy, Default)]
110pub struct InsertInitial;
111
112/// Marker for the state after VALUES are set.
113#[derive(Debug, Clone, Copy, Default)]
114pub struct InsertValuesSet;
115
116/// Marker for the state after RETURNING clause is added.
117#[derive(Debug, Clone, Copy, Default)]
118pub struct InsertReturningSet;
119
120/// Marker for the state after ON CONFLICT is set.
121#[derive(Debug, Clone, Copy, Default)]
122pub struct InsertOnConflictSet;
123
124/// Marker for the state after DO UPDATE SET (before optional WHERE).
125#[derive(Debug, Clone, Copy, Default)]
126pub struct InsertDoUpdateSet;
127
128impl ExecutableState for InsertValuesSet {}
129impl ExecutableState for InsertReturningSet {}
130impl ExecutableState for InsertOnConflictSet {}
131impl ExecutableState for InsertDoUpdateSet {}
132
133//------------------------------------------------------------------------------
134// DELETE states
135//------------------------------------------------------------------------------
136
137/// Marker for the initial state of `DeleteBuilder`.
138#[derive(Debug, Clone, Copy, Default)]
139pub struct DeleteInitial;
140
141/// Marker for the state after WHERE clause.
142#[derive(Debug, Clone, Copy, Default)]
143pub struct DeleteWhereSet;
144
145/// Marker for the state after RETURNING clause.
146#[derive(Debug, Clone, Copy, Default)]
147pub struct DeleteReturningSet;
148
149impl ExecutableState for DeleteInitial {}
150impl ExecutableState for DeleteWhereSet {}
151impl ExecutableState for DeleteReturningSet {}
152
153//------------------------------------------------------------------------------
154// UPDATE states
155//------------------------------------------------------------------------------
156
157/// Marker for the initial state of `UpdateBuilder`.
158#[derive(Debug, Clone, Copy, Default)]
159pub struct UpdateInitial;
160
161/// Marker for the state after SET clause.
162#[derive(Debug, Clone, Copy, Default)]
163pub struct UpdateSetClauseSet;
164
165/// Marker for the state after WHERE clause.
166#[derive(Debug, Clone, Copy, Default)]
167pub struct UpdateWhereSet;
168
169/// Marker for the state after RETURNING clause.
170#[derive(Debug, Clone, Copy, Default)]
171pub struct UpdateReturningSet;
172
173impl ExecutableState for UpdateSetClauseSet {}
174impl ExecutableState for UpdateWhereSet {}
175impl ExecutableState for UpdateReturningSet {}