From 98b34a4db22684a1fef5302c2759367b66b4e47f Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Mon, 25 May 2026 10:44:55 +0800 Subject: [PATCH] fix: escape backslashes in SQL export and transfer literal formatting JSON fields containing backslashes (regex patterns, escaped quotes, etc.) were not properly escaped during database export and data transfer. The backslash was written as-is in INSERT statements, causing data corruption when re-importing. This aligns with the existing fix in data_grid_sql.rs. --- crates/dbx-core/src/database_export.rs | 2 +- crates/dbx-core/src/transfer.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/dbx-core/src/database_export.rs b/crates/dbx-core/src/database_export.rs index c16f55024..50ac86281 100644 --- a/crates/dbx-core/src/database_export.rs +++ b/crates/dbx-core/src/database_export.rs @@ -126,7 +126,7 @@ pub fn format_export_sql_literal(value: &Value) -> String { return if value { "TRUE" } else { "FALSE" }.to_string(); } let text = value.as_str().map_or_else(|| value.to_string(), ToString::to_string); - format!("'{}'", text.replace('\'', "''")) + format!("'{}'", text.replace('\\', "\\\\").replace('\'', "''")) } pub fn build_export_insert_statements(options: BuildExportInsertStatementsOptions) -> Result, String> { diff --git a/crates/dbx-core/src/transfer.rs b/crates/dbx-core/src/transfer.rs index a900cd548..56b2c17aa 100644 --- a/crates/dbx-core/src/transfer.rs +++ b/crates/dbx-core/src/transfer.rs @@ -106,11 +106,11 @@ pub fn escape_value_typed(val: &serde_json::Value, db_type: &DatabaseType, colum }, serde_json::Value::Number(n) => n.to_string(), serde_json::Value::String(s) => { - format!("'{}'", format_literal_string(s, db_type, column_type).replace('\'', "''")) + format!("'{}'", format_literal_string(s, db_type, column_type).replace('\\', "\\\\").replace('\'', "''")) } _ => { let s = val.to_string(); - format!("'{}'", s.replace('\'', "''")) + format!("'{}'", s.replace('\\', "\\\\").replace('\'', "''")) } } }