@@ -43,18 +43,12 @@ def convert(self, json_text: str, table_name: str = "data") -> str:
4343 # Add any extra tables from flattening
4444 for name , columns , rows in self ._extra_tables :
4545 statements .insert (0 , create_table_sql (name , columns , self .dialect ))
46- statements .append (
47- insert_sql (name , list (columns .keys ()), rows , self .dialect )
48- )
46+ statements .append (insert_sql (name , list (columns .keys ()), rows , self .dialect ))
4947
5048 result = "\n \n " .join (s for s in statements if s )
5149 # An empty object / nested-only root legitimately produces no SQL; say
5250 # so explicitly instead of returning "" (avoids a silent green no-op).
53- return (
54- result
55- if result
56- else "-- No columns to generate (empty or nested-only object)."
57- )
51+ return result if result else "-- No columns to generate (empty or nested-only object)."
5852
5953 def generate_schema (self , json_text : str , table_name : str = "data" ) -> str :
6054 """Generate only CREATE TABLE statements from JSON data."""
@@ -74,7 +68,9 @@ def generate_schema(self, json_text: str, table_name: str = "data") -> str:
7468 else :
7569 columns = self ._infer_columns (objects )
7670 else :
77- columns = {"value" : "TEXT" }
71+ # Primitive array — infer type from first element when available
72+ col_type = sql_type_for (data [0 ], self .dialect ) if isinstance (data , list ) and data else "TEXT"
73+ columns = {"value" : col_type }
7874
7975 statements = []
8076 if columns :
@@ -96,11 +92,7 @@ def _convert_objects(self, objects: list[dict], table_name: str) -> str:
9692 # Process nested arrays into child tables
9793 for obj in objects :
9894 for key , value in obj .items ():
99- if (
100- isinstance (value , list )
101- and value
102- and all (isinstance (v , dict ) for v in value )
103- ):
95+ if isinstance (value , list ) and value and all (isinstance (v , dict ) for v in value ):
10496 self ._flatten_nested (table_name , key , value , obj )
10597 else :
10698 columns = self ._infer_columns (objects )
@@ -134,9 +126,7 @@ def _convert_objects(self, objects: list[dict], table_name: str) -> str:
134126 return ""
135127 parts = [create_table_sql (table_name , columns , self .dialect )]
136128 if rows :
137- parts .append (
138- insert_sql (table_name , list (columns .keys ()), rows , self .dialect )
139- )
129+ parts .append (insert_sql (table_name , list (columns .keys ()), rows , self .dialect ))
140130 return "\n \n " .join (parts )
141131
142132 def _convert_primitives (self , values : list , table_name : str ) -> str :
@@ -215,15 +205,8 @@ def _infer_columns_flattened(
215205 columns [flat_key ] = inferred
216206 flat_map [flat_key ] = (key , sub_key )
217207 elif inferred is not None :
218- columns [flat_key ] = self ._merge_type (
219- columns [flat_key ], inferred
220- )
221- elif (
222- isinstance (value , list )
223- and value
224- and self .flatten
225- and all (isinstance (v , dict ) for v in value )
226- ):
208+ columns [flat_key ] = self ._merge_type (columns [flat_key ], inferred )
209+ elif isinstance (value , list ) and value and self .flatten and all (isinstance (v , dict ) for v in value ):
227210 # Skip - goes to separate table
228211 pass
229212 else :
@@ -279,9 +262,5 @@ def _process_flatten(self, objects: list, table_name: str) -> None:
279262 return
280263 for obj in objects :
281264 for key , value in obj .items ():
282- if (
283- isinstance (value , list )
284- and value
285- and all (isinstance (v , dict ) for v in value )
286- ):
265+ if isinstance (value , list ) and value and all (isinstance (v , dict ) for v in value ):
287266 self ._flatten_nested (table_name , key , value , obj )
0 commit comments