diff options
Diffstat (limited to 'mysql-test/suite/json/r/json_table_mysql.result')
-rw-r--r-- | mysql-test/suite/json/r/json_table_mysql.result | 1662 |
1 files changed, 1662 insertions, 0 deletions
diff --git a/mysql-test/suite/json/r/json_table_mysql.result b/mysql-test/suite/json/r/json_table_mysql.result new file mode 100644 index 00000000000..da7aa70be2b --- /dev/null +++ b/mysql-test/suite/json/r/json_table_mysql.result @@ -0,0 +1,1662 @@ +# +# WL#8867: Add JSON_TABLE table function +# +select * from +json_table( +'[{"a":"3"},{"a":2},{"b":1},{"a":0}]', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '\$.a', +jexst int exists path '\$.b') +) as tt; +id jpath jexst +1 3 0 +2 2 0 +3 NULL 1 +4 0 0 +select * from +json_table( +'[{"x":"3"},{"a":2},{"b":1},{"a":0}]', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '$.a' default '[99]' on error, +jexst int exists path '$.b') +) as tt; +id jpath jexst +1 NULL 0 +2 2 0 +3 NULL 1 +4 0 0 +select * from +json_table( +'[{"x":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '$.a' + default '33' on empty +default '66' on error, +jsn_path json path '\$.a' default '{"x":33}' on empty, +jexst int exists path '\$.b') +) as tt; +id jpath jsn_path jexst +1 33 {"x":33} 0 +2 2 2 0 +3 33 {"x":33} 1 +4 0 0 0 +5 66 [1,2] 0 +select * from +json_table( +'[{"a":"3"},{"a":2},{"b":1},{"a":0.33},{"a":"asd"}]', +'$[*]' columns (id for ordinality, +jpath_i int path '$.a' + default '33' on empty +default '66' on error, +jpath_r real path '$.a' + default '33.3' on empty +default '77.7' on error, +jsn_path json path '$.a' default '{"x":33}' on empty, +jexst int exists path '$.b') +) as tt; +id jpath_i jpath_r jsn_path jexst +1 3 3 "3" 0 +2 2 2 2 0 +3 33 33.3 {"x":33} 1 +4 0 0.33 0.33 0 +5 0 0 "asd" 0 +Warnings: +Warning 1366 Incorrect integer value: 'asd' for column ``.`(temporary)`.`jpath_i` at row 5 +Warning 1366 Incorrect double value: 'asd' for column ``.`(temporary)`.`jpath_r` at row 5 +select * from +json_table( +'[{"x":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '$.a' + default '33' on empty +default '66' on error, +jsn_path json path '$.a' default '{"x":33}' on empty, +jexst int exists path '$.b') +) as tt; +id jpath jsn_path jexst +1 33 {"x":33} 0 +2 2 2 0 +3 33 {"x":33} 1 +4 0 0 0 +5 66 [1,2] 0 +select * from +json_table( +'[{"a":"3"},{"a":2},{"b":1},{"a":0}]', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '$.a', +json_path json path '$.a', +jexst int exists path '$.b') +) as tt; +id jpath json_path jexst +1 3 "3" 0 +2 2 2 0 +3 NULL NULL 1 +4 0 0 0 +select * from +json_table( +'[{"a":"3"},{"a":2},{"b":1},{"a":0}]', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '$.a', +json_path json path '$.a', +jexst int exists path '$.b') +) as tt +where id = 3; +id jpath json_path jexst +3 NULL NULL 1 +select * from +json_table( +'[{"a":"3"},{"a":2},{"b":1},{"a":0}]', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '$.a' error on empty, +jexst int exists path '$.b') +) as tt; +ERROR HY000: Field 'jpath' can't be set for JSON_TABLE 'tt'. +select * from +json_table( +'[{"a":"3"},{"a":2},{"a":1},{"a":[0,1]}]', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '$.a' error on error, +jexst int exists path '$.b') +) as tt; +ERROR HY000: Can't store an array or an object in the scalar column 'jpath' of JSON_TABLE 'tt'. +select * from +json_table( +'!#@$!@#$', +'$[*]' columns (id for ordinality, +jpath varchar(100) path '$.a', +jexst int exists path '$.b') +) as tt; +ERROR HY000: Syntax error in JSON text in argument 1 to function 'JSON_TABLE' at position 1 +select * from +json_table( +'[{"a":"3"},{"a":2},{"b":1},{"a":0}]', +'$[*]' columns (id for ordinality, +id for ordinality) +) as tt; +ERROR 42S21: Duplicate column name 'id' +select * from +json_table( +'[{"a":"3"},{"a":2},{"b":1},{"a":0}]', +'$[*]' columns (id for ordinality, +_id for ordinality) +) as tt; +id _id +1 1 +2 2 +3 3 +4 4 +select * from +json_table( +'[ + {"a":"3", "n": { "l": 1}}, + {"a":2, "n": { "l": 1}}, + {"b":1, "n": { "l": 1}}, + {"a":0, "n": { "l": 1}} + ]', +'$[*]' columns ( +id for ordinality, +jpath varchar(100) path '$.a', +jexst int exists path '$.b', +nested path '$.n' columns ( +id_n for ordinality, +jpath_n varchar(50) path '$.l') +) +) as tt; +id jpath jexst id_n jpath_n +1 3 0 1 1 +2 2 0 1 1 +3 NULL 1 1 1 +4 0 0 1 1 +explain format=json +select * from +json_table( +'[ + {"a":"3", "n": { "l": 1}}, + {"a":2, "n": { "l": 1}}, + {"b":1, "n": { "l": 1}}, + {"a":0, "n": { "l": 1}} + ]', +'$[*]' columns ( +id for ordinality, +jpath varchar(100) path '$.a', +jexst int exists path '$.b', +nested path '$.n' columns ( +id_n for ordinality, +jpath_n varchar(50) path '$.l') +) +) as tt; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "table": { + "table_name": "tt", + "access_type": "ALL", + "rows": 40, + "filtered": 100, + "table_function": "json_table" + } + } +} +select * from +json_table( +'[ + {"a":2, "n": [{ "l": 1}, {"l": 11}]}, + {"a":1, "n": [{ "l": 2}, {"l": 22}]} + ]', +'$[*]' columns ( +id for ordinality, +jpath varchar(50) path '$.a', +nested path '$.n[*]' columns ( +id_n for ordinality, +jpath_n varchar(50) path '$.l'), +nested path '$.n[*]' columns ( +id_m for ordinality, +jpath_m varchar(50) path '$.l') +) +) as tt; +id jpath id_n jpath_n id_m jpath_m +1 2 1 1 NULL NULL +1 2 2 11 NULL NULL +1 2 NULL NULL 1 1 +1 2 NULL NULL 2 11 +2 1 1 2 NULL NULL +2 1 2 22 NULL NULL +2 1 NULL NULL 1 2 +2 1 NULL NULL 2 22 +select * from json_table( +'[ + {"a":"3", "n": ["b","a","c"]}, + {"a":2, "n": [1,2]}, + {"b":1, "n": ["zzz"]}, + {"a":0, "n": [0.1, 0.02]} + ]', +'$[*]' columns ( +id for ordinality, +jpath varchar(100) path '$.a', +jexst int exists path '$.b', +nested path '$.n[*]' columns ( +id_n for ordinality, +jpath_n varchar(50) path '$') +) +) as tt; +id jpath jexst id_n jpath_n +1 3 0 1 b +1 3 0 2 a +1 3 0 3 c +2 2 0 1 1 +2 2 0 2 2 +3 NULL 1 1 zzz +4 0 0 1 0.1 +4 0 0 2 0.02 +select * from json_table( +'[ + {"a":"3", "n": ["b","a","c"]}, + {"a":2, "n": [1,2]}, + {"b":1, "n": ["zzz"]}, + {"a":0, "n": [0.1, 0.02]} + ]', +'$[*]' columns ( +id for ordinality, +jpath varchar(100) path '$.a', +jexst int exists path '$.b', +nested path '$.n[*]' columns ( +id_n1 for ordinality, +jpath_n1 varchar(50) path '$') , +nested path '$.n[*]' columns ( +id_n2 for ordinality, +jpath_n2 varchar(50) path '$') +) +) as tt; +id jpath jexst id_n1 jpath_n1 id_n2 jpath_n2 +1 3 0 1 b NULL NULL +1 3 0 2 a NULL NULL +1 3 0 3 c NULL NULL +1 3 0 NULL NULL 1 b +1 3 0 NULL NULL 2 a +1 3 0 NULL NULL 3 c +2 2 0 1 1 NULL NULL +2 2 0 2 2 NULL NULL +2 2 0 NULL NULL 1 1 +2 2 0 NULL NULL 2 2 +3 NULL 1 1 zzz NULL NULL +3 NULL 1 NULL NULL 1 zzz +4 0 0 1 0.1 NULL NULL +4 0 0 2 0.02 NULL NULL +4 0 0 NULL NULL 1 0.1 +4 0 0 NULL NULL 2 0.02 +select * from json_table( +'[ + {"a":"3", "n": [ {"ll":["b1","b2","b3"]}, {"ll": ["a1","a2"]}, + {"ll":["c"]} ]}, + {"a":2, "n": [{"ll":[1,11,111]},{"ll":[2]}]}, + {"b":1, "n": [{"ll":["zzz"]}]}, + {"a":0, "n": [{"ll":[0.1,0.01]}, {"ll":[0.02,0.002,0.0002]}]} + ]', +'$[*]' columns ( +id1 for ordinality, +jpath varchar(100) path '$.a', +jexst int exists path '$.b', +nested path '$.n[*]' columns ( +id2 for ordinality, +nested path '$.ll[*]' columns ( +id3 for ordinality, +jpath_3 varchar(50) path '$') +), +nested path '$.n[*]' columns ( +id4 for ordinality, +jpath_4 json path '$') +) +) as tt; +id1 jpath jexst id2 id3 jpath_3 id4 jpath_4 +1 3 0 1 1 b1 NULL NULL +1 3 0 1 2 b2 NULL NULL +1 3 0 1 3 b3 NULL NULL +1 3 0 2 1 a1 NULL NULL +1 3 0 2 2 a2 NULL NULL +1 3 0 3 1 c NULL NULL +1 3 0 NULL NULL NULL 1 {"ll":["b1","b2","b3"]} +1 3 0 NULL NULL NULL 2 {"ll": ["a1","a2"]} +1 3 0 NULL NULL NULL 3 {"ll":["c"]} +2 2 0 1 1 1 NULL NULL +2 2 0 1 2 11 NULL NULL +2 2 0 1 3 111 NULL NULL +2 2 0 2 1 2 NULL NULL +2 2 0 NULL NULL NULL 1 {"ll":[1,11,111]} +2 2 0 NULL NULL NULL 2 {"ll":[2]} +3 NULL 1 1 1 zzz NULL NULL +3 NULL 1 NULL NULL NULL 1 {"ll":["zzz"]} +4 0 0 1 1 0.1 NULL NULL +4 0 0 1 2 0.01 NULL NULL +4 0 0 2 1 0.02 NULL NULL +4 0 0 2 2 0.002 NULL NULL +4 0 0 2 3 0.0002 NULL NULL +4 0 0 NULL NULL NULL 1 {"ll":[0.1,0.01]} +4 0 0 NULL NULL NULL 2 {"ll":[0.02,0.002,0.0002]} +ord should be 1,1,1,2, which tells that first two values of 'l' are +from the same object, and next two are from different objects +SELECT * +FROM JSON_TABLE( +'[{"a": "a_val", + "b": [ + {"c": "c_val", + "l": [1,2]} + ] + }, {"a": "a_val", + "b": [ + {"c": "c_val", + "l": [11]}, + {"c": "c_val", + "l": [22]} + ] + }]', +'$[*]' COLUMNS ( +apath VARCHAR(10) PATH '$.a', +NESTED PATH '$.b[*]' COLUMNS ( +bpath VARCHAR(10) PATH '$.c', +ord FOR ORDINALITY, +NESTED PATH '$.l[*]' COLUMNS ( +lpath varchar(10) PATH '$' + ) +) +)) as jt; +apath bpath ord lpath +a_val c_val 1 1 +a_val c_val 1 2 +a_val c_val 1 11 +a_val c_val 2 22 +CREATE TABLE jt( i JSON ); +SELECT * FROM jt, JSON_TABLE(jt.i, '$' COLUMNS (a INT PATH '$')) AS tt +WHERE a=1; +i a +EXPLAIN SELECT * FROM jt, JSON_TABLE(jt.i, '$' COLUMNS (a INT PATH '$')) AS tt +WHERE a=1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT * FROM ( +SELECT * FROM jt, JSON_TABLE(jt.i, '$' COLUMNS (a INT PATH '$')) AS tt +WHERE a=1) AS ttt; +i a +EXPLAIN SELECT * FROM ( +SELECT * FROM jt, JSON_TABLE(jt.i, '$' COLUMNS (a INT PATH '$')) AS tt +WHERE a=1) AS ttt; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +DROP TABLE jt; +CREATE VIEW v AS +SELECT * FROM JSON_TABLE('[1,2,3]', +'$[*]' COLUMNS (num INT PATH '$.a' + DEFAULT '123' ON EMPTY +DEFAULT '456' ON ERROR)) AS jt; +SELECT * FROM v; +num +123 +123 +123 +SHOW CREATE VIEW v; +View Create View character_set_client collation_connection +v CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select `jt`.`num` AS `num` from JSON_TABLE('[1,2,3]', '$[*]' COLUMNS (`num` int(11) PATH '$.a' DEFAULT '123' ON EMPTY DEFAULT '456' ON ERROR)) `jt` latin1 latin1_swedish_ci +DROP VIEW v; +SELECT * FROM JSON_TABLE('"asdf"', +'$' COLUMNS (a INT PATH '$' ERROR ON ERROR)) AS jt; +a +0 +Warnings: +Warning 1366 Incorrect integer value: 'asdf' for column ``.`(temporary)`.`a` at row 1 +SELECT * FROM +JSON_TABLE('[{"a":1},{"a":2}]', +'$' COLUMNS (a INT PATH '$[*].a' ERROR ON ERROR)) AS jt; +ERROR HY000: Can't store multiple matches of the path in the column 'a' of JSON_TABLE 'jt'. +SELECT * FROM +JSON_TABLE('[{"a":1},{"a":2}]', +'$' COLUMNS (a JSON PATH '$[*].a' ERROR ON ERROR)) AS jt; +ERROR HY000: Can't store multiple matches of the path in the column 'a' of JSON_TABLE 'jt'. +SELECT * FROM +JSON_TABLE('123.456', '$' COLUMNS (a DECIMAL(2,1) PATH '$' ERROR ON ERROR)) AS jt; +a +9.9 +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +SELECT * FROM +JSON_TABLE('123.456', '$' COLUMNS (a DECIMAL(2,1) PATH '$')) AS jt; +a +9.9 +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +SELECT * FROM +JSON_TABLE('{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{"a":1,"b":{}}}}}}}}}}}}}}}}}}}', +'$' COLUMNS (i0 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i1 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i2 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i3 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i4 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i5 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i6 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i7 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i8 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i9 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i10 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i11 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i12 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i13 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i14 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i15 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i16 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i17 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i18 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i19 INT PATH '$.a', +NESTED PATH '$.b' COLUMNS (i20 INT PATH '$.a' + )))))))))))))))))))))) jt; +i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16 i17 i18 i19 i20 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 NULL NULL NULL +CREATE TABLE t1(id int, jd JSON); +INSERT INTO t1 values (1, '[1,3,5]'),(2,'[2,4,6]'); +SELECT id, jt.* FROM t1, +JSON_TABLE(jd, '$[*]' COLUMNS (jid FOR ORDINALITY, +val INT PATH '$')) AS jt; +id jid val +1 1 1 +1 2 3 +1 3 5 +2 1 2 +2 2 4 +2 3 6 +SELECT /*+ JOIN_ORDER(jt, t1) */ id, jt.* +FROM t1, +JSON_TABLE(jd, '$[*]' COLUMNS (jid FOR ORDINALITY, +val INT PATH '$')) AS jt; +id jid val +1 1 1 +1 2 3 +1 3 5 +2 1 2 +2 2 4 +2 3 6 +EXPLAIN SELECT /*+ JOIN_ORDER(jt, t1) */ id, jt.* +FROM t1, +JSON_TABLE(jd, '$[*]' COLUMNS (jid FOR ORDINALITY, +val INT PATH '$')) AS jt; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 2 +1 SIMPLE jt ALL NULL NULL NULL NULL 40 Table function: json_table +SELECT /*+ JOIN_ORDER(t2,jt) */ t1.id, t2.id, jt.* +FROM t1, +JSON_TABLE(t1.jd, '$[*]' COLUMNS (jid FOR ORDINALITY, +val INT PATH '$')) AS jt, +t1 AS t2; +id id jid val +1 1 1 1 +1 1 2 3 +1 1 3 5 +1 2 1 1 +1 2 2 3 +1 2 3 5 +2 1 1 2 +2 1 2 4 +2 1 3 6 +2 2 1 2 +2 2 2 4 +2 2 3 6 +EXPLAIN SELECT t1.id, t2.id, jt.* +FROM t1, +JSON_TABLE(t1.jd, '$[*]' COLUMNS (jid FOR ORDINALITY, +val INT PATH '$')) AS jt, +t1 AS t2; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 2 +1 SIMPLE t2 ALL NULL NULL NULL NULL 2 Using join buffer (flat, BNL join) +1 SIMPLE jt ALL NULL NULL NULL NULL 40 Table function: json_table +EXPLAIN SELECT /*+ JOIN_ORDER(t2,jt) */ t1.id, t2.id, jt.* +FROM t1, +JSON_TABLE(t1.jd, '$[*]' COLUMNS (jid FOR ORDINALITY, +val INT PATH '$')) AS jt, +t1 AS t2; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 2 +1 SIMPLE t2 ALL NULL NULL NULL NULL 2 Using join buffer (flat, BNL join) +1 SIMPLE jt ALL NULL NULL NULL NULL 40 Table function: json_table +SELECT * FROM t1 WHERE id IN +(SELECT * FROM JSON_TABLE('[1,2]', '$[*]' COLUMNS +(id INT PATH '$')) AS jt); +id jd +1 [1,3,5] +2 [2,4,6] +EXPLAIN SELECT * FROM t1 WHERE id IN +(SELECT * FROM JSON_TABLE('[1,2]', '$[*]' COLUMNS +(id INT PATH '$')) AS jt); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 2 +1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 +2 MATERIALIZED jt ALL NULL NULL NULL NULL 40 Table function: json_table +DROP TABLE t1; +SELECT * FROM JSON_TABLE('"asdf"', '$' COLUMNS( +tm TIME PATH '$', +dt DATE PATH '$', +i INT PATH '$', +f FLOAT PATH '$', +d DECIMAL PATH '$')) AS jt; +tm dt i f d +00:00:00 0000-00-00 0 0 0 +Warnings: +Warning 1265 Data truncated for column 'tm' at row 1 +Warning 1265 Data truncated for column 'dt' at row 1 +Warning 1366 Incorrect integer value: 'asdf' for column ``.`(temporary)`.`i` at row 1 +Warning 1366 Incorrect double value: 'asdf' for column ``.`(temporary)`.`f` at row 1 +Warning 1366 Incorrect decimal value: 'asdf' for column ``.`(temporary)`.`d` at row 1 +SELECT * FROM +JSON_TABLE('{}', '$' COLUMNS (x INT PATH '$.x' DEFAULT NULL ON EMPTY)) jt; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NULL ON EMPTY)) jt' at line 2 +SELECT * FROM +JSON_TABLE('{}', '$' COLUMNS (x INT PATH '$.x' DEFAULT NULL ON ERROR)) jt; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NULL ON ERROR)) jt' at line 2 +SELECT * FROM +JSON_TABLE('{}', '$' COLUMNS (x INT PATH '$.x' DEFAULT 0 ON EMPTY)) jt; +x +0 +SELECT * FROM +JSON_TABLE('{}', '$' COLUMNS (x INT PATH '$.x' DEFAULT 0 ON ERROR)) jt; +x +NULL +SELECT * FROM +JSON_TABLE('{}', '$' COLUMNS (x DATE +PATH '$.x' + DEFAULT DATE'2020-01-01' ON EMPTY)) jt; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DATE'2020-01-01' ON EMPTY)) jt' at line 4 +SELECT * FROM +JSON_TABLE('{}', '$' COLUMNS (x DATE +PATH '$.x' + DEFAULT DATE'2020-01-01' ON ERROR)) jt; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DATE'2020-01-01' ON ERROR)) jt' at line 4 +# +# Bug#25413069: SIG11 IN CHECK_COLUMN_GRANT_IN_TABLE_REF +# +SELECT a FROM JSON_TABLE(abc, '$[*]' COLUMNS ( a int path '$.a')) AS jt; +ERROR 42S22: Unknown column 'abc' in 'JSON_TABLE argument' +# +# Bug#25420680: ASSERTION `THD->IS_ERROR()' FAILED IN SQL/SQL_SELECT.CC +# +SELECT * FROM JSON_TABLE('{"a":"2017-11-1"}', +'$' COLUMNS (jpath DATE PATH '$.a')) AS jt; +jpath +2017-11-01 +# +# Bug#25413826: ASSERTION `TABLE_LIST->ALIAS' FAILED +# +SELECT * FROM JSON_TABLE('[{"a": 1, "b": 2}]', +'$[*]' COLUMNS ( a int path '$.b')); +ERROR HY000: Every table function must have an alias. +# +# Bug#25421464: ASSERTION `!STRCMP(TABLE_REF->TABLE_NAME, ... +# +CREATE VIEW v1 AS +SELECT * FROM JSON_TABLE('[{"a": 1, "b": 2}]', +'$[*]' COLUMNS ( a INT PATH '$.b')) AS jt; +SELECT * FROM v1; +a +2 +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `jt`.`a` AS `a` from JSON_TABLE('[{"a": 1, "b": 2}]', '$[*]' COLUMNS (`a` int(11) PATH '$.b')) `jt` latin1 latin1_swedish_ci +DROP VIEW v1; +# +# Bug#25427457: ASSERTION `!((*REG_FIELD)->FLAGS & 16)' +# +SELECT * FROM JSON_TABLE('{"a":"1"}', +'$' COLUMNS (jpath JSON PATH '$.a', +o FOR ORDINALITY)) AS jt +WHERE o = 1; +jpath o +"1" 1 +# +# Bug#25427982: ASSERTION `DERIVED' FAILED IN SQL/TABLE.H +# +SELECT je,o FROM JSON_TABLE('{"a":"1"}', +'$' COLUMNS (o FOR ORDINALITY, +je BIGINT EXISTS PATH '$.a')) AS jt +GROUP BY je; +je o +1 1 +SELECT je,COUNT(o) FROM JSON_TABLE('{"a":"1"}', +'$' COLUMNS (o FOR ORDINALITY, +je BIGINT EXISTS PATH '$.a')) AS jt +GROUP BY je; +je COUNT(o) +1 1 +# +# Bug#25413194: ASSERTION `!(WANT_PRIVILEGE & ~(GRANT->WANT_PRIVILEGE +# +CREATE TABLE t1 (j JSON); +SELECT * FROM t1,JSON_TABLE(t1.j, '$[*]' COLUMNS ( a int path '$.b')) AS jt; +j a +DROP TABLE t1; +# +# Bug#25460537:SIG 11 IN NEXT_FAST AT SQL/SQL_LIST.H +# +PREPARE STMT FROM +"SELECT * FROM JSON_TABLE( + \'[{\"a\":\"3\"},{\"a\":2},{\"b\":1},{\"a\":0}]\', + \'$[*]\' COLUMNS (id + FOR ORDINALITY, + jpath VARCHAR(100) PATH \'$.a\', + jexst INT EXISTS PATH \'$.b\') + ) as tt"; +EXECUTE STMT; +id jpath jexst +1 3 0 +2 2 0 +3 NULL 1 +4 0 0 +EXECUTE STMT; +id jpath jexst +1 3 0 +2 2 0 +3 NULL 1 +4 0 0 +DEALLOCATE PREPARE stmt; +# +# Bug#25522353: SIG 11 IN JOIN::MAKE_JOIN_PLAN | SQL/SQL_OPTIMIZER.CC +# +CREATE TABLE t1 (id INT, jc JSON); +SELECT * FROM t1 RIGHT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1.jc=jt.id; +ERROR 42S22: Unknown column 't1.jc' in 'JSON_TABLE argument' +SELECT * FROM JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt LEFT JOIN t1 ON t1.jc=jt.id; +ERROR 42S22: Unknown column 't1.jc' in 'JSON_TABLE argument' +SELECT * FROM JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt RIGHT JOIN t1 ON t1.jc=jt.id; +id id jc +SELECT * FROM t1 LEFT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1.jc=jt.id; +id jc id +EXPLAIN SELECT * FROM t1 LEFT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1.jc=jt.id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT * FROM t1 t1o RIGHT JOIN t1 ON t1o.id=t1.id +LEFT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1.jc=jt.id; +id jc id jc id +EXPLAIN SELECT * FROM t1 t1o RIGHT JOIN t1 ON t1o.id=t1.id +LEFT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1.jc=jt.id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT * FROM t1 AS t1o RIGHT JOIN +(t1 AS t1i JOIN JSON_TABLE(t1o.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1i.jc=jt.id) +ON t1o.id=t1i.id; +ERROR 42S22: Unknown column 't1o.jc' in 'JSON_TABLE argument' +SELECT * FROM t1 AS t1o RIGHT JOIN +(t1 AS t1i RIGHT JOIN JSON_TABLE(t1o.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1i.jc=jt.id) +ON t1o.id=t1i.id; +ERROR 42S22: Unknown column 't1o.jc' in 'JSON_TABLE argument' +WITH qn AS +(SELECT jt.* FROM t1 RIGHT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1.jc=jt.id) +SELECT * from qn; +ERROR 42S22: Unknown column 't1.jc' in 'JSON_TABLE argument' +WITH qn AS +(SELECT 1 UNION +SELECT jt.id FROM t1 RIGHT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1.jc=jt.id) +SELECT * from qn; +ERROR 42S22: Unknown column 't1.jc' in 'JSON_TABLE argument' +SELECT * FROM t1 AS t1o RIGHT JOIN +(t1 AS t1i JOIN JSON_TABLE(t1o.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1i.jc=jt.id) +ON t1o.id=t1i.id; +ERROR 42S22: Unknown column 't1o.jc' in 'JSON_TABLE argument' +SELECT * FROM t1 AS t1o RIGHT JOIN +(t1 AS t1i RIGHT JOIN JSON_TABLE(t1o.jc, '$' COLUMNS +(id FOR ORDINALITY)) as jt ON t1i.jc=jt.id) +ON t1o.id=t1i.id; +ERROR 42S22: Unknown column 't1o.jc' in 'JSON_TABLE argument' +INSERT INTO t1 VALUES(1,"1"),(2,"4"),(3,"3"); +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status Engine-independent statistics collected +test.t1 analyze Warning Engine-independent statistics are not collected for column 'jc' +test.t1 analyze status OK +SELECT * FROM t1 LEFT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id INT PATH '$')) as jt ON t1.id=jt.id; +id jc id +1 1 1 +2 4 NULL +3 3 3 +EXPLAIN SELECT * FROM t1 LEFT JOIN JSON_TABLE(t1.jc, '$' COLUMNS +(id INT PATH '$')) as jt ON t1.id=jt.id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 3 +1 SIMPLE jt ALL NULL NULL NULL NULL 40 Table function: json_table; Using where +SELECT * FROM t1 +LEFT JOIN +JSON_TABLE(t1.jc, '$' COLUMNS (id FOR ORDINALITY)) as jt ON t1.jc=jt.id +RIGHT JOIN +JSON_TABLE(jt.id, '$' COLUMNS (id FOR ORDINALITY)) as jt1 ON jt.id=jt1.id; +ERROR 42S22: Unknown column 'jt.id' in 'JSON_TABLE argument' +DROP TABLE t1; +# +# Bug#25525409: ASSERTION `TABLE_LIST->TABLE' FAILED IN SQL/SQL_BASE.CC +# +SELECT * FROM JSON_TABLE( ( SELECT a ) , '$.*' COLUMNS (col1 FOR ORDINALITY) ) +AS alias1; +ERROR 42S22: Unknown column 'a' in 'field list' +SELECT * FROM JSON_TABLE( ( SELECT 1 ) , '$.*' COLUMNS (col1 FOR ORDINALITY) ) +AS alias1; +col1 +SELECT * FROM JSON_TABLE( ( SUM(1) ) , '$.*' COLUMNS (col1 FOR ORDINALITY) ) +AS alias1; +ERROR HY000: Invalid use of group function +# +# Bug# #25472875: ERROR SHOULD BE THROWN FOR INCORRECT VALUES +# +SELECT * +FROM JSON_TABLE('{"a":"1993-01-01"}', +'$' COLUMNS (jp DATE PATH '$.b' DEFAULT '1000' ON EMPTY)) +AS jt; +jp +0000-00-00 +Warnings: +Warning 1265 Data truncated for column 'jp' at row 1 +# +# Bug#25532429: INVALID JSON ERROR NOT THROWN WITH EMPTY TABLES JOIN +# +CREATE TABLE t1(j JSON); +SELECT * FROM t1, +JSON_TABLE( 'dqwfjqjf' , '$[*]' COLUMNS (col5 FOR ORDINALITY) ) AS alias7; +j col5 +DROP TABLE t1; +# +# Bug#25540370: SIG 11 IN SHOW_SQL_TYPE|SQL/SQL_SHOW.CC:7063 +# +SELECT * FROM +JSON_TABLE('[3.14159]', +'$[*]' COLUMNS (col18 CHAR(70) PATH '$') +) AS alias2; +col18 +3.14159 +# Too short field causes truncation, error and triggers ON ERROR clause +SELECT * FROM +JSON_TABLE('["3.14159"]', +'$[*]' COLUMNS (col18 CHAR(6) PATH '$') +) AS alias2; +col18 +3.1415 +Warnings: +Warning 1265 Data truncated for column 'col18' at row 1 +#Truncated space doesn't trigger ON ERROR +SELECT * FROM +JSON_TABLE('["3.14159 "]', +'$[*]' COLUMNS (col18 CHAR(7) PATH '$') +) AS alias2; +col18 +3.14159 +SELECT * FROM +JSON_TABLE('[3.14159]', +'$[*]' COLUMNS (col18 CHAR(255) PATH '$') +) AS alias2; +col18 +3.14159 +SELECT * FROM +JSON_TABLE('[3.14159]', +'$[*]' COLUMNS (col18 VARCHAR(70) PATH '$') +) AS alias2; +col18 +3.14159 +SELECT * FROM +JSON_TABLE('[3.14159]', +'$[*]' COLUMNS (col18 VARCHAR(255) PATH '$') +) AS alias2; +col18 +3.14159 +SELECT * FROM +JSON_TABLE('[3.14159]', +'$[*]' COLUMNS (col18 FLOAT PATH '$') +) AS alias2; +col18 +3.14159 +SELECT * FROM +JSON_TABLE('[3.14159]', +'$[*]' COLUMNS (col18 DOUBLE PATH '$') +) AS alias2; +col18 +3.14159 +SELECT * FROM +JSON_TABLE('[3.14159]', +'$[*]' COLUMNS (col18 DECIMAL(3,3) PATH '$') +) AS alias2; +col18 +0.999 +Warnings: +Warning 1264 Out of range value for column 'col18' at row 1 +SELECT * FROM +JSON_TABLE('[3.14159]', +'$[*]' COLUMNS (col18 DECIMAL(3,3) PATH '$' ERROR ON ERROR) +) AS alias2; +col18 +0.999 +Warnings: +Warning 1264 Out of range value for column 'col18' at row 1 +SELECT * FROM +JSON_TABLE('[0.9]', +'$[*]' COLUMNS (col18 DECIMAL(3,3) PATH '$') +) AS alias2; +col18 +0.900 +SELECT * FROM +JSON_TABLE('["asdf","ghjk"]', +'$[*]' COLUMNS (col18 DECIMAL(4,3) PATH '$' +DEFAULT "3.14159" ON ERROR) +) AS alias2; +col18 +0.000 +0.000 +Warnings: +Warning 1366 Incorrect decimal value: 'asdf' for column ``.`(temporary)`.`col18` at row 1 +Warning 1366 Incorrect decimal value: 'ghjk' for column ``.`(temporary)`.`col18` at row 2 +CREATE TABLE t1(jd JSON); +INSERT INTO t1 VALUES('["asdf"]'),('["ghjk"]'); +SELECT * FROM t1, +JSON_TABLE(jd, +'$[*]' COLUMNS (col18 DECIMAL(4,3) PATH '$' +DEFAULT "3.14159" ON ERROR) +) AS alias2; +jd col18 +["asdf"] 0.000 +["ghjk"] 0.000 +Warnings: +Warning 1366 Incorrect decimal value: 'asdf' for column ``.`(temporary)`.`col18` at row 1 +Warning 1366 Incorrect decimal value: 'ghjk' for column ``.`(temporary)`.`col18` at row 1 +DROP TABLE t1; +# +# Bug#25540027: SIG 11 IN FIND_FIELD_IN_TABLE | SQL/SQL_BASE.CC +# +CREATE TABLE t1(c1 JSON); +UPDATE t1, JSON_TABLE(t1.c1,'$[*]' COLUMNS (a INT PATH '$.a')) AS jt1 +SET jt1.a=1; +ERROR HY000: The target table jt1 of the UPDATE is not updatable +DELETE JSON_TABLE(t1.c1,'$[*]' COLUMNS (a INT PATH '$.a')) AS jt1 +FROM t1; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(t1.c1,'$[*]' COLUMNS (a INT PATH '$.a')) AS jt1 +FROM t1' at line 1 +DELETE t1, JSON_TABLE(t1.c1,'$[*]' COLUMNS (a INT PATH '$.a')) AS jt1 +USING t1; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(t1.c1,'$[*]' COLUMNS (a INT PATH '$.a')) AS jt1 +USING t1' at line 1 +DROP TABLE t1; +# +# Bug#25547244: ASSERTION `!TABLE || (!TABLE->READ_SET || BITMAP_IS_SET( +# +CREATE TABLE t1(i INT); +INSERT INTO t1 VALUES(1); +DROP TABLE t1; +# +# Bug#25540675: ASSERTION `!COL->CHILD_JDS->PRODUCING_RECORDS' FAILED +# +CREATE TABLE j1(j JSON); +INSERT INTO j1 VALUES('[1,2,3]'),('[1,2,4]'); +SELECT * FROM j1, +JSON_TABLE( JSON_OBJECT('key1', j) , +'$.*' COLUMNS (NESTED PATH '$.*' COLUMNS (col11 FOR ORDINALITY))) AS alias2; +j col11 +[1,2,3] NULL +[1,2,4] NULL +DROP TABLE j1; +# +# Bug#25584335: SIG 11 IN TABLE_LIST::FETCH_NUMBER_OF_ROWS +# +CREATE TABLE t1(i INT); +PREPARE stmt FROM "SELECT alias1.i AS field1 FROM ( + t1 AS alias1, + (SELECT * FROM + JSON_TABLE('[1,2,3]' , + '$[*]' COLUMNS (`col_varchar` FOR ORDINALITY)) AS SQ1_alias1 + ) AS alias2 )"; +EXECUTE stmt; +field1 +DEALLOCATE PREPARE stmt; +DROP TABLE t1; +# +# Bug#25604048: COLUMN NAMES WITH SAME 33-CHAR PREFIX ARE EQUAL +# +SELECT * FROM JSON_TABLE( '{"key1": "test"}' , '$' COLUMNS( +column_name_is_thirty_four_or_more VARCHAR(17) PATH '$.key1', +column_name_is_thirty_four_or_more_yes_indeed VARCHAR(17) PATH '$.key1' +) ) AS alias1; +column_name_is_thirty_four_or_more column_name_is_thirty_four_or_more_yes_indeed +test test +SELECT * FROM JSON_TABLE( '{"key1": "test"}' , '$' COLUMNS( +`column_name_is_thirty_four_or_more ` VARCHAR(17) PATH '$.key1' +) ) AS alias1; +column_name_is_thirty_four_or_more +test +# +# Bug#25604404: JSON_TABLE MORE RESTRICTIVE WITH IDENTIFIERS THAN +# CREATE TABLE +# +SELECT * FROM JSON_TABLE( '[1, 2]', '$' COLUMNS( +one INT PATH '$[0]', two INT PATH '$[1]' +)) AS jt; +one two +1 2 +# +# Bug#25588450: SIG 6 IN JSON_WRAPPER::SEEK|SQL/JSON_DOM.CC +# +CREATE TABLE t1(c VARCHAR(10)) ENGINE=MEMORY; +INSERT INTO t1 VALUES('fiheife'); +SELECT * FROM `t1` AS alias1, JSON_TABLE( `c` , '$[*]' COLUMNS (jtcol1 JSON +PATH '$.*')) AS alias2 WHERE jtcol1 <= 'kjfh'; +ERROR HY000: Syntax error in JSON text in argument 1 to function 'JSON_TABLE' at position 1 +DROP TABLE t1; +# +# Bug#25587754: ASSERTION `FIXED == 0 || BASIC_CONST_ITEM()' FAILED +# +PREPARE stmt FROM +"SELECT * FROM JSON_TABLE( '[1,2]', '$[*]' + COLUMNS (jtcol1 JSON PATH '$.*')) AS alias2"; +EXECUTE stmt; +jtcol1 +NULL +NULL +DEALLOCATE PREPARE stmt; +# +# Bug#25584593: UNABLE TO USE JSON_TABLE() ON TEXT/BLOB JSON DATA +# +SELECT * FROM JSON_TABLE(NULL, '$.k' COLUMNS (id FOR ORDINALITY)) AS aLias; +id +SELECT * FROM JSON_TABLE(@myjson, '$.k' COLUMNS (id FOR ORDINALITY)) AS alias; +id +SET @myjson = '{"k": 42}'; +SELECT * FROM JSON_TABLE(@myjson, '$.k' COLUMNS (id FOR ORDINALITY)) AS alias; +id +1 +CREATE TABLE t1( +txt TEXT, ty TINYTEXT, tm MEDIUMTEXT, tl LONGTEXT); +INSERT INTO t1 values ( +'{"k": "text"}','{"k": "tinytext"}','{"k": "mediumtext"}','{"k": "longtext"}'); +SELECT alias.* FROM t1, JSON_TABLE(t1.txt,'$.k' COLUMNS (id VARCHAR(10) PATH '$')) AS alias; +id +text +SELECT alias.* FROM t1, JSON_TABLE(t1.ty, '$.k' COLUMNS (id VARCHAR(10) PATH '$')) AS alias; +id +tinytext +SELECT alias.* FROM t1, JSON_TABLE(t1.tm, '$.k' COLUMNS (id VARCHAR(10) PATH '$')) AS alias; +id +mediumtext +SELECT alias.* FROM t1, JSON_TABLE(t1.tl, '$.k' COLUMNS (id VARCHAR(10) PATH '$')) AS alias; +id +longtext +SELECT alias.* FROM t1, JSON_TABLE(t1.txt,'$.k' COLUMNS (id TEXT PATH '$')) AS alias; +id +text +SELECT alias.* FROM t1, JSON_TABLE(t1.txt,'$.k' COLUMNS (id TINYTEXT PATH '$')) AS alias; +id +text +SELECT alias.* FROM t1, JSON_TABLE(t1.txt,'$.k' COLUMNS (id MEDIUMTEXT PATH '$')) AS alias; +id +text +SELECT alias.* FROM t1, JSON_TABLE(t1.txt,'$.k' COLUMNS (id LONGTEXT PATH '$')) AS alias; +id +text +SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb BLOB PATH '$')) as alias; +blb +asd123 +EXPLAIN SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb BLOB PATH '$')) as alias; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE alias ALL NULL NULL NULL NULL 40 Table function: json_table +EXPLAIN SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb TINYBLOB PATH '$')) as alias; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE alias ALL NULL NULL NULL NULL 40 Table function: json_table +EXPLAIN SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb MEDIUMBLOB PATH '$')) as alias; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE alias ALL NULL NULL NULL NULL 40 Table function: json_table +EXPLAIN SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb LONGBLOB PATH '$')) as alias; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE alias ALL NULL NULL NULL NULL 40 Table function: json_table +EXPLAIN SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb TEXT PATH '$')) as alias; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE alias ALL NULL NULL NULL NULL 40 Table function: json_table +EXPLAIN SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb TINYTEXT PATH '$')) as alias; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE alias ALL NULL NULL NULL NULL 40 Table function: json_table +EXPLAIN SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb MEDIUMTEXT PATH '$')) as alias; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE alias ALL NULL NULL NULL NULL 40 Table function: json_table +EXPLAIN SELECT alias.* FROM JSON_TABLE('"asd123"', '$' COLUMNS (blb LONGTEXT PATH '$')) as alias; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE alias ALL NULL NULL NULL NULL 40 Table function: json_table +SELECT * FROM +(SELECT CAST(blb AS JSON) jf FROM +JSON_TABLE('"asd123"', '$' COLUMNS (blb BLOB PATH '$')) AS jti) AS dt, +JSON_TABLE(jf, '$' COLUMNS (blb BLOB PATH '$')) AS jto; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'JSON) jf FROM +JSON_TABLE('"asd123"', '$' COLUMNS (blb BLOB PATH '$')) AS jti)...' at line 2 +DROP TABLE t1; +# +# Bug#26500384: ASSERT FAILURE IN QUERY WITH WINDOW FUNCTION AND +# JSON_TABLE +# +CREATE TABLE t (x INT); +INSERT INTO t VALUES (1), (2), (3); +SELECT MAX(t.x) OVER () m, jt.* FROM t, +JSON_TABLE(JSON_ARRAY(m), '$[*]' COLUMNS (i INT PATH '$')) jt; +ERROR 42S22: Unknown column 'm' in 'JSON_TABLE argument' +DROP TABLE t; +# +# Bug#26583283: ASSERTION `!THD->IS_ERROR()' FAILED IN SQL_RESOLVER.CC +# +EXPLAIN SELECT * FROM JSON_TABLE('null', '$' COLUMNS(AA DECIMAL PATH '$')) tt; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE tt ALL NULL NULL NULL NULL 40 Table function: json_table +CREATE VIEW v1 AS SELECT * FROM +JSON_TABLE( 'null', '$' COLUMNS (c1 DECIMAL PATH '$' ) ) AS jt; +SELECT * FROM v1; +c1 +NULL +EXPLAIN SELECT * FROM v1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE jt ALL NULL NULL NULL NULL 40 Table function: json_table +DROP VIEW v1; +# +# Bug#25822408: ASSERTION `!COL->CHILD_JDS->PRODUCING_RECORDS' FAILED +# +PREPARE stmt FROM "SELECT * FROM + JSON_TABLE('{\"a\":1}','$' COLUMNS (c1 CHAR(20) PATH '$.b' ERROR ON EMPTY)) jt"; +EXECUTE stmt; +ERROR HY000: Field 'c1' can't be set for JSON_TABLE 'jt'. +EXECUTE stmt; +ERROR HY000: Field 'c1' can't be set for JSON_TABLE 'jt'. +# +# Bug#25594571: CRASH AT ITEM::CONST_ITEM|SQL/ITEM.H +# +CREATE TABLE t1 (i INT); +INSERT INTO t1 VALUES(1),(2),(3),(4),(5),(6),(7); +PREPARE stmt FROM "SELECT * FROM t1 AS alias1 LEFT JOIN t1 AS alias2 +LEFT JOIN JSON_TABLE('[1,2,3]', '$[*]' COLUMNS (i FOR ORDINALITY )) AS +alias3 ON alias2 . `i` = alias3 . `i` ON alias1 . `i` = alias2 . `i`"; +EXECUTE stmt; +i i i +1 1 1 +2 2 2 +3 3 3 +4 4 NULL +5 5 NULL +6 6 NULL +7 7 NULL +EXECUTE stmt; +i i i +1 1 1 +2 2 2 +3 3 3 +4 4 NULL +5 5 NULL +6 6 NULL +7 7 NULL +DROP TABLE t1; +# +# Bug#26648617: ASSERTION `IS_VIEW_OR_DERIVED() && +# USES_MATERIALIZATION()' FAILED. +# +CREATE TABLE t1 ( +col_varchar_key varchar(1) DEFAULT NULL +) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1),(4); +SELECT * FROM t1 WHERE col_varchar_key NOT IN ( +SELECT col_varchar_key FROM JSON_TABLE( +'[{"col_key": 1},{"col_key": 2}]', "$[*]" COLUMNS +(col_varchar_key VARCHAR(10) PATH "$.col_key")) AS innr1); +col_varchar_key +4 +EXPLAIN SELECT * FROM t1 WHERE col_varchar_key NOT IN ( +SELECT col_varchar_key FROM JSON_TABLE( +'[{"col_key": 1},{"col_key": 2}]', "$[*]" COLUMNS +(col_varchar_key VARCHAR(10) PATH "$.col_key")) AS innr1); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where +2 DEPENDENT SUBQUERY innr1 ALL NULL NULL NULL NULL 40 Table function: json_table; Using where +SELECT * FROM t1 WHERE col_varchar_key IN ( +SELECT col_varchar_key FROM JSON_TABLE( +'[{"col_key": 1},{"col_key": 2}]', "$[*]" COLUMNS +(col_varchar_key VARCHAR(10) PATH "$.col_key")) AS innr1); +col_varchar_key +1 +EXPLAIN SELECT * FROM t1 WHERE col_varchar_key IN ( +SELECT col_varchar_key FROM JSON_TABLE( +'[{"col_key": 1},{"col_key": 2}]', "$[*]" COLUMNS +(col_varchar_key VARCHAR(10) PATH "$.col_key")) AS innr1); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 2 +1 PRIMARY innr1 ALL NULL NULL NULL NULL 40 Table function: json_table; Using where; FirstMatch(t1); Using join buffer (flat, BNL join) +DROP TABLE t1; +# +# Bug#26711551: WL8867:CONDITIONAL JUMP IN JSON_TABLE_COLUMN::CLEANUP +# +CREATE TABLE t(x int, y int); +INSERT INTO t(x) VALUES (1); +UPDATE t t1, JSON_TABLE('[2]', '$[*]' COLUMNS (x INT PATH '$')) t2 +SET t1.y = t2.x; +SELECT * FROM t; +x y +1 2 +DROP TABLE t; +# +# Bug#26679671: SIG 11 IN JSON_BINARY::PARSE_BINARY() +# +CREATE TABLE t1(id INT, f1 JSON); +INSERT INTO t1 VALUES (1, '{\"1\": 1}'), (2, '{\"1\": 2}'), (3, '{\"1\": 3}'), +(4, '{\"1\": 4}'), (5, '{\"1\": 5}'), (6, '{\"1\": 6}'); +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status Engine-independent statistics collected +test.t1 analyze Warning Engine-independent statistics are not collected for column 'f1' +test.t1 analyze status OK +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status Engine-independent statistics collected +test.t1 analyze Warning Engine-independent statistics are not collected for column 'f1' +test.t1 analyze status Table is already up to date +SELECT * FROM t1 as jj1, +(SELECT tt2.* FROM t1 as tt2, +JSON_TABLE(f1, "$" COLUMNS (id FOR ORDINALITY)) AS tbl) dt; +id f1 id f1 +1 {"1": 1} 1 {"1": 1} +1 {"1": 1} 2 {"1": 2} +1 {"1": 1} 3 {"1": 3} +1 {"1": 1} 4 {"1": 4} +1 {"1": 1} 5 {"1": 5} +1 {"1": 1} 6 {"1": 6} +2 {"1": 2} 1 {"1": 1} +2 {"1": 2} 2 {"1": 2} +2 {"1": 2} 3 {"1": 3} +2 {"1": 2} 4 {"1": 4} +2 {"1": 2} 5 {"1": 5} +2 {"1": 2} 6 {"1": 6} +3 {"1": 3} 1 {"1": 1} +3 {"1": 3} 2 {"1": 2} +3 {"1": 3} 3 {"1": 3} +3 {"1": 3} 4 {"1": 4} +3 {"1": 3} 5 {"1": 5} +3 {"1": 3} 6 {"1": 6} +4 {"1": 4} 1 {"1": 1} +4 {"1": 4} 2 {"1": 2} +4 {"1": 4} 3 {"1": 3} +4 {"1": 4} 4 {"1": 4} +4 {"1": 4} 5 {"1": 5} +4 {"1": 4} 6 {"1": 6} +5 {"1": 5} 1 {"1": 1} +5 {"1": 5} 2 {"1": 2} +5 {"1": 5} 3 {"1": 3} +5 {"1": 5} 4 {"1": 4} +5 {"1": 5} 5 {"1": 5} +5 {"1": 5} 6 {"1": 6} +6 {"1": 6} 1 {"1": 1} +6 {"1": 6} 2 {"1": 2} +6 {"1": 6} 3 {"1": 3} +6 {"1": 6} 4 {"1": 4} +6 {"1": 6} 5 {"1": 5} +6 {"1": 6} 6 {"1": 6} +EXPLAIN SELECT * FROM t1 as jj1, +(SELECT tt2.* FROM t1 as tt2, +JSON_TABLE(f1, "$" COLUMNS (id FOR ORDINALITY)) AS tbl) dt; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE jj1 ALL NULL NULL NULL NULL 6 +1 SIMPLE tt2 ALL NULL NULL NULL NULL 6 Using join buffer (flat, BNL join) +1 SIMPLE tbl ALL NULL NULL NULL NULL 40 Table function: json_table +SELECT * FROM t1 as jj1, +(SELECT tt2.* FROM t1 as tt2, +JSON_TABLE(f1, "$" COLUMNS (id FOR ORDINALITY)) AS tbl STRAIGHT_JOIN +t1 AS tt3) dt ORDER BY 1,3 LIMIT 10; +id f1 id f1 +1 {"1": 1} 1 {"1": 1} +1 {"1": 1} 1 {"1": 1} +1 {"1": 1} 1 {"1": 1} +1 {"1": 1} 1 {"1": 1} +1 {"1": 1} 1 {"1": 1} +1 {"1": 1} 1 {"1": 1} +1 {"1": 1} 2 {"1": 2} +1 {"1": 1} 2 {"1": 2} +1 {"1": 1} 2 {"1": 2} +1 {"1": 1} 2 {"1": 2} +EXPLAIN SELECT * FROM t1 as jj1, +(SELECT tt2.* FROM t1 as tt2, +JSON_TABLE(f1, "$" COLUMNS (id FOR ORDINALITY)) AS tbl STRAIGHT_JOIN +t1 AS tt3) dt ORDER BY 1,3 LIMIT 11; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE jj1 ALL NULL NULL NULL NULL 6 Using temporary; Using filesort +1 SIMPLE tt2 ALL NULL NULL NULL NULL 6 Using join buffer (flat, BNL join) +1 SIMPLE tbl ALL NULL NULL NULL NULL 40 Table function: json_table +1 SIMPLE tt3 ALL NULL NULL NULL NULL 6 Using join buffer (flat, BNL join) +SELECT * FROM t1 WHERE id IN +(SELECT id FROM t1 as tt2, +JSON_TABLE(f1, "$" COLUMNS (jf FOR ORDINALITY)) AS tbl); +id f1 +1 {"1": 1} +2 {"1": 2} +3 {"1": 3} +4 {"1": 4} +5 {"1": 5} +6 {"1": 6} +EXPLAIN SELECT * FROM t1 WHERE id IN +(SELECT id FROM t1 as tt2, +JSON_TABLE(f1, "$" COLUMNS (jf FOR ORDINALITY)) AS tbl); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 6 +1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 +2 MATERIALIZED tt2 ALL NULL NULL NULL NULL 6 +2 MATERIALIZED tbl ALL NULL NULL NULL NULL 40 Table function: json_table +DROP TABLE t1; +# +# Bug#26760811: WL#8867: MEMORY LEAK REPORTED BY ASAN AND VALGRIND +# +CREATE TABLE t (j JSON); +INSERT INTO t VALUES +('[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]'), +('[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]'); +SELECT COUNT(*) FROM t, JSON_TABLE(j, '$[*]' COLUMNS (i INT PATH '$')) AS jt; +COUNT(*) +34 +PREPARE ps FROM +'SELECT COUNT(*) FROM t, JSON_TABLE(j, ''$[*]'' COLUMNS (i INT PATH ''$'')) AS jt'; +EXECUTE ps; +COUNT(*) +34 +EXECUTE ps; +COUNT(*) +34 +DROP PREPARE ps; +DROP TABLE t; +# +# Bug #26781759: NON-UNIQUE ALIAS ERROR NOT BEING THROWN +# +SELECT * FROM JSON_TABLE(NULL, '$' COLUMNS(j1 FOR ORDINALITY)) AS jalias, +JSON_TABLE(NULL, '$' COLUMNS(j1 FOR ORDINALITY)) AS jalias; +ERROR 42000: Not unique table/alias: 'jalias' +# +# Bug#27152428 JSON_TABLE + PREPARED STATEMENT + VIEW HAS PROBLEM IN DURING RESOLUTION +# +CREATE TABLE t1 (a INT, b INT); +CREATE VIEW v2 AS SELECT * FROM t1 LIMIT 2; +DROP TABLE t1; +DROP VIEW v2; +# +# Bug#27189940: CREATE VIEW FAILS ON JSON_TABLE() IN SCHEMA-LESS CONNECTIONS +# BUG#27217897: JSON_TABLE() FAILS IF NO DATABASE SELECTED +# +connect conn1,localhost,root,,*NO-ONE*; +connection conn1; +CREATE VIEW test.v AS SELECT * FROM JSON_TABLE('[1,2,3]', '$[*]' COLUMNS (num INT PATH '$[0]')) AS jt; +SELECT * FROM JSON_TABLE('[1,2,3]', '$[*]' COLUMNS (num INT PATH '$[0]')) AS jt; +num +1 +2 +3 +connection default; +disconnect conn1; +use test; +SHOW CREATE VIEW test.v; +View Create View character_set_client collation_connection +v CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select `jt`.`num` AS `num` from JSON_TABLE('[1,2,3]', '$[*]' COLUMNS (`num` int(11) PATH '$[0]')) `jt` latin1 latin1_swedish_ci +SELECT * FROM test.v; +num +1 +2 +3 +DROP VIEW test.v; +# +# Bug#27729112 JSON_TABLE SHOULD DECODE BASE64-ENCODED STRINGS +# +SELECT v +FROM JSON_TABLE(JSON_OBJECT('foo', _binary'bar'), '$' + COLUMNS(v VARCHAR(255) PATH '$.foo')) tbl; +v +bar +# +# Bug#28254268: JSON_TABLE() FUNCTION REJECTS SELECT PERMISSIONS +# +CREATE DATABASE db2; +USE db2; +CREATE TABLE t1 (c JSON); +INSERT INTO t1 VALUES('[1,2,3]'); +CREATE USER user1@localhost; +GRANT SELECT ON db2.t1 TO user1@localhost; +connect conn1,localhost,user1,,; +connection conn1; +USE db2; +SELECT t1.c FROM t1; +c +[1,2,3] +SELECT jt.* FROM t1, JSON_TABLE(t1.c, '$[*]' COLUMNS (num INT PATH '$[0]')) +AS jt; +num +1 +2 +3 +disconnect conn1; +connection default; +DROP USER user1@localhost; +DROP DATABASE db2; +# +# Bug#27856835 JSON_TABLE RETURNS WRONG DATATYPE WHEN INT-VALUE IS GRATER +# THAN (2^31-1) +# +SELECT id FROM JSON_TABLE('[{"id":"9223372036854775807"}]', '$[*]' COLUMNS +(id BIGINT PATH '$.id')) AS json; +id +9223372036854775807 +# As we currently have no way of telling if a JSON string value is +# signed or unsigned, this value will overflow. +SELECT id FROM JSON_TABLE('[{"id":"9223372036854775808"}]', '$[*]' COLUMNS +(id BIGINT PATH '$.id')) AS json; +id +9223372036854775807 +Warnings: +Warning 1264 Out of range value for column 'id' at row 1 +# Here the JSON value is a NUMERIC value, and we thus know if the value +# is signed or unsigned. +SELECT id FROM JSON_TABLE('[{"id":9223372036854775808}]', '$[*]' COLUMNS +(id BIGINT PATH '$.id')) AS json; +id +9223372036854775807 +Warnings: +Warning 1264 Out of range value for column 'id' at row 1 +# If we tell the JSON table column to be unsigned, we get to store the +# full value correctly. +SELECT id FROM JSON_TABLE('[{"id":"9223372036854775808"}]', '$[*]' COLUMNS +(id BIGINT UNSIGNED PATH '$.id')) AS json; +id +9223372036854775808 +SELECT id FROM JSON_TABLE('[{"id":"2147483648"}]', '$[*]' COLUMNS +(id INT UNSIGNED PATH '$.id')) AS json; +id +2147483648 +# Check that we preserve the signedness of the columns. +USE test; +CREATE TABLE t1 AS SELECT id, value FROM +JSON_TABLE('[{"id":9223372036854775808, "value":9223372036854775807}]', +'$[*]' COLUMNS (id BIGINT UNSIGNED PATH '$.id', +value BIGINT PATH '$.value')) +AS json; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` bigint(20) unsigned DEFAULT NULL, + `value` bigint(20) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Bug#28255453: VIEW USING JSON_TABLE FAILS IF NO SCHEMA IS SELECTED +# +connect conn1,localhost,root,,*NO-ONE*; +CREATE VIEW test.v AS SELECT * FROM JSON_TABLE('[1,2,3]', '$[*]' COLUMNS (num INT PATH '$[0]')) AS jt; +SELECT * FROM test.v; +num +1 +2 +3 +DROP VIEW test.v; +# Check that a user with access to the schema 'foo' can do a SELECT with +# a JSON_TABLE function. +CREATE SCHEMA foo; +CREATE USER foo@localhost; +GRANT EXECUTE ON foo.* TO foo@localhost; +connect con1,localhost,foo,,foo; +SELECT 1 FROM JSON_TABLE('[1,2,3]', '$[*]' COLUMNS (num INT PATH '$.a')) AS jt; +1 +1 +1 +1 +connection default; +disconnect con1; +DROP USER foo@localhost; +DROP SCHEMA foo; +# +# Bug#27923406 ERROR 1142 (42000) WHEN USING JSON_TABLE +# +CREATE SCHEMA my_schema; +CREATE USER foo@localhost; +GRANT EXECUTE ON my_schema.* TO foo@localhost; +connect con1,localhost,foo,,my_schema; +SELECT +* +FROM +JSON_TABLE( +'[{"x":2,"y":"8"},{"x":"3","y":"7"},{"x":"4","y":6}]', +"$[*]" COLUMNS( +xval VARCHAR(100) PATH "$.x", +yval VARCHAR(100) PATH "$.y" + ) +) AS jt1; +xval yval +2 8 +3 7 +4 6 +connection default; +disconnect con1; +DROP USER foo@localhost; +DROP SCHEMA my_schema; +# +# Bug#28538315: JSON_TABLE() COLUMN TYPES DON'T SUPPORT COLLATE CLAUSE +# +CREATE TABLE t1 SELECT * +FROM JSON_TABLE('"test"', '$' COLUMNS(x VARCHAR(10) +CHARSET utf8mb4 +PATH '$')) AS jt1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `x` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Bug#28643862 JSON_TABLE'S "COLUMNS" CLAUSE USES +# GLOBAL.CHARACTER_SET_RESULTS DEFAULT CHARSET +# +SET @@SESSION.character_set_connection = ascii; +CREATE TABLE t1 SELECT a.col +FROM JSON_TABLE('"test"', '$' COLUMNS(col VARCHAR(10) PATH '$')) AS a; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `col` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SET @@SESSION.collation_connection = latin1_bin; +CREATE TABLE t2 SELECT a.col +FROM JSON_TABLE('"test"', '$' COLUMNS(col VARCHAR(10) PATH '$')) AS a; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `col` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1, t2; +SET @@SESSION.character_set_connection = DEFAULT; +# +# Bug#28851656: JSON_TABLE RETURN "UNKNOWN DATABASE ''" FROM A FUNCTION +# +CREATE FUNCTION FN_COUNT_ROWS(X JSON) +RETURNS INT DETERMINISTIC +RETURN ( +SELECT COUNT(*) FROM JSON_TABLE( X, '$[*]' COLUMNS( I INT PATH '$')) der +); +SELECT FN_COUNT_ROWS('[1, 2]') CNT; +CNT +2 +SELECT FN_COUNT_ROWS('[1, 2, 3]') CNT; +CNT +3 +SELECT FN_COUNT_ROWS('[1, 2, 3, 4]') CNT; +CNT +4 +DROP FUNCTION FN_COUNT_ROWS; +# +# Bug#30310265: VIEWS LOSE THE CHARACTER SET OF JSON_TABLE'S +# PATH ARGUMENTS +# +CREATE VIEW v1 AS +SELECT * FROM JSON_TABLE('{"å":{"å":1}}', '$.å' COLUMNS (x INT PATH '$.å')) t; +SELECT * FROM v1; +x +1 +SET NAMES latin1; +SELECT * FROM v1; +x +1 +SET NAMES DEFAULT; +DROP VIEW v1; +CREATE VIEW v2 AS +SELECT * FROM JSON_TABLE('{}', '$' COLUMNS ( +x VARCHAR(10) PATH '$.a' DEFAULT '"isn''t here"' ON EMPTY) +) t; +DROP VIEW v2; +# +# Bug#30382156: STORED PROCEDURE, JSON_TABLE AND "CONST" JOIN TYPE +# +CREATE TABLE t (id INT PRIMARY KEY, j JSON); +INSERT INTO t VALUES (1, '{"x":1}'); +CREATE PROCEDURE p() +SELECT * FROM t, JSON_TABLE(j, '$' COLUMNS (x INT PATH '$.x')) jt +WHERE id = 1; +CALL p(); +id j x +1 {"x":1} 1 +CALL p(); +id j x +1 {"x":1} 1 +CALL p(); +id j x +1 {"x":1} 1 +DROP PROCEDURE p; +DROP TABLE t; +# +# WL#13512: Deprecate ON ERROR before ON EMPTY in JSON_TABLE syntax +# +SELECT * FROM +JSON_TABLE('{}', '$' COLUMNS (x VARCHAR(10) PATH '$.x' + DEFAULT '"a"' ON ERROR DEFAULT '"b"' ON EMPTY)) jt; +x +"b" +SELECT * FROM +JSON_TABLE('{}', '$' COLUMNS (x VARCHAR(10) PATH '$.x' + NULL ON ERROR NULL ON EMPTY)) jt; +x +NULL +SELECT * FROM +JSON_TABLE('{"x":"c"}', '$' COLUMNS (x VARCHAR(10) PATH '$.x' + ERROR ON ERROR ERROR ON EMPTY)) jt; +x +c +# +# Bug#30628330: INSERT WITH JSON_TABLE FAILS DUE TO WARNING INVOKED +# WITH ON ERROR CLAUSE +# +CREATE TABLE t(id INT, a TINYINT, b VARCHAR(3), c DATE, d DECIMAL); +INSERT INTO t SELECT * FROM +JSON_TABLE(JSON_ARRAY(JSON_OBJECT('a', 1, 'b', 'abc'), +JSON_OBJECT('a', 2, 'b', 'abcd'), +JSON_OBJECT('a', 1000, 'b', 'xyz'), +JSON_OBJECT('c', TIME'12:00:00', 'd', 1e308)), +'$[*]' COLUMNS (id FOR ORDINALITY, +a TINYINT PATH '$.a' DEFAULT '111' ON ERROR, +b VARCHAR(3) PATH '$.b' DEFAULT '"ERR"' ON ERROR, +c DATE PATH '$.c' DEFAULT '"2001-01-01"' ON ERROR, +d DECIMAL PATH '$.c' DEFAULT '999' ON ERROR) +) AS jt; +Warnings: +Warning 1265 Data truncated for column 'b' at row 2 +Warning 1264 Out of range value for column 'a' at row 3 +Warning 1265 Data truncated for column 'd' at row 4 +SELECT * FROM t ORDER BY id; +id a b c d +1 1 abc NULL NULL +2 2 abc NULL NULL +3 127 xyz NULL NULL +4 NULL NULL 2012-00-00 12 +DROP TABLE t; +# +# Bug#30263373: INCORRECT OUTPUT FROM TABLE_FUNCTION_JSON::PRINT() +# +CREATE VIEW v AS SELECT * FROM +JSON_TABLE('[123]', '$[*]' COLUMNS (`name with space 1` INT PATH '$', +`name with space 2` FOR ORDINALITY)) jt; +SELECT * FROM v; +name with space 1 name with space 2 +123 1 +DROP VIEW v; +CREATE VIEW v AS SELECT HEX(x), HEX(y) FROM +JSON_TABLE('["abc"]', '$[*]' COLUMNS (x BINARY(10) PATH '$', +y VARBINARY(10) PATH '$')) jt; +SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS +WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v'; +VIEW_DEFINITION +select hex(`jt`.`x`) AS `HEX(x)`,hex(`jt`.`y`) AS `HEX(y)` from JSON_TABLE('["abc"]', '$[*]' COLUMNS (`x` binary(10) PATH '$', `y` varbinary(10) PATH '$')) `jt` +SELECT * FROM v; +HEX(x) HEX(y) +61626300000000000000 616263 +DROP VIEW v; +CREATE VIEW v AS SELECT * FROM +JSON_TABLE('[123]', '$[*]' COLUMNS(ti TINYINT PATH '$', +si SMALLINT PATH '$', +mi MEDIUMINT PATH '$', +i INT PATH '$', +bi BIGINT PATH '$', +tiu TINYINT UNSIGNED PATH '$', +siu SMALLINT UNSIGNED PATH '$', +miu MEDIUMINT UNSIGNED PATH '$', +iu INT UNSIGNED PATH '$', +biu BIGINT UNSIGNED PATH '$')) jt; +SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS +WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v'; +VIEW_DEFINITION +select `jt`.`ti` AS `ti`,`jt`.`si` AS `si`,`jt`.`mi` AS `mi`,`jt`.`i` AS `i`,`jt`.`bi` AS `bi`,`jt`.`tiu` AS `tiu`,`jt`.`siu` AS `siu`,`jt`.`miu` AS `miu`,`jt`.`iu` AS `iu`,`jt`.`biu` AS `biu` from JSON_TABLE('[123]', '$[*]' COLUMNS (`ti` tinyint(4) PATH '$', `si` smallint(6) PATH '$', `mi` mediumint(9) PATH '$', `i` int(11) PATH '$', `bi` bigint(20) PATH '$', `tiu` tinyint(3) unsigned PATH '$', `siu` smallint(5) unsigned PATH '$', `miu` mediumint(8) unsigned PATH '$', `iu` int(10) unsigned PATH '$', `biu` bigint(20) unsigned PATH '$')) `jt` +SELECT * FROM v; +ti si mi i bi tiu siu miu iu biu +123 123 123 123 123 123 123 123 123 123 +DROP VIEW v; +# +# Bug#31345503 JSON_TABLE SHOULD RETURN SQL NULL FOR JSON NULL +# +SELECT * +FROM +JSON_TABLE( +'[ + {"c1": null, + "c2": [{"c": "c_val", "l": [1,2]}], + "c3": null}, + {"c1": true, + "c2": [{"c": "c_val","l": [11]}, {"c": "c_val", "l": [false]}], + "c3": true}, + {"c1": false, + "c2": [{"c": null,"l": [true]}, {"c": "c_val", "l": [null]}], + "c3": false} + ]', +'$[*]' COLUMNS( +top_ord FOR ORDINALITY, +c1path VARCHAR(10) PATH '$.c1' ERROR ON ERROR, +NESTED PATH '$.c2[*]' COLUMNS ( +c2path VARCHAR(10) PATH '$.c' ERROR ON ERROR, +ord FOR ORDINALITY, +NESTED PATH '$.l[*]' COLUMNS (lpath_c VARCHAR(10) PATH '$' ERROR ON ERROR, +lpath_i INT PATH '$' ERROR ON ERROR) +), +c3path INT PATH '$.c3' ERROR ON ERROR +) +) as jt; +top_ord c1path c2path ord lpath_c lpath_i c3path +1 NULL c_val 1 1 1 NULL +1 NULL c_val 1 2 2 NULL +2 true c_val 1 11 11 1 +2 true c_val 2 false 0 1 +3 false NULL 1 true 1 0 +3 false c_val 2 NULL NULL 0 +# +# Bug #31327187 UBSAN: JSON_TABLE: NULL POINTER PASSED AS ARGUMENT 2, +# WHICH IS DECLARED TO NEVER BE NULL +# +SELECT HEX(a) FROM JSON_TABLE( +'[{"E":{"e":true,"~":1,"S3":"sTa"},"r":3,"":6.7},"",6.5]', +'$' + COLUMNS(a BINARY(5) PATH '$[1]' NULL ON EMPTY) +) e; +HEX(a) +0000000000 |