sea_query/backend/
index_builder.rs1use crate::*;
2
3pub trait IndexBuilder: QuotedBuilder + TableRefBuilder {
4 fn prepare_table_index_expression(
8 &self,
9 create: &IndexCreateStatement,
10 sql: &mut dyn SqlWriter,
11 ) {
12 if let Some(name) = &create.index.name {
13 write!(
14 sql,
15 "CONSTRAINT {}{}{} ",
16 self.quote().left(),
17 name,
18 self.quote().right()
19 )
20 .unwrap();
21 }
22
23 self.prepare_index_prefix(create, sql);
24
25 self.prepare_index_columns(&create.index.columns, sql);
26
27 self.prepare_filter(&create.r#where, sql);
28 }
29
30 fn prepare_index_create_statement(
32 &self,
33 create: &IndexCreateStatement,
34 sql: &mut dyn SqlWriter,
35 );
36
37 fn prepare_table_ref_index_stmt(&self, table_ref: &TableRef, sql: &mut dyn SqlWriter);
39
40 fn prepare_index_drop_statement(&self, drop: &IndexDropStatement, sql: &mut dyn SqlWriter);
42
43 #[doc(hidden)]
44 fn prepare_index_type(&self, _col_index_type: &Option<IndexType>, _sql: &mut dyn SqlWriter) {}
46
47 #[doc(hidden)]
48 fn prepare_index_prefix(&self, create: &IndexCreateStatement, sql: &mut dyn SqlWriter);
50
51 #[doc(hidden)]
52 fn write_column_index_prefix(&self, col_prefix: &Option<u32>, sql: &mut dyn SqlWriter) {
54 if let Some(prefix) = col_prefix {
55 write!(sql, " ({prefix})").unwrap();
56 }
57 }
58
59 #[doc(hidden)]
60 fn prepare_index_columns(&self, columns: &[IndexColumn], sql: &mut dyn SqlWriter) {
62 write!(sql, "(").unwrap();
63 columns.iter().fold(true, |first, col| {
64 if !first {
65 write!(sql, ", ").unwrap();
66 }
67 col.name.prepare(sql.as_writer(), self.quote());
68 self.write_column_index_prefix(&col.prefix, sql);
69 if let Some(order) = &col.order {
70 match order {
71 IndexOrder::Asc => write!(sql, " ASC").unwrap(),
72 IndexOrder::Desc => write!(sql, " DESC").unwrap(),
73 }
74 }
75 false
76 });
77 write!(sql, ")").unwrap();
78 }
79
80 #[doc(hidden)]
81 fn prepare_filter(&self, _condition: &ConditionHolder, _sql: &mut dyn SqlWriter) {}
83}