1- use std:: sync:: { Arc , OnceLock } ;
1+ use std:: collections:: HashMap ;
2+ use std:: sync:: { Arc , LazyLock , OnceLock } ;
23
34use datafusion:: arrow:: array:: {
45 Array , ArrayRef , AsArray , BooleanArray , Float64Array , Int64Array , NullArray , StringArray , UnionArray ,
@@ -154,6 +155,9 @@ const TYPE_ID_STR: i8 = 4;
154155const TYPE_ID_ARRAY : i8 = 5 ;
155156const 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+
157161fn 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