From 0856e40455f6d9f15f3058efd57fd7f6203970d7 Mon Sep 17 00:00:00 2001 From: zipg Date: Mon, 17 Aug 2026 14:54:47 +0800 Subject: [PATCH] fix(mysql): support cloud column-store large-value preview --- crates/dbx-core/src/sql_dialect/table_select.rs | 2 +- crates/dbx-core/src/sql_dialect/tests.rs | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/crates/dbx-core/src/sql_dialect/table_select.rs b/crates/dbx-core/src/sql_dialect/table_select.rs index 5070f5141f..e0ad0085ab 100644 --- a/crates/dbx-core/src/sql_dialect/table_select.rs +++ b/crates/dbx-core/src/sql_dialect/table_select.rs @@ -148,7 +148,7 @@ fn build_large_value_preview_columns(options: &TableDataSelectSqlOptions) -> Opt _ => return None, }; let marker = if database_type == Some(DatabaseType::Mysql) { - format!("CONCAT('{marker_kind}:{preview_size}:', OCTET_LENGTH({quoted})) AS {marker_alias}") + format!("CONCAT('{marker_kind}:{preview_size}:', LENGTH({quoted})) AS {marker_alias}") } else { format!("'{marker_kind}:{preview_size}' AS {marker_alias}") }; diff --git a/crates/dbx-core/src/sql_dialect/tests.rs b/crates/dbx-core/src/sql_dialect/tests.rs index 738987d2b7..35e570ec7c 100644 --- a/crates/dbx-core/src/sql_dialect/tests.rs +++ b/crates/dbx-core/src/sql_dialect/tests.rs @@ -705,11 +705,12 @@ fn builds_mysql_table_data_large_value_previews_without_truncating_keys() { }); assert!(sql.starts_with("SELECT `id`, LEFT(`payload`, 4097) AS `payload`")); - assert!(sql.contains("CONCAT('T:4096:', OCTET_LENGTH(`payload`)) AS `__DBX_LARGE_VALUE_BYTES_T_1`")); + assert!(sql.contains("CONCAT('T:4096:', LENGTH(`payload`)) AS `__DBX_LARGE_VALUE_BYTES_T_1`")); assert!(sql.contains("LEFT(`raw_value`, 4097) AS `raw_value`")); - assert!(sql.contains("CONCAT('B:4096:', OCTET_LENGTH(`raw_value`)) AS `__DBX_LARGE_VALUE_BYTES_B_2`")); + assert!(sql.contains("CONCAT('B:4096:', LENGTH(`raw_value`)) AS `__DBX_LARGE_VALUE_BYTES_B_2`")); assert!(sql.contains("LEFT(`metadata`, 4097) AS `metadata`")); - assert!(sql.contains("CONCAT('T:4096:', OCTET_LENGTH(`metadata`)) AS `__DBX_LARGE_VALUE_BYTES_J_3`")); + assert!(sql.contains("CONCAT('T:4096:', LENGTH(`metadata`)) AS `__DBX_LARGE_VALUE_BYTES_J_3`")); + assert!(!sql.contains("OCTET_LENGTH")); assert!(!sql.contains("__DBX_LARGE_VALUE_BYTES_0")); } @@ -741,10 +742,10 @@ fn previews_mysql_bounded_string_columns_only_above_the_active_budget() { }); assert!(sql.starts_with("SELECT `id`, `image_mime`, LEFT(`image_data`, 420) AS `image_data`")); - assert!(sql.contains("CONCAT('B:419:', OCTET_LENGTH(`image_data`)) AS `__DBX_LARGE_VALUE_BYTES_B_2`, LEFT(`image_url`, 420) AS `image_url`")); - assert!(sql.contains("CONCAT('T:419:', OCTET_LENGTH(`image_url`)) AS `__DBX_LARGE_VALUE_BYTES_T_3`")); + assert!(sql.contains("CONCAT('B:419:', LENGTH(`image_data`)) AS `__DBX_LARGE_VALUE_BYTES_B_2`, LEFT(`image_url`, 420) AS `image_url`")); + assert!(sql.contains("CONCAT('T:419:', LENGTH(`image_url`)) AS `__DBX_LARGE_VALUE_BYTES_T_3`")); assert!(sql.contains("LEFT(`large_note`, 420) AS `large_note`")); - assert!(sql.contains("CONCAT('T:419:', OCTET_LENGTH(`large_note`)) AS `__DBX_LARGE_VALUE_BYTES_T_4`")); + assert!(sql.contains("CONCAT('T:419:', LENGTH(`large_note`)) AS `__DBX_LARGE_VALUE_BYTES_T_4`")); assert!(sql.contains("LEFT(`large_binary`, 420) AS `large_binary`")); assert!(!sql.contains("LEFT(`image_mime`")); }