fix(agent): preserve JDBC decimal precision
This commit is contained in:
1 parent
710eb3d008
commit
b6274858fe
3 files changed
+79
-1
No files matched your search
@@ -1029,6 +1029,10 @@ pub fn format_grid_sql_literal(
|
||||
return format_pg_array_sql_literal(arr);
|
||||
}
|
||||
let text = value.as_str().map_or_else(|| value.to_string(), ToString::to_string);
|
||||
if column_info.map(|column| is_numeric_type(&column.data_type)).unwrap_or(false) && is_numeric_literal(&text) {
|
||||
// BigDecimal/BigInteger cells cross JSON-RPC as strings so browsers cannot round them.
|
||||
return text;
|
||||
}
|
||||
if database_type == Some(DatabaseType::ManticoreSearch) {
|
||||
if let Some(typed_value) = manticore_typed_attribute_value(&text, column_info) {
|
||||
return format_grid_sql_literal(&typed_value, database_type, column_info);
|
||||
@@ -2312,6 +2316,25 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn formats_numeric_string_literals_for_numeric_columns_without_quotes() {
|
||||
let number = column("amount", "NUMBER(20,0)", true, None);
|
||||
let text = column("code", "VARCHAR2(32)", true, None);
|
||||
|
||||
assert_eq!(
|
||||
format_grid_sql_literal(&json!("12345678901234567890"), Some(DatabaseType::Oracle), Some(&number)),
|
||||
"12345678901234567890"
|
||||
);
|
||||
assert_eq!(
|
||||
format_grid_sql_literal(&json!("12345678901234567890"), Some(DatabaseType::Oracle), Some(&text)),
|
||||
"'12345678901234567890'"
|
||||
);
|
||||
assert_eq!(
|
||||
format_grid_sql_literal(&json!("123-not-a-number"), Some(DatabaseType::Oracle), Some(&number)),
|
||||
"'123-not-a-number'"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn prepares_oracle_timestamp_insert_from_iso_grid_value() {
|
||||
let result = prepare_data_grid_save(DataGridSaveStatementOptions {
|
||||
|
||||
Reference in new issue
Block a user