diff options
author | Sergei Golubchik <serg@mariadb.org> | 2017-07-03 16:22:30 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2017-07-05 17:15:59 +0200 |
commit | 1ea3c93fda52d2c154811e19853cff89342006a6 (patch) | |
tree | 7a91ad983a877b55ff113891d106157fb2bac99b | |
parent | 51d457f371ddf2191f48ec197e8f7364cfa071c8 (diff) | |
download | mariadb-git-1ea3c93fda52d2c154811e19853cff89342006a6.tar.gz |
MDEV-9144 JSON data type
for compatibility with MySQL, add 'JSON' as an alias for 'TEXT'
-rw-r--r-- | mysql-test/r/type_json.result | 37 | ||||
-rw-r--r-- | mysql-test/t/type_json.test | 28 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 2 |
3 files changed, 67 insertions, 0 deletions
diff --git a/mysql-test/r/type_json.result b/mysql-test/r/type_json.result new file mode 100644 index 00000000000..a3e55a6cdd1 --- /dev/null +++ b/mysql-test/r/type_json.result @@ -0,0 +1,37 @@ +create or replace table t1(a json); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` text DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +create or replace table t1(a json character set utf8 default '{a:1}'); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` text CHARACTER SET utf8 DEFAULT '{a:1}' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +create or replace table t1(a json binary not null check (json_valid(a))); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` text CHARACTER SET latin1 COLLATE latin1_bin NOT NULL CHECK (json_valid(`a`)) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +insert t1 values ('[]'); +insert t1 values ('a'); +ERROR 23000: CONSTRAINT `a` failed for `test`.`t1` +set timestamp=unix_timestamp('2010:11:12 13:14:15'); +create or replace table t1(a json default(json_object('now', now()))); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` text DEFAULT json_object('now',current_timestamp()) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +insert t1 values (); +select * from t1; +a +{"now": "2010-11-12 13:14:15"} +drop table t1; +select cast('{a:1}' as text); +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 'text)' at line 1 +select cast('{a:1}' as json); +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)' at line 1 diff --git a/mysql-test/t/type_json.test b/mysql-test/t/type_json.test new file mode 100644 index 00000000000..0f6d091d6e3 --- /dev/null +++ b/mysql-test/t/type_json.test @@ -0,0 +1,28 @@ +# +# MDEV-9144 JSON data type +# + +create or replace table t1(a json); +show create table t1; + +create or replace table t1(a json character set utf8 default '{a:1}'); +show create table t1; + +create or replace table t1(a json binary not null check (json_valid(a))); +show create table t1; +insert t1 values ('[]'); +--error ER_CONSTRAINT_FAILED +insert t1 values ('a'); + +set timestamp=unix_timestamp('2010:11:12 13:14:15'); +create or replace table t1(a json default(json_object('now', now()))); +show create table t1; +insert t1 values (); +select * from t1; + +drop table t1; + +--error ER_PARSE_ERROR +select cast('{a:1}' as text); +--error ER_PARSE_ERROR +select cast('{a:1}' as json); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index b52301943fb..2d692e9e53b 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -6478,6 +6478,8 @@ field_type: { $$.set(MYSQL_TYPE_SET); } | LONG_SYM opt_binary { $$.set(MYSQL_TYPE_MEDIUM_BLOB); } + | JSON_SYM opt_binary + { $$.set(MYSQL_TYPE_BLOB); } ; spatial_type: |