mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-28 00:06:50 +00:00
perf(grid): pre-stringify JSON/JSONB values and truncate cell display
Serialize JSON/JSONB as strings in Postgres and MySQL drivers to avoid repeated JSON.stringify in the render loop. Truncate cell display to 256 chars so the browser doesn't lay out huge text nodes on scroll.
This commit is contained in:
@@ -85,10 +85,10 @@ fn mysql_value_to_json(row: &MySqlRow, idx: usize, type_name: &str) -> serde_jso
|
||||
|
||||
if upper_type == "JSON" {
|
||||
if let Ok(v) = row.try_get::<serde_json::Value, _>(idx) {
|
||||
return v;
|
||||
return serde_json::Value::String(v.to_string());
|
||||
}
|
||||
if let Ok(v) = row.try_get::<String, _>(idx) {
|
||||
return serde_json::from_str::<serde_json::Value>(&v).unwrap_or(serde_json::Value::String(v));
|
||||
return serde_json::Value::String(v);
|
||||
}
|
||||
return serde_json::Value::Null;
|
||||
}
|
||||
|
||||
@@ -33,10 +33,10 @@ fn pg_value_to_json(row: &PgRow, idx: usize, type_name: &str) -> serde_json::Val
|
||||
|
||||
if upper == "JSON" || upper == "JSONB" {
|
||||
if let Ok(v) = row.try_get::<serde_json::Value, _>(idx) {
|
||||
return v;
|
||||
return serde_json::Value::String(v.to_string());
|
||||
}
|
||||
if let Ok(v) = row.try_get::<String, _>(idx) {
|
||||
return serde_json::from_str::<serde_json::Value>(&v).unwrap_or(serde_json::Value::String(v));
|
||||
return serde_json::Value::String(v);
|
||||
}
|
||||
return serde_json::Value::Null;
|
||||
}
|
||||
|
||||
@@ -470,11 +470,13 @@ function toggleSort(colName: string) {
|
||||
}
|
||||
}
|
||||
|
||||
const CELL_DISPLAY_MAX_LENGTH = 256;
|
||||
|
||||
function formatCell(value: CellValue): string {
|
||||
if (value === null) return "NULL";
|
||||
if (typeof value === "boolean") return value ? "true" : "false";
|
||||
if (typeof value === "object") return JSON.stringify(value);
|
||||
return String(value);
|
||||
const s = typeof value === "object" ? JSON.stringify(value) : String(value);
|
||||
return s.length > CELL_DISPLAY_MAX_LENGTH ? s.slice(0, CELL_DISPLAY_MAX_LENGTH) : s;
|
||||
}
|
||||
|
||||
function quoteIdent(name: string): string {
|
||||
|
||||
Reference in New Issue
Block a user