fix: format PostgreSQL array values as {..} instead of JSON [..] in SQL export

PostgreSQL array columns were serialized as JSON arrays (e.g. [1,2,3])
by serde_json::Value::Array Display, producing invalid SQL literals like
'[1,2,3]' and '[]' instead of PostgreSQL's required '{1,2,3}' and '{}'.

Add format_pg_array_sql_literal helper and apply it to all three SQL
literal formatting paths: escape_value_typed (transfer), format_export_sql_literal
(database_export), and format_grid_sql_literal (data_grid_sql).
This commit is contained in:
t8y2 committed 2026-05-25 10:59:30 +08:00
1 parent 98b34a4db2
commit 9008169dd1
3 files changed
+44

No files matched your search

+4
View File
@@ -4,6 +4,7 @@ use serde_json::Value;
use crate::models::connection::DatabaseType;
use crate::sql_dialect::quote_table_identifier;
use crate::transfer::format_pg_array_sql_literal;
const DBX_ROWID_COLUMN: &str = "__DBX_ROWID";
const DBX_NEO4J_ELEMENT_ID_COLUMN: &str = "__DBX_ELEMENT_ID";
@@ -936,6 +937,9 @@ pub fn format_grid_sql_literal(
if let Some(number) = value.as_number() {
return number.to_string();
}
if let Some(arr) = value.as_array() {
return format_pg_array_sql_literal(arr);
}
let text = value.as_str().map_or_else(|| value.to_string(), ToString::to_string);
if text.is_empty() {
return if database_type == Some(DatabaseType::SqlServer) { "N''" } else { "''" }.to_string();