tank_core/writer/
context.rs1#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
2pub enum Fragment {
3 #[default]
4 None,
5 SqlCommentOnColumn,
6 SqlCreateSchema,
7 SqlCreateTable,
8 SqlCreateTablePrimaryKey,
9 SqlCreateTableUnique,
10 SqlDeleteFrom,
11 SqlDeleteFromWhere,
12 SqlDropSchema,
13 SqlDropTable,
14 SqlInsertInto,
15 SqlInsertIntoOnConflict,
16 SqlInsertIntoValues,
17 SqlJoin,
18 SqlSelect,
19 SqlSelectFrom,
20 SqlSelectOrderBy,
21 SqlSelectWhere,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub struct Context {
26 pub counter: u32,
27 pub fragment: Fragment,
28 pub qualify_columns: bool,
29}
30
31impl Context {
32 pub const fn new(fragment: Fragment, qualify_columns: bool) -> Self {
33 Self {
34 counter: 0,
35 fragment,
36 qualify_columns,
37 }
38 }
39 pub const fn new_qualify(qualify_columns: bool) -> Self {
40 Self {
41 counter: 0,
42 fragment: Fragment::None,
43 qualify_columns,
44 }
45 }
46 pub const fn update_from(&mut self, context: &Context) {
47 self.counter = context.counter;
48 }
49}
50
51impl Context {
52 pub const fn switch_fragment<'s>(&'s mut self, fragment: Fragment) -> ContextUpdater<'s> {
53 ContextUpdater {
54 current: Context { fragment, ..*self },
55 previous: self,
56 }
57 }
58}
59
60impl Default for Context {
61 fn default() -> Self {
62 Context::new(Fragment::None, true)
63 }
64}
65
66pub struct ContextUpdater<'a> {
67 pub current: Context,
68 pub previous: &'a mut Context,
69}
70
71impl<'a> Drop for ContextUpdater<'a> {
72 fn drop(&mut self) {
73 self.previous.counter = self.current.counter;
74 }
75}