Skip to content

Commit 0d7d9c8

Browse files
committed
mark string array/object union fields as json
1 parent 484e74a commit 0d7d9c8

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/common_union.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use std::sync::{Arc, OnceLock};
1+
use std::collections::HashMap;
2+
use std::sync::{Arc, LazyLock, OnceLock};
23

34
use datafusion::arrow::array::{
45
Array, ArrayRef, AsArray, BooleanArray, Float64Array, Int64Array, NullArray, StringArray, UnionArray,
@@ -154,6 +155,9 @@ const TYPE_ID_STR: i8 = 4;
154155
const TYPE_ID_ARRAY: i8 = 5;
155156
const TYPE_ID_OBJECT: i8 = 6;
156157

158+
static JSON_METADATA: LazyLock<HashMap<String, String>> =
159+
LazyLock::new(|| HashMap::from_iter(vec![("is_json".to_string(), "true".to_string())]));
160+
157161
fn union_fields() -> UnionFields {
158162
static FIELDS: OnceLock<UnionFields> = OnceLock::new();
159163
FIELDS
@@ -164,8 +168,14 @@ fn union_fields() -> UnionFields {
164168
(TYPE_ID_INT, Arc::new(Field::new("int", DataType::Int64, false))),
165169
(TYPE_ID_FLOAT, Arc::new(Field::new("float", DataType::Float64, false))),
166170
(TYPE_ID_STR, Arc::new(Field::new("str", DataType::Utf8, false))),
167-
(TYPE_ID_ARRAY, Arc::new(Field::new("array", DataType::Utf8, false))),
168-
(TYPE_ID_OBJECT, Arc::new(Field::new("object", DataType::Utf8, false))),
171+
(
172+
TYPE_ID_ARRAY,
173+
Arc::new(Field::new("array", DataType::Utf8, false).with_metadata(JSON_METADATA.clone())),
174+
),
175+
(
176+
TYPE_ID_OBJECT,
177+
Arc::new(Field::new("object", DataType::Utf8, false).with_metadata(JSON_METADATA.clone())),
178+
),
169179
])
170180
})
171181
.clone()

0 commit comments

Comments
 (0)