Skip to content

Commit 331dcbc

Browse files
authored
fix(postgres): double quote field names to avoid keyword colission (#671)
fix(postgres): double quote field names to avoid keyword collission
1 parent 5c6188d commit 331dcbc

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/ops/targets/postgres.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,17 +194,17 @@ impl ExportContext {
194194
) -> Result<Self> {
195195
let key_fields = key_fields_schema
196196
.iter()
197-
.map(|f| f.name.as_str())
197+
.map(|f| format!("\"{}\"", f.name))
198198
.collect::<Vec<_>>()
199199
.join(", ");
200200
let value_fields = value_fields_schema
201201
.iter()
202-
.map(|f| f.name.as_str())
202+
.map(|f| format!("\"{}\"", f.name))
203203
.collect::<Vec<_>>()
204204
.join(", ");
205205
let set_value_fields = value_fields_schema
206206
.iter()
207-
.map(|f| format!("{} = EXCLUDED.{}", f.name, f.name))
207+
.map(|f| format!("\"{}\" = EXCLUDED.\"{}\"", f.name, f.name))
208208
.collect::<Vec<_>>()
209209
.join(", ");
210210

@@ -288,7 +288,9 @@ impl ExportContext {
288288
if i > 0 {
289289
query_builder.push(" AND ");
290290
}
291+
query_builder.push("\"");
291292
query_builder.push(schema.name.as_str());
293+
query_builder.push("\"");
292294
query_builder.push("=");
293295
bind_key_field(&mut query_builder, value)?;
294296
}
@@ -547,14 +549,16 @@ impl SetupStatus {
547549
.await?;
548550
}
549551
for index_name in self.actions.indexes_to_delete.iter() {
550-
let sql = format!("DROP INDEX IF EXISTS {}", index_name);
552+
let sql = format!("DROP INDEX IF EXISTS {index_name}");
551553
sqlx::query(&sql).execute(db_pool).await?;
552554
}
553555
if let Some(table_upsertion) = &self.actions.table_action.table_upsertion {
554556
match table_upsertion {
555557
TableUpsertionAction::Create { keys, values } => {
556-
let mut fields = (keys.iter().map(|(k, v)| format!("{k} {v} NOT NULL")))
557-
.chain(values.iter().map(|(k, v)| format!("{k} {v}")));
558+
let mut fields = (keys
559+
.iter()
560+
.map(|(name, typ)| format!("\"{name}\" {typ} NOT NULL")))
561+
.chain(values.iter().map(|(name, typ)| format!("\"{name}\" {typ}")));
558562
let sql = format!(
559563
"CREATE TABLE IF NOT EXISTS {table_name} ({}, PRIMARY KEY ({}))",
560564
fields.join(", "),
@@ -568,13 +572,13 @@ impl SetupStatus {
568572
} => {
569573
for column_name in columns_to_delete.iter() {
570574
let sql = format!(
571-
"ALTER TABLE {table_name} DROP COLUMN IF EXISTS {column_name}",
575+
"ALTER TABLE {table_name} DROP COLUMN IF EXISTS \"{column_name}\"",
572576
);
573577
sqlx::query(&sql).execute(db_pool).await?;
574578
}
575579
for (column_name, column_type) in columns_to_upsert.iter() {
576580
let sql = format!(
577-
"ALTER TABLE {table_name} DROP COLUMN IF EXISTS {column_name}, ADD COLUMN {column_name} {column_type}"
581+
"ALTER TABLE {table_name} DROP COLUMN IF EXISTS \"{column_name}\", ADD COLUMN \"{column_name}\" {column_type}"
578582
);
579583
sqlx::query(&sql).execute(db_pool).await?;
580584
}

0 commit comments

Comments
 (0)