1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
use super::*; impl IndexBuilder for MysqlQueryBuilder { fn prepare_table_index_expression(&self, create: &IndexCreateStatement, sql: &mut SqlWriter) { self.prepare_index_prefix(create, sql); write!(sql, "KEY ").unwrap(); self.prepare_index_name(&create.index.name, sql); self.prepare_index_type(&create.index_type, sql); self.prepare_index_columns(&create.index.columns, sql); } fn prepare_index_create_statement(&self, create: &IndexCreateStatement, sql: &mut SqlWriter) { write!(sql, "CREATE ").unwrap(); self.prepare_index_prefix(create, sql); write!(sql, "INDEX ").unwrap(); self.prepare_index_name(&create.index.name, sql); write!(sql, " ON ").unwrap(); if let Some(table) = &create.table { table.prepare(sql, '`'); } self.prepare_index_type(&create.index_type, sql); self.prepare_index_columns(&create.index.columns, sql); } fn prepare_index_drop_statement(&self, drop: &IndexDropStatement, sql: &mut SqlWriter) { write!(sql, "DROP INDEX ").unwrap(); if let Some(name) = &drop.index.name { write!(sql, "`{}`", name).unwrap(); } write!(sql, " ON ").unwrap(); if let Some(table) = &drop.table { table.prepare(sql, '`'); } } fn prepare_index_type(&self, col_index_type: &Option<IndexType>, sql: &mut SqlWriter) { if let Some(index_type) = col_index_type { if !matches!(index_type, IndexType::FullText) { write!( sql, " USING {}", match index_type { IndexType::BTree => "BTREE".to_owned(), IndexType::FullText => unreachable!(), IndexType::Hash => "HASH".to_owned(), IndexType::Custom(custom) => custom.to_string(), } ) .unwrap(); } } } fn prepare_index_prefix(&self, create: &IndexCreateStatement, sql: &mut SqlWriter) { if create.primary { write!(sql, "PRIMARY ").unwrap(); } if create.unique { write!(sql, "UNIQUE ").unwrap(); } if matches!(create.index_type, Some(IndexType::FullText)) { write!(sql, "FULLTEXT ").unwrap(); } } }