summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2017-07-03 16:22:30 +0200
committerSergei Golubchik <serg@mariadb.org>2017-07-05 17:15:59 +0200
commit1ea3c93fda52d2c154811e19853cff89342006a6 (patch)
tree7a91ad983a877b55ff113891d106157fb2bac99b
parent51d457f371ddf2191f48ec197e8f7364cfa071c8 (diff)
downloadmariadb-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.result37
-rw-r--r--mysql-test/t/type_json.test28
-rw-r--r--sql/sql_yacc.yy2
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: