2021-09-12 12:35:27 +00:00
-- Tags: no-fasttest
2023-01-27 08:07:44 +00:00
-- Tag: no-fasttest due to only SIMD JSON is available in fasttest
2021-09-12 12:35:27 +00:00
2019-07-11 08:39:30 +00:00
SELECT ' --allow_simdjson=1-- ' ;
2019-05-16 19:39:42 +00:00
SET allow_simdjson = 1 ;
2019-05-13 23:44:55 +00:00
SELECT ' --JSONLength-- ' ;
2019-05-10 09:15:10 +00:00
SELECT JSONLength ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
2019-05-13 23:44:55 +00:00
SELECT JSONLength ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONLength ( ' {} ' ) ;
SELECT ' --JSONHas-- ' ;
2019-05-10 09:15:10 +00:00
SELECT JSONHas ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONHas ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
2019-05-13 23:44:55 +00:00
SELECT JSONHas ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' c ' ) ;
2019-10-12 11:42:43 +00:00
SELECT ' --isValidJSON-- ' ;
SELECT isValidJSON ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
SELECT isValidJSON ( ' not a json ' ) ;
SELECT isValidJSON ( ' "HX-= ' ) ;
2019-05-13 23:44:55 +00:00
SELECT ' --JSONKey-- ' ;
SELECT JSONKey ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , 1 ) ;
SELECT JSONKey ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , 2 ) ;
SELECT JSONKey ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , - 1 ) ;
SELECT JSONKey ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , - 2 ) ;
SELECT ' --JSONType-- ' ;
SELECT JSONType ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
2019-07-11 08:39:30 +00:00
SELECT JSONType ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
2023-03-01 02:04:06 +00:00
SELECT JSONType ( ' {"a": true} ' , ' a ' ) ;
2019-07-11 08:39:30 +00:00
SELECT ' --JSONExtract<numeric>-- ' ;
SELECT JSONExtractInt ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 1 ) ;
SELECT JSONExtractFloat ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 2 ) ;
SELECT JSONExtractUInt ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , - 1 ) ;
SELECT JSONExtractBool ( ' {"passed": true} ' , ' passed ' ) ;
SELECT JSONExtractBool ( ' "HX-= ' ) ;
2023-01-19 17:03:24 +00:00
SELECT JSONExtractBool ( ' -1 ' ) ;
2019-07-11 08:39:30 +00:00
SELECT ' --JSONExtractString-- ' ;
SELECT JSONExtractString ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONExtractString ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , 1 ) ;
select JSONExtractString ( ' {"abc":"\\n\\u0000"} ' , ' abc ' ) ;
select JSONExtractString ( ' {"abc":"\\u263a"} ' , ' abc ' ) ;
select JSONExtractString ( ' {"abc":"\\u263"} ' , ' abc ' ) ;
select JSONExtractString ( ' {"abc":"hello} ' , ' abc ' ) ;
SELECT ' --JSONExtract (generic)-- ' ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Tuple(String, Array(Float64)) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Tuple(a String, b Array(Float64)) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Tuple(b Array(Float64), a String) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Tuple(a FixedString(6), c UInt8) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' , ' String ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(Float32) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Tuple(Int8, Float32, UInt16) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(Int8) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(Nullable(Int8)) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(UInt8) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(Nullable(UInt8)) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 1 , ' Int8 ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 2 , ' Int32 ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 4 , ' Nullable(Int64) ' ) ;
SELECT JSONExtract ( ' {"passed": true} ' , ' passed ' , ' UInt8 ' ) ;
SELECT JSONExtract ( ' {"day": "Thursday"} ' , ' day ' , ' Enum8(\ ' Sunday \ ' = 0, \ ' Monday \ ' = 1, \ ' Tuesday \ ' = 2, \ ' Wednesday \ ' = 3, \ ' Thursday \ ' = 4, \ ' Friday \ ' = 5, \ ' Saturday \ ' = 6) ' ) ;
SELECT JSONExtract ( ' {"day": 5} ' , ' day ' , ' Enum8(\ ' Sunday \ ' = 0, \ ' Monday \ ' = 1, \ ' Tuesday \ ' = 2, \ ' Wednesday \ ' = 3, \ ' Thursday \ ' = 4, \ ' Friday \ ' = 5, \ ' Saturday \ ' = 6) ' ) ;
2019-08-28 22:51:02 +00:00
SELECT JSONExtract ( ' {"a":3,"b":5,"c":7} ' , ' Tuple(a Int, b Int) ' ) ;
SELECT JSONExtract ( ' {"a":3,"b":5,"c":7} ' , ' Tuple(c Int, a Int) ' ) ;
SELECT JSONExtract ( ' {"a":3,"b":5,"c":7} ' , ' Tuple(b Int, d Int) ' ) ;
SELECT JSONExtract ( ' {"a":3,"b":5,"c":7} ' , ' Tuple(Int, Int) ' ) ;
SELECT JSONExtract ( ' {"a":3} ' , ' Tuple(Int, Int) ' ) ;
SELECT JSONExtract ( ' [3,5,7] ' , ' Tuple(Int, Int) ' ) ;
SELECT JSONExtract ( ' [3] ' , ' Tuple(Int, Int) ' ) ;
2021-07-01 16:46:34 +00:00
SELECT JSONExtract ( ' {"a":123456, "b":3.55} ' , ' Tuple(a LowCardinality(Int32), b Decimal(5, 2)) ' ) ;
SELECT JSONExtract ( ' {"a":1, "b":"417ddc5d-e556-4d27-95dd-a34d84e46a50"} ' , ' Tuple(a Int8, b UUID) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' , ' LowCardinality(String) ' ) ;
SELECT JSONExtract ( ' {"a":3333.6333333333333333333333, "b":"test"} ' , ' Tuple(a Decimal(10,1), b LowCardinality(String)) ' ) ;
2022-09-19 12:00:48 +00:00
SELECT JSONExtract ( ' {"a":"3333.6333333333333333333333", "b":"test"} ' , ' Tuple(a Decimal(10,1), b LowCardinality(String)) ' ) ;
2021-07-01 16:46:34 +00:00
SELECT JSONExtract ( ' {"a":3333.6333333333333333333333, "b":"test"} ' , ' Tuple(a Decimal(20,10), b LowCardinality(String)) ' ) ;
2022-09-19 12:00:48 +00:00
SELECT JSONExtract ( ' {"a":"3333.6333333333333333333333", "b":"test"} ' , ' Tuple(a Decimal(20,10), b LowCardinality(String)) ' ) ;
2021-07-01 16:46:34 +00:00
SELECT JSONExtract ( ' {"a":123456.123456} ' , ' a ' , ' Decimal(20, 4) ' ) as a , toTypeName ( a ) ;
2022-09-19 12:00:48 +00:00
SELECT JSONExtract ( ' {"a":"123456.123456"} ' , ' a ' , ' Decimal(20, 4) ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"123456789012345.12"} ' , ' a ' , ' Decimal(30, 4) ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"1234567890.12345678901234567890", "b":"test"} ' , ' Tuple(a Decimal(35,20), b LowCardinality(String)) ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"1234567890.123456789012345678901234567890", "b":"test"} ' , ' Tuple(a Decimal(45,30), b LowCardinality(String)) ' ) as a , toTypeName ( a ) ;
2021-07-04 10:31:44 +00:00
SELECT toDecimal64 ( 123456789012345 . 12 , 4 ) , JSONExtract ( ' {"a":123456789012345.12} ' , ' a ' , ' Decimal(30, 4) ' ) ;
SELECT toDecimal128 ( 1234567890 . 12345678901234567890 , 20 ) , JSONExtract ( ' {"a":1234567890.12345678901234567890, "b":"test"} ' , ' Tuple(a Decimal(35,20), b LowCardinality(String)) ' ) ;
SELECT toDecimal256 ( 1234567890 . 123456789012345678901234567890 , 30 ) , JSONExtract ( ' {"a":1234567890.12345678901234567890, "b":"test"} ' , ' Tuple(a Decimal(45,30), b LowCardinality(String)) ' ) ;
2022-09-19 12:00:48 +00:00
SELECT JSONExtract ( ' {"a":-1234567890} ' , ' a ' , ' Int32 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":1234567890} ' , ' a ' , ' UInt32 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":-1234567890123456789} ' , ' a ' , ' Int64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":1234567890123456789} ' , ' a ' , ' UInt64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":-1234567890123456789} ' , ' a ' , ' Int128 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":1234567890123456789} ' , ' a ' , ' UInt128 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":-1234567890123456789} ' , ' a ' , ' Int256 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":1234567890123456789} ' , ' a ' , ' UInt256 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":-123456789.345} ' , ' a ' , ' Int32 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":123456789.345} ' , ' a ' , ' UInt32 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":-123456789012.345} ' , ' a ' , ' Int64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":123456789012.345} ' , ' a ' , ' UInt64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":-123456789012.345} ' , ' a ' , ' Int128 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":123456789012.345} ' , ' a ' , ' UInt128 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":-123456789012.345} ' , ' a ' , ' Int256 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":123456789012.345} ' , ' a ' , ' UInt256 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"-123456789"} ' , ' a ' , ' Int32 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"123456789"} ' , ' a ' , ' UInt32 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"-1234567890123456789"} ' , ' a ' , ' Int64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"1234567890123456789"} ' , ' a ' , ' UInt64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"-12345678901234567890123456789012345678"} ' , ' a ' , ' Int128 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"12345678901234567890123456789012345678"} ' , ' a ' , ' UInt128 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"-11345678901234567890123456789012345678901234567890123456789012345678901234567"} ' , ' a ' , ' Int256 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"11345678901234567890123456789012345678901234567890123456789012345678901234567"} ' , ' a ' , ' UInt256 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"-1234567899999"} ' , ' a ' , ' Int32 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"1234567899999"} ' , ' a ' , ' UInt32 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"-1234567890123456789999"} ' , ' a ' , ' Int64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":"1234567890123456789999"} ' , ' a ' , ' UInt64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":0} ' , ' a ' , ' Bool ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a":1} ' , ' a ' , ' Bool ' ) as a , toTypeName ( a ) ;
2019-07-11 08:39:30 +00:00
2023-01-19 14:24:55 +00:00
SELECT JSONExtract ( ' {"a": "-123456789012.345"} ' , ' a ' , ' Int64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a": "123456789012.345"} ' , ' a ' , ' UInt64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a": "-2000.22"} ' , ' a ' , ' UInt64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a": "-2000.22"} ' , ' a ' , ' Int8 ' ) as a , toTypeName ( a ) ;
2023-04-12 02:18:07 +00:00
SELECT JSONExtract ( ' {"a": "hello", "b": "world"} ' , ' Map(String, String) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": "world"} ' , ' Map(LowCardinality(String), String) ' ) ;
SELECT JSONExtract ( ' {"a": ["hello", 100.0], "b": ["world", 200]} ' , ' Map(String, Tuple(String, Float64)) ' ) ;
SELECT JSONExtract ( ' {"a": [100.0, 200], "b": [-100, 200.0, 300]} ' , ' Map(String, Array(Float64)) ' ) ;
SELECT JSONExtract ( ' {"a": {"c": "hello"}, "b": {"d": "world"}} ' , ' Map(String, Map(String, String)) ' ) ;
SELECT JSONExtract ( ' {"a": {"c": "hello"}, "b": {"d": "world"}} ' , ' a ' , ' Map(String, String) ' ) ;
2019-07-11 08:39:30 +00:00
SELECT ' --JSONExtractKeysAndValues-- ' ;
SELECT JSONExtractKeysAndValues ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' String ' ) ;
SELECT JSONExtractKeysAndValues ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Array(Float64) ' ) ;
SELECT JSONExtractKeysAndValues ( ' {"a": "hello", "b": "world"} ' , ' String ' ) ;
SELECT JSONExtractKeysAndValues ( ' {"x": {"a": 5, "b": 7, "c": 11}} ' , ' x ' , ' Int8 ' ) ;
2021-07-01 16:46:34 +00:00
SELECT JSONExtractKeysAndValues ( ' {"a": "hello", "b": "world"} ' , ' LowCardinality(String) ' ) ;
2019-07-11 08:39:30 +00:00
SELECT ' --JSONExtractRaw-- ' ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 1 ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' , ' d ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' , ' d ' , 2 ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' , ' d ' , 3 ) ;
SELECT JSONExtractRaw ( ' {"passed": true} ' ) ;
SELECT JSONExtractRaw ( ' {} ' ) ;
SELECT JSONExtractRaw ( ' {"abc":"\\n\\u0000"} ' , ' abc ' ) ;
SELECT JSONExtractRaw ( ' {"abc":"\\u263a"} ' , ' abc ' ) ;
2020-04-20 10:08:39 +00:00
SELECT ' --JSONExtractArrayRaw-- ' ;
SELECT JSONExtractArrayRaw ( ' ' ) ;
SELECT JSONExtractArrayRaw ( ' {"a": "hello", "b": "not_array"} ' ) ;
SELECT JSONExtractArrayRaw ( ' [] ' ) ;
SELECT JSONExtractArrayRaw ( ' [[],[]] ' ) ;
SELECT JSONExtractArrayRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONExtractArrayRaw ( ' [1,2,3,4,5,"hello"] ' ) ;
SELECT JSONExtractArrayRaw ( arrayJoin ( JSONExtractArrayRaw ( ' [[1,2,3],[4,5,6]] ' ) ) ) ;
SELECT ' --JSONExtractKeysAndValuesRaw-- ' ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' ) ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' ) ;
2019-07-11 08:39:30 +00:00
SELECT ' --const/non-const mixed-- ' ;
SELECT JSONExtractString ( ' ["a", "b", "c", "d", "e"] ' , idx ) FROM ( SELECT arrayJoin ( [ 1 , 2 , 3 , 4 , 5 ] ) AS idx ) ;
SELECT JSONExtractString ( json , ' s ' ) FROM ( SELECT arrayJoin ( [ ' {"s":"u"} ' , ' {"s":"v"} ' ] ) AS json ) ;
2020-07-10 14:04:20 +00:00
SELECT ' --show error: type should be const string ' ;
2023-04-12 02:18:07 +00:00
SELECT JSONExtractKeysAndValues ( [ ] , JSONLength ( ' ^?V{LSwp ' ) ) ; -- { serverError ILLEGAL_COLUMN }
WITH ' {"i": 1, "f": 1.2} ' AS json SELECT JSONExtract ( json , ' i ' , JSONType ( json , ' i ' ) ) ; -- { serverError ILLEGAL_COLUMN }
SELECT ' --show error: key of map type should be String ' ;
SELECT JSONExtract ( ' {"a": [100.0, 200], "b": [-100, 200.0, 300]} ' , ' Map(Int64, Array(Float64)) ' ) ; -- { serverError ILLEGAL_TYPE_OF_ARGUMENT }
2019-07-11 08:39:30 +00:00
SELECT ' --allow_simdjson=0-- ' ;
SET allow_simdjson = 0 ;
SELECT ' --JSONLength-- ' ;
SELECT JSONLength ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
SELECT JSONLength ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONLength ( ' {} ' ) ;
SELECT ' --JSONHas-- ' ;
SELECT JSONHas ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONHas ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONHas ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' c ' ) ;
2020-04-20 10:08:39 +00:00
SELECT ' --isValidJSON-- ' ;
SELECT isValidJSON ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
SELECT isValidJSON ( ' not a json ' ) ;
SELECT isValidJSON ( ' "HX-= ' ) ;
2019-07-11 08:39:30 +00:00
SELECT ' --JSONKey-- ' ;
SELECT JSONKey ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , 1 ) ;
SELECT JSONKey ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , 2 ) ;
SELECT JSONKey ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , - 1 ) ;
SELECT JSONKey ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , - 2 ) ;
SELECT ' --JSONType-- ' ;
SELECT JSONType ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
2019-05-10 09:15:10 +00:00
SELECT JSONType ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
2023-03-01 02:04:06 +00:00
SELECT JSONType ( ' {"a": true} ' , ' a ' ) ;
2019-05-13 23:44:55 +00:00
2019-05-16 13:35:31 +00:00
SELECT ' --JSONExtract<numeric>-- ' ;
2019-05-10 09:15:10 +00:00
SELECT JSONExtractInt ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 1 ) ;
SELECT JSONExtractFloat ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 2 ) ;
SELECT JSONExtractUInt ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , - 1 ) ;
2019-05-13 23:44:55 +00:00
SELECT JSONExtractBool ( ' {"passed": true} ' , ' passed ' ) ;
2019-05-16 17:43:01 +00:00
SELECT JSONExtractBool ( ' "HX-= ' ) ;
2023-01-19 17:03:24 +00:00
SELECT JSONExtractBool ( ' -1 ' ) ;
SELECT JSONExtract ( ' {"a": "-123456789012.345"} ' , ' a ' , ' Int64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a": "123456789012.345"} ' , ' a ' , ' UInt64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a": "-2000.22"} ' , ' a ' , ' UInt64 ' ) as a , toTypeName ( a ) ;
SELECT JSONExtract ( ' {"a": "-2000.22"} ' , ' a ' , ' Int8 ' ) as a , toTypeName ( a ) ;
2019-05-13 23:44:55 +00:00
2019-05-16 13:35:31 +00:00
SELECT ' --JSONExtractString-- ' ;
SELECT JSONExtractString ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONExtractString ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , 1 ) ;
select JSONExtractString ( ' {"abc":"\\n\\u0000"} ' , ' abc ' ) ;
select JSONExtractString ( ' {"abc":"\\u263a"} ' , ' abc ' ) ;
select JSONExtractString ( ' {"abc":"\\u263"} ' , ' abc ' ) ;
select JSONExtractString ( ' {"abc":"hello} ' , ' abc ' ) ;
2019-05-13 23:44:55 +00:00
SELECT ' --JSONExtract (generic)-- ' ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Tuple(String, Array(Float64)) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Tuple(a String, b Array(Float64)) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Tuple(b Array(Float64), a String) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Tuple(a FixedString(6), c UInt8) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' , ' String ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(Float32) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Tuple(Int8, Float32, UInt16) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(Int8) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(Nullable(Int8)) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(UInt8) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , ' Array(Nullable(UInt8)) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 1 , ' Int8 ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 2 , ' Int32 ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 4 , ' Nullable(Int64) ' ) ;
2019-05-16 13:35:31 +00:00
SELECT JSONExtract ( ' {"passed": true} ' , ' passed ' , ' UInt8 ' ) ;
2019-05-13 23:44:55 +00:00
SELECT JSONExtract ( ' {"day": "Thursday"} ' , ' day ' , ' Enum8(\ ' Sunday \ ' = 0, \ ' Monday \ ' = 1, \ ' Tuesday \ ' = 2, \ ' Wednesday \ ' = 3, \ ' Thursday \ ' = 4, \ ' Friday \ ' = 5, \ ' Saturday \ ' = 6) ' ) ;
SELECT JSONExtract ( ' {"day": 5} ' , ' day ' , ' Enum8(\ ' Sunday \ ' = 0, \ ' Monday \ ' = 1, \ ' Tuesday \ ' = 2, \ ' Wednesday \ ' = 3, \ ' Thursday \ ' = 4, \ ' Friday \ ' = 5, \ ' Saturday \ ' = 6) ' ) ;
2019-08-28 22:51:02 +00:00
SELECT JSONExtract ( ' {"a":3,"b":5,"c":7} ' , ' Tuple(a Int, b Int) ' ) ;
SELECT JSONExtract ( ' {"a":3,"b":5,"c":7} ' , ' Tuple(c Int, a Int) ' ) ;
SELECT JSONExtract ( ' {"a":3,"b":5,"c":7} ' , ' Tuple(b Int, d Int) ' ) ;
SELECT JSONExtract ( ' {"a":3,"b":5,"c":7} ' , ' Tuple(Int, Int) ' ) ;
SELECT JSONExtract ( ' {"a":3} ' , ' Tuple(Int, Int) ' ) ;
SELECT JSONExtract ( ' [3,5,7] ' , ' Tuple(Int, Int) ' ) ;
SELECT JSONExtract ( ' [3] ' , ' Tuple(Int, Int) ' ) ;
2019-05-13 23:44:55 +00:00
2023-04-12 02:18:07 +00:00
SELECT JSONExtract ( ' {"a": "hello", "b": "world"} ' , ' Map(String, String) ' ) ;
SELECT JSONExtract ( ' {"a": "hello", "b": "world"} ' , ' Map(LowCardinality(String), String) ' ) ;
SELECT JSONExtract ( ' {"a": ["hello", 100.0], "b": ["world", 200]} ' , ' Map(String, Tuple(String, Float64)) ' ) ;
SELECT JSONExtract ( ' {"a": [100.0, 200], "b": [-100, 200.0, 300]} ' , ' Map(String, Array(Float64)) ' ) ;
SELECT JSONExtract ( ' {"a": {"c": "hello"}, "b": {"d": "world"}} ' , ' Map(String, Map(String, String)) ' ) ;
SELECT JSONExtract ( ' {"a": {"c": "hello"}, "b": {"d": "world"}} ' , ' a ' , ' Map(String, String) ' ) ;
2019-05-16 13:35:31 +00:00
SELECT ' --JSONExtractKeysAndValues-- ' ;
SELECT JSONExtractKeysAndValues ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' String ' ) ;
SELECT JSONExtractKeysAndValues ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' Array(Float64) ' ) ;
SELECT JSONExtractKeysAndValues ( ' {"a": "hello", "b": "world"} ' , ' String ' ) ;
SELECT JSONExtractKeysAndValues ( ' {"x": {"a": 5, "b": 7, "c": 11}} ' , ' x ' , ' Int8 ' ) ;
2019-05-13 23:44:55 +00:00
SELECT ' --JSONExtractRaw-- ' ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' , 1 ) ;
2019-05-13 13:46:19 +00:00
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' , ' d ' ) ;
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' , ' d ' , 2 ) ;
2019-05-13 23:44:55 +00:00
SELECT JSONExtractRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' , ' d ' , 3 ) ;
SELECT JSONExtractRaw ( ' {"passed": true} ' ) ;
SELECT JSONExtractRaw ( ' {} ' ) ;
2019-05-27 18:46:55 +00:00
SELECT JSONExtractRaw ( ' {"abc":"\\n\\u0000"} ' , ' abc ' ) ;
SELECT JSONExtractRaw ( ' {"abc":"\\u263a"} ' , ' abc ' ) ;
2019-12-08 14:24:37 +00:00
SELECT ' --JSONExtractArrayRaw-- ' ;
SELECT JSONExtractArrayRaw ( ' ' ) ;
SELECT JSONExtractArrayRaw ( ' {"a": "hello", "b": "not_array"} ' ) ;
SELECT JSONExtractArrayRaw ( ' [] ' ) ;
SELECT JSONExtractArrayRaw ( ' [[],[]] ' ) ;
SELECT JSONExtractArrayRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONExtractArrayRaw ( ' [1,2,3,4,5,"hello"] ' ) ;
SELECT JSONExtractArrayRaw ( arrayJoin ( JSONExtractArrayRaw ( ' [[1,2,3],[4,5,6]] ' ) ) ) ;
2020-04-20 10:08:39 +00:00
SELECT ' --JSONExtractKeysAndValuesRaw-- ' ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' ) ;
SELECT JSONExtractKeysAndValuesRaw ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' ) ;
2021-10-12 15:00:25 +00:00
SELECT ' --JSONExtractKeys-- ' ;
SELECT JSONExtractKeys ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' ) ;
2021-10-12 21:08:00 +00:00
SELECT JSONExtractKeys ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' b ' ) ;
SELECT JSONExtractKeys ( ' {"a": "hello", "b": [-100, 200.0, 300]} ' , ' a ' ) ;
SELECT JSONExtractKeys ( ' {"a": "hello", "b": [-100, 200.0, 300], "c":{"d":[121,144]}} ' , ' c ' ) ;
2021-10-12 15:00:25 +00:00
2020-04-20 10:08:39 +00:00
SELECT ' --const/non-const mixed-- ' ;
SELECT JSONExtractString ( ' ["a", "b", "c", "d", "e"] ' , idx ) FROM ( SELECT arrayJoin ( [ 1 , 2 , 3 , 4 , 5 ] ) AS idx ) ;
SELECT JSONExtractString ( json , ' s ' ) FROM ( SELECT arrayJoin ( [ ' {"s":"u"} ' , ' {"s":"v"} ' ] ) AS json ) ;
2020-07-10 14:04:20 +00:00
SELECT ' --show error: type should be const string ' ;
2023-04-12 02:18:07 +00:00
SELECT JSONExtractKeysAndValues ( [ ] , JSONLength ( ' ^?V{LSwp ' ) ) ; -- { serverError ILLEGAL_COLUMN }
WITH ' {"i": 1, "f": 1.2} ' AS json SELECT JSONExtract ( json , ' i ' , JSONType ( json , ' i ' ) ) ; -- { serverError ILLEGAL_COLUMN }
2022-10-31 14:02:08 +00:00
SELECT ' --show error: index type should be integer ' ;
2023-04-12 02:18:07 +00:00
SELECT JSONExtract ( ' [] ' , JSONExtract ( ' 0 ' , ' UInt256 ' ) , ' UInt256 ' ) ; -- { serverError ILLEGAL_TYPE_OF_ARGUMENT }
SELECT ' --show error: key of map type should be String ' ;
SELECT JSONExtract ( ' {"a": [100.0, 200], "b": [-100, 200.0, 300]} ' , ' Map(Int64, Array(Float64)) ' ) ; -- { serverError ILLEGAL_TYPE_OF_ARGUMENT }