11# -*- coding: utf-8 -*-
22import contextlib
3+ import json
34import logging
45import re
56import time
@@ -830,9 +831,9 @@ def test_array_types(self, cursor):
830831 ("SELECT ARRAY[ARRAY[1, 2], ARRAY[3, 4]] AS nested_array" , "nested_array" ),
831832 # Array as JSON (wrapped in object - top-level arrays not supported)
832833 (
833- "SELECT CAST(MAP(ARRAY['items '], ARRAY[ARRAY['Alice', 'Bob', 'Charlie ']]) AS JSON) "
834- "AS json_array " ,
835- "json_array " ,
834+ "SELECT CAST(MAP(ARRAY['data '], ARRAY[ARRAY['Alice', 'Bob']]) AS JSON) "
835+ "AS array_json " ,
836+ "array_json " ,
836837 ),
837838 ]
838839
@@ -900,28 +901,22 @@ def test_map_types(self, cursor):
900901 def test_complex_combinations (self , cursor ):
901902 """Test complex combinations of data types."""
902903 test_cases = [
903- # Struct containing array and map
904+ # Struct containing array and map (using JSON conversion for complex structures)
904905 (
905- (
906- "SELECT ROW(ARRAY[1, 2, 3], "
907- "MAP(ARRAY['a', 'b'], ARRAY[1, 2])) AS struct_with_collections"
908- ),
906+ "SELECT CAST(ROW(ARRAY[1, 2, 3], MAP(ARRAY['a', 'b'], ARRAY[1, 2])) AS JSON) "
907+ "AS struct_with_collections" ,
909908 "struct_with_collections" ,
910909 ),
911- # Array of maps
910+ # Array of maps (using JSON conversion)
912911 (
913- (
914- "SELECT ARRAY[MAP(ARRAY['name'], ARRAY['Alice']), "
915- "MAP(ARRAY['name'], ARRAY['Bob'])] AS array_of_maps"
916- ),
912+ "SELECT CAST(ARRAY[MAP(ARRAY['name'], ARRAY['Alice']), "
913+ "MAP(ARRAY['name'], ARRAY['Bob'])] AS JSON) AS array_of_maps" ,
917914 "array_of_maps" ,
918915 ),
919- # Map with array values (using consistent types )
916+ # Map with array values (using JSON conversion )
920917 (
921- (
922- "SELECT MAP(ARRAY['numbers', 'letters'], "
923- "ARRAY[ARRAY['1', '2', '3'], ARRAY['a', 'b', 'c']]) AS map_with_arrays"
924- ),
918+ "SELECT CAST(MAP(ARRAY['numbers', 'letters'], "
919+ "ARRAY[ARRAY['1', '2', '3'], ARRAY['a', 'b', 'c']]) AS JSON) AS map_with_arrays" ,
925920 "map_with_arrays" ,
926921 ),
927922 ]
@@ -933,6 +928,18 @@ def test_complex_combinations(self, cursor):
933928 complex_value = result [0 ]
934929 _logger .info (f"{ description } : { complex_value !r} (type: { type (complex_value ).__name__ } )" )
935930
936- # Validate complex value
937- assert complex_value is not None , f"Complex value should not be None for { description } "
931+ # For JSON cast results, expect string values that can be parsed as JSON
932+ if isinstance (complex_value , str ):
933+ try :
934+ # Test that the JSON string can be parsed
935+ parsed = json .loads (complex_value )
936+ _logger .info (f" Parsed JSON: { parsed !r} " )
937+ assert parsed is not None , f"Parsed JSON should not be None for { description } "
938+ except json .JSONDecodeError as e :
939+ raise AssertionError (f"JSON parsing failed for { description } : { e } " ) from e
940+ else :
941+ # If it's not a string, it should still be a valid value (not None)
942+ assert complex_value is not None , (
943+ f"Complex value should not be None for { description } "
944+ )
938945 _logger .info (f"{ description } : Complex value type { type (complex_value ).__name__ } " )
0 commit comments