sea_query/backend/sqlite/
index.rs1use super::*;
2
3impl IndexBuilder for SqliteQueryBuilder {
4 fn prepare_index_create_statement(
5 &self,
6 create: &IndexCreateStatement,
7 sql: &mut dyn SqlWriter,
8 ) {
9 sql.write_str("CREATE ").unwrap();
10 self.prepare_index_prefix(create, sql);
11 sql.write_str("INDEX ").unwrap();
12
13 if create.if_not_exists {
14 sql.write_str("IF NOT EXISTS ").unwrap();
15 }
16
17 if let Some(name) = &create.index.name {
18 sql.write_char(self.quote().left()).unwrap();
19 sql.write_str(name).unwrap();
20 sql.write_char(self.quote().right()).unwrap();
21 }
22
23 sql.write_str(" ON ").unwrap();
24 if let Some(table) = &create.table {
25 self.prepare_table_ref_index_stmt(table, sql);
26 }
27
28 sql.write_str(" ").unwrap();
29 self.prepare_index_columns(&create.index.columns, sql);
30 self.prepare_filter(&create.r#where, sql);
31 }
32
33 fn prepare_table_ref_index_stmt(&self, table_ref: &TableRef, sql: &mut dyn SqlWriter) {
34 match table_ref {
35 TableRef::Table(TableName(None, _), None) => {
37 self.prepare_table_ref_iden(table_ref, sql)
38 }
39 _ => panic!("Not supported"),
40 }
41 }
42
43 fn prepare_index_drop_statement(&self, drop: &IndexDropStatement, sql: &mut dyn SqlWriter) {
44 sql.write_str("DROP INDEX ").unwrap();
45
46 if drop.if_exists {
47 sql.write_str("IF EXISTS ").unwrap();
48 }
49
50 if let Some(name) = &drop.index.name {
51 sql.write_char(self.quote().left()).unwrap();
52 sql.write_str(name).unwrap();
53 sql.write_char(self.quote().right()).unwrap();
54 }
55 }
56
57 fn prepare_index_prefix(&self, create: &IndexCreateStatement, sql: &mut dyn SqlWriter) {
58 if create.primary {
59 sql.write_str("PRIMARY KEY ").unwrap();
60 } else if create.unique {
61 sql.write_str("UNIQUE ").unwrap();
62 }
63 }
64
65 fn write_column_index_prefix(&self, _col_prefix: &Option<u32>, _sql: &mut dyn SqlWriter) {}
66
67 fn prepare_filter(&self, condition: &ConditionHolder, sql: &mut dyn SqlWriter) {
68 self.prepare_condition(condition, "WHERE", sql);
69 }
70}