refactor: separate a json2 extension type (#8745)

Signed-off-by: luofucong <luofc@foxmail.com>
This commit is contained in:
LFC
2026-08-05 12:15:05 +00:00
committed by GitHub
parent ec09d8809a
commit 95d9d92e42
30 changed files with 388 additions and 191 deletions
+3 -3
View File
@@ -45,7 +45,7 @@ use datatypes::arrow::util::display::{
ArrayFormatter, ArrayFormatterFactory, DisplayIndex, FormatOptions, FormatResult,
};
use datatypes::arrow::util::pretty::pretty_format_batches_with_options;
use datatypes::extension::json::is_json_extension_type;
use datatypes::extension::json::is_any_json_extension_type;
use datatypes::prelude::{ConcreteDataType, DataType, VectorRef};
use datatypes::schema::{ColumnSchema, Schema, SchemaRef};
use datatypes::types::{JsonFormat, StructField, StructType, jsonb_to_string};
@@ -455,7 +455,7 @@ impl ArrayFormatterFactory for BinaryFormatterFactory {
Ok(Some(ArrayFormatter::new(
Box::new(BinaryFormatter {
array,
is_json: field.is_some_and(is_json_extension_type),
is_json: field.is_some_and(is_any_json_extension_type),
default: ArrayFormatter::try_new(array, options)?,
null: options.null(),
}),
@@ -485,7 +485,7 @@ impl DisplayIndex for BinaryFormatter<'_> {
ArrowDataType::Binary => self.array.as_binary::<i32>().value(idx),
ArrowDataType::LargeBinary => self.array.as_binary::<i64>().value(idx),
ArrowDataType::BinaryView => self.array.as_binary_view().value(idx),
_ => unreachable!(),
_ => return Ok(self.default.value(idx).write(f)?),
};
let value =
jsonb_to_string(bytes).map_err(|e| ArrowError::ExternalError(Box::new(e)))?;
+2 -3
View File
@@ -378,7 +378,7 @@ mod tests {
use datatypes::arrow::array::{AsArray, StringArray, StringViewArray, UInt32Array};
use datatypes::arrow::datatypes::{DataType, Field, Schema as ArrowSchema, UInt32Type};
use datatypes::data_type::ConcreteDataType;
use datatypes::extension::json::{JsonExtensionType, JsonMetadata};
use datatypes::extension::json::JsonExtensionType;
use datatypes::schema::{ColumnSchema, Schema};
use datatypes::vectors::{BinaryVector, StringVector, UInt32Vector};
@@ -594,8 +594,7 @@ mod tests {
#[test]
fn test_legacy_json_with_extension_does_not_align_as_structured_json() {
let field = Field::new("j", DataType::Binary, true)
.with_extension_type(JsonExtensionType::new(Arc::new(JsonMetadata::default())));
let field = Field::new("j", DataType::Binary, true).with_extension_type(JsonExtensionType);
let arrow_schema = Arc::new(ArrowSchema::new(vec![field]));
let schema = Arc::new(Schema::try_from(arrow_schema).unwrap());
let columns: Vec<VectorRef> = vec![Arc::new(BinaryVector::from(vec![Some(