fix: format bool as 0/1 for all BIT columns, not just MySQL

This commit is contained in:
t8y2 2026-06-16 18:41:54 +08:00
parent 9a68a4d7d2
commit 3024339c91
1 changed files with 13 additions and 5 deletions

View File

@ -765,10 +765,17 @@ pub fn format_grid_sql_literal(
if value.is_null() {
return "NULL".to_string();
}
if is_mysql_bit_literal_column(database_type, column_info) {
if let Some(value) = value.as_bool() {
// Boolean values on BIT columns always use numeric 0/1.
// This covers MySQL, SQL Server, and any other database where BIT
// is a numeric/boolean type rather than a bit-string type like
// PostgreSQL's bit(n).
if let Some(value) = value.as_bool() {
if is_bit_literal_column(column_info) {
return if value { "1" } else { "0" }.to_string();
}
return if value { "TRUE" } else { "FALSE" }.to_string();
}
if is_mysql_bit_literal_column(database_type, column_info) {
if let Some(number) = value.as_number() {
return number.to_string();
}
@ -776,9 +783,6 @@ pub fn format_grid_sql_literal(
return text;
}
}
if let Some(value) = value.as_bool() {
return if value { "TRUE" } else { "FALSE" }.to_string();
}
if let Some(number) = value.as_number() {
return number.to_string();
}
@ -819,6 +823,10 @@ fn is_mysql_bit_literal_column(database_type: Option<DatabaseType>, column_info:
&& column_info.map(|column| is_bit_column_type(&column.data_type)).unwrap_or(false)
}
fn is_bit_literal_column(column_info: Option<&DataGridColumnInfo>) -> bool {
column_info.map(|column| is_bit_column_type(&column.data_type)).unwrap_or(false)
}
fn is_bit_column_type(data_type: &str) -> bool {
let lower = data_type.to_ascii_lowercase();
lower.split(|ch: char| !ch.is_ascii_alphanumeric()).any(|token| token == "bit")