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 73 74 75 76 77 78 79
use super::*; impl ForeignKeyBuilder for PostgresQueryBuilder { fn prepare_foreign_key_drop_statement( &self, drop: &ForeignKeyDropStatement, sql: &mut SqlWriter, ) { write!(sql, "ALTER TABLE ").unwrap(); if let Some(table) = &drop.table { table.prepare(sql, '"'); } write!(sql, " DROP CONSTRAINT ").unwrap(); if let Some(name) = &drop.foreign_key.name { write!(sql, "\"{}\"", name).unwrap(); } } fn prepare_foreign_key_create_statement_internal( &self, create: &ForeignKeyCreateStatement, sql: &mut SqlWriter, inside_table_creation: bool, ) { if !inside_table_creation { write!(sql, "ALTER TABLE ").unwrap(); if let Some(table) = &create.foreign_key.table { table.prepare(sql, '"'); } write!(sql, " ADD ").unwrap(); } write!(sql, "CONSTRAINT ").unwrap(); if let Some(name) = &create.foreign_key.name { write!(sql, "\"{}\" ", name).unwrap(); } write!(sql, "FOREIGN KEY (").unwrap(); create.foreign_key.columns.iter().fold(true, |first, col| { if !first { write!(sql, ", ").unwrap(); } col.prepare(sql, '"'); false }); write!(sql, ")").unwrap(); write!(sql, " REFERENCES ").unwrap(); if let Some(ref_table) = &create.foreign_key.ref_table { ref_table.prepare(sql, '"'); } write!(sql, " ").unwrap(); write!(sql, "(").unwrap(); create .foreign_key .ref_columns .iter() .fold(true, |first, col| { if !first { write!(sql, ", ").unwrap(); } col.prepare(sql, '"'); false }); write!(sql, ")").unwrap(); if let Some(foreign_key_action) = &create.foreign_key.on_delete { write!(sql, " ON DELETE ").unwrap(); self.prepare_foreign_key_action(&foreign_key_action, sql); } if let Some(foreign_key_action) = &create.foreign_key.on_update { write!(sql, " ON UPDATE ").unwrap(); self.prepare_foreign_key_action(&foreign_key_action, sql); } } }