MDEV-32235: mysql_json cannot be used on newly created table
Closes PR #2839 Reviewer: cvicentiu@mariadb.org
This commit is contained in:
parent
9a5f85dcbe
commit
22f3ebe4bf
@ -181,12 +181,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1(j mysql_json);
|
create table t1(j mysql_json);
|
||||||
show create table t1;
|
ERROR HY000: Cannot create table `test`.`t1`: Run mariadb-upgrade, to upgrade table with mysql_json type.
|
||||||
Table Create Table
|
|
||||||
t1 CREATE TABLE `t1` (
|
|
||||||
`j` mysql_json /* JSON from MySQL 5.7 */ CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
|
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
|
||||||
drop table t1;
|
|
||||||
create table `testjson` (
|
create table `testjson` (
|
||||||
`t` json /* JSON from MySQL 5.7*/ CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
|
`t` json /* JSON from MySQL 5.7*/ CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||||
@ -211,5 +206,16 @@ testjson CREATE TABLE `testjson` (
|
|||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
drop table testjson;
|
drop table testjson;
|
||||||
#
|
#
|
||||||
|
# MDEV-32235: mysql_json cannot be used on newly created table
|
||||||
|
#
|
||||||
|
CREATE TABLE t(j mysql_json);
|
||||||
|
ERROR HY000: Cannot create table `test`.`t`: Run mariadb-upgrade, to upgrade table with mysql_json type.
|
||||||
|
CREATE TABLE IF NOT EXISTS t(j mysql_json);
|
||||||
|
ERROR HY000: Cannot create table `test`.`t`: Run mariadb-upgrade, to upgrade table with mysql_json type.
|
||||||
|
CREATE OR REPLACE TABLE t(j mysql_json);
|
||||||
|
ERROR HY000: Cannot create table `test`.`t`: Run mariadb-upgrade, to upgrade table with mysql_json type.
|
||||||
|
CREATE TEMPORARY TABLE t(j mysql_json);
|
||||||
|
ERROR HY000: Cannot create table `test`.`t`: Run mariadb-upgrade, to upgrade table with mysql_json type.
|
||||||
|
#
|
||||||
# End of 10.5 tests
|
# End of 10.5 tests
|
||||||
#
|
#
|
||||||
|
@ -97,9 +97,8 @@ drop table mysql_json_test_big;
|
|||||||
create table t1(j json);
|
create table t1(j json);
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
create table t1(j mysql_json);
|
create table t1(j mysql_json);
|
||||||
show create table t1;
|
|
||||||
drop table t1;
|
|
||||||
# `json` type should not have character set and collation other than utf8mb4_bin
|
# `json` type should not have character set and collation other than utf8mb4_bin
|
||||||
--error ER_PARSE_ERROR
|
--error ER_PARSE_ERROR
|
||||||
create table `testjson` (
|
create table `testjson` (
|
||||||
@ -121,6 +120,20 @@ create table `testjson` (
|
|||||||
show create table testjson;
|
show create table testjson;
|
||||||
drop table testjson;
|
drop table testjson;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-32235: mysql_json cannot be used on newly created table
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
|
CREATE TABLE t(j mysql_json);
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
|
CREATE TABLE IF NOT EXISTS t(j mysql_json);
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
|
CREATE OR REPLACE TABLE t(j mysql_json);
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
|
CREATE TEMPORARY TABLE t(j mysql_json);
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.5 tests
|
--echo # End of 10.5 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -3657,6 +3657,19 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
if (sql_field->vcol_info)
|
if (sql_field->vcol_info)
|
||||||
sql_field->flags&= ~NOT_NULL_FLAG;
|
sql_field->flags&= ~NOT_NULL_FLAG;
|
||||||
|
|
||||||
|
if (sql_field->real_field_type() == MYSQL_TYPE_BLOB &&
|
||||||
|
thd->lex->sql_command == SQLCOM_CREATE_TABLE)
|
||||||
|
{
|
||||||
|
if (!strcmp(sql_field->type_handler()->name().ptr(), "MYSQL_JSON"))
|
||||||
|
{
|
||||||
|
my_printf_error(ER_CANT_CREATE_TABLE,
|
||||||
|
"Cannot create table %`s.%`s: "
|
||||||
|
"Run mariadb-upgrade, "
|
||||||
|
"to upgrade table with mysql_json type.", MYF(0),
|
||||||
|
alter_info->db.str, alter_info->table_name.str);
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
Initialize length from its original value (number of characters),
|
Initialize length from its original value (number of characters),
|
||||||
which was set in the parser. This is necessary if we're
|
which was set in the parser. This is necessary if we're
|
||||||
|
Loading…
x
Reference in New Issue
Block a user