Skip to content

Commit 0333ddd

Browse files
committed
10.9 specific fixes for MDEV-29446 Change SHOW CREATE TABLE to display default collations
Fixing the JSON_TABLE related code according to MDEV-29446.
1 parent 0703c9e commit 0333ddd

File tree

3 files changed

+94
-1
lines changed

3 files changed

+94
-1
lines changed

mysql-test/suite/json/r/json_table.result

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,5 +1090,50 @@ SELECT * FROM JSON_TABLE('{"foo":{"bar":1},"qux":2}', '$' COLUMNS(c1 VARCHAR(8)
10901090
c1 c2
10911091
NULL NULL
10921092
#
1093+
# MDEV-29446 Change SHOW CREATE TABLE to display default collations
1094+
#
1095+
CREATE VIEW v1 AS
1096+
SELECT * FROM
1097+
JSON_TABLE('[{"name":"Laptop"}]', '$[*]'
1098+
COLUMNS
1099+
(
1100+
name VARCHAR(10) CHARACTER SET latin1 PATH '$.name')
1101+
) AS jt;
1102+
SHOW CREATE VIEW v1;
1103+
View Create View character_set_client collation_connection
1104+
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `jt`.`name` AS `name` from JSON_TABLE('[{"name":"Laptop"}]', '$[*]' COLUMNS (`name` varchar(10) CHARSET latin1 COLLATE latin1_swedish_ci PATH '$.name')) `jt` latin1 latin1_swedish_ci
1105+
DROP VIEW v1;
1106+
CREATE VIEW v1 AS
1107+
SELECT * FROM
1108+
JSON_TABLE('[{"name":"Laptop"}]', '$[*]'
1109+
COLUMNS
1110+
(
1111+
name VARCHAR(10) CHARACTER SET utf8mb3 PATH '$.name')
1112+
) AS jt;
1113+
SHOW CREATE VIEW v1;
1114+
View Create View character_set_client collation_connection
1115+
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `jt`.`name` AS `name` from JSON_TABLE('[{"name":"Laptop"}]', '$[*]' COLUMNS (`name` varchar(10) CHARSET utf8mb3 COLLATE utf8mb3_general_ci PATH '$.name')) `jt` latin1 latin1_swedish_ci
1116+
DROP VIEW v1;
1117+
CREATE VIEW v1 AS
1118+
SELECT * FROM
1119+
JSON_TABLE('[{"name":"Laptop"}]', '$[*]'
1120+
COLUMNS
1121+
(
1122+
name VARCHAR(10) CHARACTER SET BINARY PATH '$.name')
1123+
) AS jt;
1124+
SHOW CREATE VIEW v1;
1125+
View Create View character_set_client collation_connection
1126+
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `jt`.`name` AS `name` from JSON_TABLE('[{"name":"Laptop"}]', '$[*]' COLUMNS (`name` varbinary(10) PATH '$.name')) `jt` latin1 latin1_swedish_ci
1127+
DROP VIEW v1;
1128+
CREATE VIEW v1 AS
1129+
SELECT * FROM
1130+
JSON_TABLE('[{"name":"Laptop"}]', '$[*]'
1131+
COLUMNS
1132+
(
1133+
name ENUM('Laptop') CHARACTER SET BINARY PATH '$.name')
1134+
) AS jt;
1135+
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 'ENUM('Laptop') CHARACTER SET BINARY PATH '$.name')
1136+
) AS jt' at line 6
1137+
#
10931138
# End of 10.9 tests
10941139
#

mysql-test/suite/json/t/json_table.test

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,54 @@ DROP VIEW v1;
936936

937937
SELECT * FROM JSON_TABLE('{"foo":{"bar":1},"qux":2}', '$' COLUMNS(c1 VARCHAR(8) PATH '$[0]', c2 CHAR(8) PATH '$.*.x')) AS js;
938938

939+
940+
--echo #
941+
--echo # MDEV-29446 Change SHOW CREATE TABLE to display default collations
942+
--echo #
943+
944+
CREATE VIEW v1 AS
945+
SELECT * FROM
946+
JSON_TABLE('[{"name":"Laptop"}]', '$[*]'
947+
COLUMNS
948+
(
949+
name VARCHAR(10) CHARACTER SET latin1 PATH '$.name')
950+
) AS jt;
951+
SHOW CREATE VIEW v1;
952+
DROP VIEW v1;
953+
954+
CREATE VIEW v1 AS
955+
SELECT * FROM
956+
JSON_TABLE('[{"name":"Laptop"}]', '$[*]'
957+
COLUMNS
958+
(
959+
name VARCHAR(10) CHARACTER SET utf8mb3 PATH '$.name')
960+
) AS jt;
961+
SHOW CREATE VIEW v1;
962+
DROP VIEW v1;
963+
964+
CREATE VIEW v1 AS
965+
SELECT * FROM
966+
JSON_TABLE('[{"name":"Laptop"}]', '$[*]'
967+
COLUMNS
968+
(
969+
name VARCHAR(10) CHARACTER SET BINARY PATH '$.name')
970+
) AS jt;
971+
SHOW CREATE VIEW v1;
972+
DROP VIEW v1;
973+
974+
# ENUM is not supported yet in JSON_TABLE.
975+
# But if it is eventually supported, the below
976+
# test should be modified to make sure that "CHARACTER SET BINARY"
977+
# is not followed by "COLLATE BINARY".
978+
--error ER_PARSE_ERROR
979+
CREATE VIEW v1 AS
980+
SELECT * FROM
981+
JSON_TABLE('[{"name":"Laptop"}]', '$[*]'
982+
COLUMNS
983+
(
984+
name ENUM('Laptop') CHARACTER SET BINARY PATH '$.name')
985+
) AS jt;
986+
939987
--echo #
940988
--echo # End of 10.9 tests
941989
--echo #

sql/json_table.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -984,7 +984,7 @@ int Json_table_column::print(THD *thd, Field **f, String *str)
984984
((*f)->has_charset() && m_explicit_cs &&
985985
(str->append(STRING_WITH_LEN(" CHARSET ")) ||
986986
str->append(&m_explicit_cs->cs_name) ||
987-
(!(m_explicit_cs->state & MY_CS_PRIMARY) &&
987+
(Charset(m_explicit_cs).can_have_collate_clause() &&
988988
(str->append(STRING_WITH_LEN(" COLLATE ")) ||
989989
str->append(&m_explicit_cs->coll_name))))) ||
990990
str->append(m_column_type == PATH ? &path : &exists_path) ||

0 commit comments

Comments
 (0)