From 2efbb2f5d7c46c0a4fccc1d4061ccb70aee08667 Mon Sep 17 00:00:00 2001 From: luofucong Date: Wed, 22 Jul 2026 17:15:23 +0800 Subject: [PATCH] fix(json2): treat empty object as null when insert Signed-off-by: luofucong --- src/datatypes/src/vectors/json/builder.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/datatypes/src/vectors/json/builder.rs b/src/datatypes/src/vectors/json/builder.rs index ebf11ab7961..91c83fb3e3d 100644 --- a/src/datatypes/src/vectors/json/builder.rs +++ b/src/datatypes/src/vectors/json/builder.rs @@ -114,6 +114,7 @@ fn json_variant_into_struct_value( fn json_variant_into_value(value: JsonVariant, expected_type: &ConcreteDataType) -> Result { let value = match (value, expected_type) { (JsonVariant::Null, _) | (_, ConcreteDataType::Null(_)) => Value::Null, + (JsonVariant::Object(object), _) if object.is_empty() => Value::Null, (JsonVariant::Bool(x), ConcreteDataType::Boolean(_)) => Value::Boolean(x), (JsonVariant::Number(JsonNumber::PosInt(x)), ConcreteDataType::UInt64(_)) => { Value::UInt64(x) @@ -182,7 +183,7 @@ impl MutableVector for JsonVectorBuilder { } fn to_vector(&mut self) -> VectorRef { - self.try_build().unwrap_or_else(|e| panic!("{}", e)) + self.try_build().unwrap_or_else(|e| panic!("{:?}", e)) } fn to_vector_cloned(&self) -> VectorRef { @@ -355,6 +356,14 @@ mod tests { #[test] fn test_json_variant_into_struct_value() -> Result<()> { + assert_eq!( + json_variant_into_value( + JsonVariant::Object(Default::default()), + &ConcreteDataType::string_datatype(), + )?, + Value::Null + ); + let item_type = ConcreteDataType::struct_datatype(StructType::new(Arc::new(vec![StructField::new( "id".to_string(),