test checkpoint
This commit is contained in:
@ -622,11 +622,7 @@ impl Merger {
|
|||||||
for key in &sorted_keys {
|
for key in &sorted_keys {
|
||||||
columns.push(format!("\"{}\"", key));
|
columns.push(format!("\"{}\"", key));
|
||||||
let val = entity_pairs.get(key).unwrap();
|
let val = entity_pairs.get(key).unwrap();
|
||||||
if val.as_str() == Some("") {
|
values.push(Self::format_sql_value(val, key, entity_type));
|
||||||
values.push("NULL".to_string());
|
|
||||||
} else {
|
|
||||||
values.push(Self::quote_literal(val));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if columns.is_empty() {
|
if columns.is_empty() {
|
||||||
@ -660,7 +656,11 @@ impl Merger {
|
|||||||
if val.as_str() == Some("") {
|
if val.as_str() == Some("") {
|
||||||
set_clauses.push(format!("\"{}\" = NULL", key));
|
set_clauses.push(format!("\"{}\" = NULL", key));
|
||||||
} else {
|
} else {
|
||||||
set_clauses.push(format!("\"{}\" = {}", key, Self::quote_literal(val)));
|
set_clauses.push(format!(
|
||||||
|
"\"{}\" = {}",
|
||||||
|
key,
|
||||||
|
Self::format_sql_value(val, key, entity_type)
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -841,6 +841,34 @@ impl Merger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn format_sql_value(val: &Value, key: &str, entity_type: &Type) -> String {
|
||||||
|
if val.as_str() == Some("") {
|
||||||
|
return "NULL".to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut is_pg_array = false;
|
||||||
|
if let Some(field_types_map) = entity_type.field_types.as_ref().and_then(|v| v.as_object()) {
|
||||||
|
if let Some(t_val) = field_types_map.get(key) {
|
||||||
|
if let Some(t_str) = t_val.as_str() {
|
||||||
|
if t_str.starts_with('_') {
|
||||||
|
is_pg_array = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if is_pg_array && val.is_array() {
|
||||||
|
let mut s = val.to_string();
|
||||||
|
if s.starts_with('[') && s.ends_with(']') {
|
||||||
|
s.replace_range(0..1, "{");
|
||||||
|
s.replace_range(s.len() - 1..s.len(), "}");
|
||||||
|
}
|
||||||
|
Self::quote_literal(&Value::String(s))
|
||||||
|
} else {
|
||||||
|
Self::quote_literal(val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn quote_literal(val: &Value) -> String {
|
fn quote_literal(val: &Value) -> String {
|
||||||
match val {
|
match val {
|
||||||
Value::Null => "NULL".to_string(),
|
Value::Null => "NULL".to_string(),
|
||||||
|
|||||||
Reference in New Issue
Block a user