fix(json2): preserve metadata when adding columns via alter table (#8696)

* fix(json2): support adding columns via alter table

Signed-off-by: fys <fengys1996@gmail.com>

* fix(json2): scope missing-column null handling to JSON2

---------

Signed-off-by: fys <fengys1996@gmail.com>
This commit is contained in:
fys
2026-10-08 09:23:25 +00:00
committed by GitHub
parent 7f0f592b6b
commit c46fbde9ac
9 changed files with 234 additions and 34 deletions
+24
View File
@@ -1192,6 +1192,7 @@ mod tests {
use std::collections::HashMap;
use api::v1::{SetDatabaseOptions, UnsetDatabaseOptions};
use datatypes::extension::json::is_json2_extension_type;
use datatypes::value::Value;
use session::context::{QueryContext, QueryContextBuilder};
use sql::dialect::GreptimeDbDialect;
@@ -1201,6 +1202,29 @@ mod tests {
use super::*;
#[test]
fn test_to_alter_add_json2_column_preserves_extension() {
let sql = "ALTER TABLE monitor ADD COLUMN payload JSON2;";
let stmt =
ParserContext::create_with_dialect(sql, &GreptimeDbDialect {}, ParseOptions::default())
.unwrap()
.pop()
.unwrap();
let Statement::AlterTable(alter_table) = stmt else {
unreachable!()
};
let expr = to_alter_table_expr(alter_table, &QueryContext::arc()).unwrap();
let AlterTableKind::AddColumns(AddColumns { add_columns, .. }) = expr.kind.unwrap() else {
unreachable!()
};
let column_def = add_columns[0].column_def.as_ref().unwrap();
let column_schema = try_as_column_schema(column_def).unwrap();
let schema = Schema::new(vec![column_schema]);
assert!(is_json2_extension_type(&schema.arrow_schema().fields()[0]));
}
#[test]
fn test_create_flow_tql_expr() {
let sql = r#"