From dacc47c6032f7654fac7c481d2c29f63b4e75995 Mon Sep 17 00:00:00 2001 From: lihongjian Date: Wed, 22 Mar 2023 17:12:44 +0800 Subject: [PATCH] feat(tianmu):New configuration parameters: "tianmu_mandatory" and "tianmu_no_key_error (#1462)" In version 1.0.4, we will discard "MANDATORY_TIANMU" and "NO_KEY_ERROR" in (sql_mode) Specifies whether to enable mandatory Tianmu engine in table. if yes ,set tianmu_mandatory to ON, otherwise set the variable to OFF. Specifies whether to to directly skip DDL statements that are not supported by the SQL layer, instead of reporting errors. if yes ,set tianmu_no_key_error to ON, otherwise set the variable to OFF. --- mysql-test/suite/tianmu/r/issue1065.result | 15 ++-- mysql-test/suite/tianmu/r/issue1090.result | 68 +++---------------- mysql-test/suite/tianmu/r/issue1131.result | 28 +++----- mysql-test/suite/tianmu/r/issue1325.result | 19 +----- mysql-test/suite/tianmu/r/issue956.result | 40 +++++------ mysql-test/suite/tianmu/t/issue1065.test | 15 ++-- mysql-test/suite/tianmu/t/issue1090.test | 28 +++----- mysql-test/suite/tianmu/t/issue1111-slave.opt | 3 +- mysql-test/suite/tianmu/t/issue1131.test | 20 +++--- mysql-test/suite/tianmu/t/issue1174-slave.opt | 3 +- mysql-test/suite/tianmu/t/issue1186-slave.opt | 3 +- mysql-test/suite/tianmu/t/issue1325-slave.opt | 2 + mysql-test/suite/tianmu/t/issue1325.test | 12 +--- mysql-test/suite/tianmu/t/issue956.test | 20 +++--- scripts/mysql_system_tables.sql | 4 +- scripts/mysql_system_tables_fix.sql | 8 +-- sql/auth/sql_authorization.cc | 6 +- sql/sql_class.h | 14 +++- sql/sql_parse.cc | 10 +-- sql/sql_table.cc | 34 +++++----- sql/sql_trigger.cc | 5 +- sql/sys_vars.cc | 22 +++++- storage/tianmu/handler/ha_tianmu.cpp | 5 +- 23 files changed, 160 insertions(+), 224 deletions(-) create mode 100644 mysql-test/suite/tianmu/t/issue1325-slave.opt diff --git a/mysql-test/suite/tianmu/r/issue1065.result b/mysql-test/suite/tianmu/r/issue1065.result index a0cf60ed7..714cf5da0 100644 --- a/mysql-test/suite/tianmu/r/issue1065.result +++ b/mysql-test/suite/tianmu/r/issue1065.result @@ -1,7 +1,8 @@ DROP DATABASE IF EXISTS issue1065_test; CREATE DATABASE issue1065_test; USE issue1065_test; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; drop table if exists t_test; CREATE TABLE t_test( id INT NOT NULL AUTO_INCREMENT, @@ -38,7 +39,8 @@ insert INTO t_test(first_name,last_name,sex,score,copy_id) VALUES (firstname,las END WHILE; END // drop PROCEDURE add_user; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; +set tianmu_mandatory=ON; +set tianmu_no_key_error=ON; create PROCEDURE add_user(in num INT) BEGIN DECLARE rowid INT DEFAULT 0; @@ -65,7 +67,8 @@ insert INTO t_test(first_name,last_name,sex,score,copy_id) VALUES (firstname,las END WHILE; END // drop PROCEDURE add_user; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; create PROCEDURE add_user(in num INT) BEGIN DECLARE rowid INT DEFAULT 0; @@ -102,7 +105,8 @@ score INT NOT NULL, copy_id INT NOT NULL, PRIMARY KEY (`id`) ) engine=innodb; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; +set tianmu_mandatory=ON; +set tianmu_no_key_error=ON; create PROCEDURE add_user(in num INT) BEGIN DECLARE rowid INT DEFAULT 0; @@ -129,7 +133,8 @@ insert INTO t_test(first_name,last_name,sex,score,copy_id) VALUES (firstname,las END WHILE; END // drop PROCEDURE add_user; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; create PROCEDURE add_user(in num INT) BEGIN DECLARE rowid INT DEFAULT 0; diff --git a/mysql-test/suite/tianmu/r/issue1090.result b/mysql-test/suite/tianmu/r/issue1090.result index b527d1dce..ff693e48a 100644 --- a/mysql-test/suite/tianmu/r/issue1090.result +++ b/mysql-test/suite/tianmu/r/issue1090.result @@ -2,11 +2,11 @@ set global default_storage_engine=innodb; include/master-slave.inc [connection master] # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # [on slave] include/sync_slave_sql_with_master.inc -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue1090(c1 int,c2 varchar(255)); show create table t_issue1090; @@ -19,7 +19,7 @@ t_issue1090 CREATE TABLE `t_issue1090` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -44,7 +44,7 @@ t_issue1090 CREATE TABLE `t_issue1090` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -61,10 +61,10 @@ t_issue1090 CREATE TABLE `t_issue1090` ( drop table t_issue1090; include/sync_slave_sql_with_master.inc # -# sql_mode='MANDATORY_TIANMU' +# tianmu_mandatory=ON # [on slave] -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; [on master] create table t_issue1090_2(c1 int,c2 varchar(255)); show create table t_issue1090_2; @@ -75,14 +75,6 @@ t_issue1090_2 CREATE TABLE `t_issue1090_2` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU -show variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_2; Table Create Table t_issue1090_2 CREATE TABLE `t_issue1090_2` ( @@ -100,14 +92,6 @@ t_issue1090_2 CREATE TABLE `t_issue1090_2` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_2; Table Create Table t_issue1090_2 CREATE TABLE `t_issue1090_2` ( @@ -119,10 +103,10 @@ t_issue1090_2 CREATE TABLE `t_issue1090_2` ( drop table t_issue1090_2; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # [on slave] -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue1090_3(c1 int,c2 varchar(255)); show create table t_issue1090_3; @@ -133,14 +117,6 @@ t_issue1090_3 CREATE TABLE `t_issue1090_3` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_3; Table Create Table t_issue1090_3 CREATE TABLE `t_issue1090_3` ( @@ -158,14 +134,6 @@ t_issue1090_3 CREATE TABLE `t_issue1090_3` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_3; Table Create Table t_issue1090_3 CREATE TABLE `t_issue1090_3` ( @@ -177,10 +145,10 @@ t_issue1090_3 CREATE TABLE `t_issue1090_3` ( drop table t_issue1090_3; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU' +# tianmu_mandatory=ON # [on slave] -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; [on master] create table t_issue1090_4(c1 int,c2 varchar(255)); show create table t_issue1090_4; @@ -191,14 +159,6 @@ t_issue1090_4 CREATE TABLE `t_issue1090_4` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_4; Table Create Table t_issue1090_4 CREATE TABLE `t_issue1090_4` ( @@ -214,14 +174,6 @@ t_issue1090_4 CREATE TABLE `t_issue1090_4` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_4; Table Create Table t_issue1090_4 CREATE TABLE `t_issue1090_4` ( diff --git a/mysql-test/suite/tianmu/r/issue1131.result b/mysql-test/suite/tianmu/r/issue1131.result index a4af69e29..ae6d729b1 100644 --- a/mysql-test/suite/tianmu/r/issue1131.result +++ b/mysql-test/suite/tianmu/r/issue1131.result @@ -1,9 +1,9 @@ use test; drop table IF EXISTS tmp_table; # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; create table t_issue1131(c1 int,c2 varchar(255))engine=innodb; show create table t_issue1131; Table Create Table @@ -11,9 +11,6 @@ t_issue1131 CREATE TABLE `t_issue1131` ( `c1` int(11) DEFAULT NULL, `c2` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -show variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -40,9 +37,9 @@ tmp_table CREATE TEMPORARY TABLE `tmp_table` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table tmp_table; # -# sql_mode='MANDATORY_TIANMU' +# tianmu_mandatory=ON # -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set tianmu_mandatory=ON; create table t_issue1131(c1 int,c2 varchar(255))engine=innodb; show create table t_issue1131; Table Create Table @@ -50,9 +47,6 @@ t_issue1131 CREATE TABLE `t_issue1131` ( `c1` int(11) DEFAULT NULL, `c2` varchar(255) DEFAULT NULL ) ENGINE=TIANMU DEFAULT CHARSET=latin1 -show variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU show variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -79,9 +73,9 @@ tmp_table CREATE TEMPORARY TABLE `tmp_table` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table tmp_table; # -# sql_mode='MANDATORY_TIANMU' +# tianmu_mandatory=ON # set default_storage_engine=innodb; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set tianmu_mandatory=ON; set default_storage_engine=innodb; create table t_issue1131(c1 int,c2 varchar(255)); show create table t_issue1131; @@ -90,9 +84,6 @@ t_issue1131 CREATE TABLE `t_issue1131` ( `c1` int(11) DEFAULT NULL, `c2` varchar(255) DEFAULT NULL ) ENGINE=TIANMU DEFAULT CHARSET=latin1 -show variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU show variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -119,10 +110,10 @@ tmp_table CREATE TEMPORARY TABLE `tmp_table` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table tmp_table; # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # [on slave] -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; create table t_issue1131(c1 int,c2 varchar(255)); show create table t_issue1131; Table Create Table @@ -130,9 +121,6 @@ t_issue1131 CREATE TABLE `t_issue1131` ( `c1` int(11) DEFAULT NULL, `c2` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -show variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show variables like '%_engine'; Variable_name Value default_storage_engine InnoDB diff --git a/mysql-test/suite/tianmu/r/issue1325.result b/mysql-test/suite/tianmu/r/issue1325.result index 2a50d785c..c4a014cb1 100644 --- a/mysql-test/suite/tianmu/r/issue1325.result +++ b/mysql-test/suite/tianmu/r/issue1325.result @@ -5,21 +5,6 @@ include/sync_slave_sql_with_master.inc # on master: CREATE DATABASE issue1325_test; USE issue1325_test; -include/sync_slave_sql_with_master.inc -# on slave: -USE issue1325_test; -show databases; -Database -information_schema -cache -issue1325_test -mtr -mysql -performance_schema -sys -sys_tianmu -test -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; # # Secondary INDEX # @@ -39,14 +24,14 @@ ttt CREATE TABLE `ttt` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 include/sync_slave_sql_with_master.inc # on slave: -# on master: +USE issue1325_test; show create table ttt; Table Create Table ttt CREATE TABLE `ttt` ( `id` int(11) NOT NULL, `name` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 +) ENGINE=TIANMU DEFAULT CHARSET=latin1 # # UNIQUE INDEX # diff --git a/mysql-test/suite/tianmu/r/issue956.result b/mysql-test/suite/tianmu/r/issue956.result index c56185b26..a9197679f 100644 --- a/mysql-test/suite/tianmu/r/issue956.result +++ b/mysql-test/suite/tianmu/r/issue956.result @@ -1,13 +1,13 @@ include/master-slave.inc [connection master] # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # default_storage_engine=innodb # [on slave] include/sync_slave_sql_with_master.inc set global default_storage_engine=innodb; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue956(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956; @@ -20,7 +20,7 @@ t_issue956 CREATE TABLE `t_issue956` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -43,7 +43,7 @@ t_issue956 CREATE TABLE `t_issue956` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -59,12 +59,12 @@ t_issue956 CREATE TABLE `t_issue956` ( drop table t_issue956; include/sync_slave_sql_with_master.inc # -# sql_mode='MANDATORY_TIANMU' +# tianmu_mandatory=ON # default_storage_engine=innodb # [on slave] set global default_storage_engine=innodb; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; [on master] create table t_issue956_2(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956_2; @@ -77,7 +77,7 @@ t_issue956_2 CREATE TABLE `t_issue956_2` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -100,7 +100,7 @@ t_issue956_2 CREATE TABLE `t_issue956_2` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -116,12 +116,12 @@ t_issue956_2 CREATE TABLE `t_issue956_2` ( drop table t_issue956_2; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # default_storage_engine=tianmu # [on slave] set global default_storage_engine=tianmu; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue956_3(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956_3; @@ -134,7 +134,7 @@ t_issue956_3 CREATE TABLE `t_issue956_3` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -157,7 +157,7 @@ t_issue956_3 CREATE TABLE `t_issue956_3` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -173,12 +173,12 @@ t_issue956_3 CREATE TABLE `t_issue956_3` ( drop table t_issue956_3; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU' +# tianmu_mandatory=ON # default_storage_engine=tianmu # [on slave] set global default_storage_engine=tianmu; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; [on master] create table t_issue956_4(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956_4; @@ -191,7 +191,7 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -214,7 +214,7 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -230,12 +230,12 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( drop table t_issue956_4; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # default_storage_engine=MyISAM # [on slave] set global default_storage_engine=MyISAM; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue956_4(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956_4; @@ -248,7 +248,7 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine MyISAM @@ -271,7 +271,7 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine MyISAM diff --git a/mysql-test/suite/tianmu/t/issue1065.test b/mysql-test/suite/tianmu/t/issue1065.test index 128d5f6e4..e0f391b59 100644 --- a/mysql-test/suite/tianmu/t/issue1065.test +++ b/mysql-test/suite/tianmu/t/issue1065.test @@ -9,7 +9,8 @@ CREATE DATABASE issue1065_test; USE issue1065_test; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; --enable_warnings --disable_warnings drop table if exists t_test; @@ -56,7 +57,8 @@ DELIMITER ;// drop PROCEDURE add_user; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; +set tianmu_mandatory=ON; +set tianmu_no_key_error=ON; --enable_warnings DELIMITER //; @@ -90,7 +92,8 @@ DELIMITER ;// drop PROCEDURE add_user; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; --enable_warnings DELIMITER //; @@ -136,7 +139,8 @@ CREATE TABLE t_test( ) engine=innodb; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; +set tianmu_mandatory=ON; +set tianmu_no_key_error=ON; --enable_warnings DELIMITER //; @@ -170,7 +174,8 @@ DELIMITER ;// drop PROCEDURE add_user; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; --enable_warnings DELIMITER //; diff --git a/mysql-test/suite/tianmu/t/issue1090.test b/mysql-test/suite/tianmu/t/issue1090.test index c40f01b0f..467ea3d28 100644 --- a/mysql-test/suite/tianmu/t/issue1090.test +++ b/mysql-test/suite/tianmu/t/issue1090.test @@ -6,12 +6,12 @@ set global default_storage_engine=innodb; --enable_warnings --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # --echo [on slave] --source include/sync_slave_sql_with_master.inc --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] @@ -39,11 +39,11 @@ drop table t_issue1090; --echo # ---echo # sql_mode='MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # --echo [on slave] --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; --enable_warnings --echo [on master] @@ -52,8 +52,6 @@ create table t_issue1090_2(c1 int,c2 varchar(255)); show create table t_issue1090_2; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show variables like '%_engine'; show create table t_issue1090_2; --echo [on master] connection master; @@ -61,8 +59,6 @@ alter table t_issue1090_2 add c3 int; show create table t_issue1090_2; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_2; --echo [on master] connection master; @@ -70,11 +66,11 @@ drop table t_issue1090_2; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # --echo [on slave] --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] @@ -84,8 +80,6 @@ create table t_issue1090_3(c1 int,c2 varchar(255)); show create table t_issue1090_3; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_3; --echo [on master] connection master; @@ -93,8 +87,6 @@ alter table t_issue1090_3 add c3 int; show create table t_issue1090_3; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_3; --echo [on master] connection master; @@ -102,12 +94,12 @@ drop table t_issue1090_3; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # --echo [on slave] --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; --enable_warnings @@ -118,8 +110,6 @@ create table t_issue1090_4(c1 int,c2 varchar(255)); show create table t_issue1090_4; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_4; --echo [on master] connection master; @@ -127,8 +117,6 @@ alter table t_issue1090_4 DROP COLUMN c2; show create table t_issue1090_4; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_4; --echo [on master] connection master; diff --git a/mysql-test/suite/tianmu/t/issue1111-slave.opt b/mysql-test/suite/tianmu/t/issue1111-slave.opt index f217c0127..0b4d5c77c 100644 --- a/mysql-test/suite/tianmu/t/issue1111-slave.opt +++ b/mysql-test/suite/tianmu/t/issue1111-slave.opt @@ -1 +1,2 @@ ---sql_mode='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR' +--tianmu_mandatory=ON +--tianmu_no_key_error=ON diff --git a/mysql-test/suite/tianmu/t/issue1131.test b/mysql-test/suite/tianmu/t/issue1131.test index 7527f3e72..1d3dc5848 100644 --- a/mysql-test/suite/tianmu/t/issue1131.test +++ b/mysql-test/suite/tianmu/t/issue1131.test @@ -5,15 +5,14 @@ use test; drop table IF EXISTS tmp_table; --enable_warnings --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; --enable_warnings create table t_issue1131(c1 int,c2 varchar(255))engine=innodb; show create table t_issue1131; -show variables like 'sql_mode'; show variables like '%_engine'; alter table t_issue1131 add c3 int; show create table t_issue1131; @@ -29,15 +28,14 @@ drop table tmp_table; --echo # ---echo # sql_mode='MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set tianmu_mandatory=ON; --enable_warnings create table t_issue1131(c1 int,c2 varchar(255))engine=innodb; show create table t_issue1131; -show variables like 'sql_mode'; show variables like '%_engine'; alter table t_issue1131 add c3 int; show create table t_issue1131; @@ -52,16 +50,15 @@ show create table tmp_table; drop table tmp_table; --echo # ---echo # sql_mode='MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # set default_storage_engine=innodb; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set tianmu_mandatory=ON; --enable_warnings set default_storage_engine=innodb; create table t_issue1131(c1 int,c2 varchar(255)); show create table t_issue1131; -show variables like 'sql_mode'; show variables like '%_engine'; alter table t_issue1131 add c3 int; show create table t_issue1131; @@ -76,16 +73,15 @@ show create table tmp_table; drop table tmp_table; --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # --echo [on slave] --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; --enable_warnings create table t_issue1131(c1 int,c2 varchar(255)); show create table t_issue1131; -show variables like 'sql_mode'; show variables like '%_engine'; alter table t_issue1131 add c3 int; show create table t_issue1131; diff --git a/mysql-test/suite/tianmu/t/issue1174-slave.opt b/mysql-test/suite/tianmu/t/issue1174-slave.opt index f217c0127..43c6c2ea1 100644 --- a/mysql-test/suite/tianmu/t/issue1174-slave.opt +++ b/mysql-test/suite/tianmu/t/issue1174-slave.opt @@ -1 +1,2 @@ ---sql_mode='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR' +--tianmu_mandatory=ON +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1186-slave.opt b/mysql-test/suite/tianmu/t/issue1186-slave.opt index f217c0127..43c6c2ea1 100644 --- a/mysql-test/suite/tianmu/t/issue1186-slave.opt +++ b/mysql-test/suite/tianmu/t/issue1186-slave.opt @@ -1 +1,2 @@ ---sql_mode='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR' +--tianmu_mandatory=ON +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1325-slave.opt b/mysql-test/suite/tianmu/t/issue1325-slave.opt new file mode 100644 index 000000000..43c6c2ea1 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1325-slave.opt @@ -0,0 +1,2 @@ +--tianmu_mandatory=ON +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1325.test b/mysql-test/suite/tianmu/t/issue1325.test index 998df688c..c0516c2ee 100644 --- a/mysql-test/suite/tianmu/t/issue1325.test +++ b/mysql-test/suite/tianmu/t/issue1325.test @@ -15,14 +15,6 @@ CREATE DATABASE issue1325_test; USE issue1325_test; ---source include/sync_slave_sql_with_master.inc ---echo # on slave: -USE issue1325_test; -show databases; ---disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; ---enable_warnings - --echo # --echo # Secondary INDEX --echo # @@ -40,8 +32,7 @@ show create table ttt; --source include/sync_slave_sql_with_master.inc --echo # on slave: -connection master; ---echo # on master: +USE issue1325_test; show create table ttt; --echo # @@ -62,7 +53,6 @@ show create table xxx; --echo # on slave: show create table xxx; - --echo # --echo # Full-text index --echo # diff --git a/mysql-test/suite/tianmu/t/issue956.test b/mysql-test/suite/tianmu/t/issue956.test index 9994c8fb7..c596999a2 100644 --- a/mysql-test/suite/tianmu/t/issue956.test +++ b/mysql-test/suite/tianmu/t/issue956.test @@ -5,14 +5,14 @@ --enable_warnings --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # default_storage_engine=innodb --echo # --echo [on slave] --source include/sync_slave_sql_with_master.inc set global default_storage_engine=innodb; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] @@ -41,13 +41,13 @@ drop table t_issue956; --echo # ---echo # sql_mode='MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # default_storage_engine=innodb --echo # --echo [on slave] set global default_storage_engine=innodb; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; --enable_warnings --echo [on master] @@ -75,13 +75,13 @@ drop table t_issue956_2; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # default_storage_engine=tianmu --echo # --echo [on slave] set global default_storage_engine=tianmu; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] @@ -110,13 +110,13 @@ drop table t_issue956_3; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # default_storage_engine=tianmu --echo # --echo [on slave] set global default_storage_engine=tianmu; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; --enable_warnings @@ -146,13 +146,13 @@ drop table t_issue956_4; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # default_storage_engine=MyISAM --echo # --echo [on slave] set global default_storage_engine=MyISAM; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql index dd6333073..2dbb48969 100644 --- a/scripts/mysql_system_tables.sql +++ b/scripts/mysql_system_tables.sql @@ -79,7 +79,7 @@ CREATE TABLE IF NOT EXISTS time_zone_transition_type ( Time_zone_id int unsign CREATE TABLE IF NOT EXISTS time_zone_leap_second ( Transition_time bigint signed NOT NULL, Correction int signed NOT NULL, PRIMARY KEY TranTime (Transition_time) ) engine=INNODB STATS_PERSISTENT=0 CHARACTER SET utf8 comment='Leap seconds information for time zones'; -CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob DEFAULT '' NOT NULL, body longblob NOT NULL, definer char(93) collate utf8_bin DEFAULT '' NOT NULL, created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH', 'MANDATORY_TIANMU', 'NO_KEY_ERROR') DEFAULT '' NOT NULL, comment text collate utf8_bin NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db,name,type)) engine=MyISAM character set utf8 comment='Stored Procedures'; +CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob DEFAULT '' NOT NULL, body longblob NOT NULL, definer char(93) collate utf8_bin DEFAULT '' NOT NULL, created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH') DEFAULT '' NOT NULL, comment text collate utf8_bin NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db,name,type)) engine=MyISAM character set utf8 comment='Stored Procedures'; CREATE TABLE IF NOT EXISTS procs_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(32) binary DEFAULT '' NOT NULL, Routine_name char(64) COLLATE utf8_general_ci DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE') NOT NULL, Grantor char(93) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Procedure privileges'; @@ -89,7 +89,7 @@ CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP(6) NOT NULL DEFAULT -- Create slow_log CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), user_host MEDIUMTEXT NOT NULL, query_time TIME(6) NOT NULL, lock_time TIME(6) NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512) NOT NULL, last_insert_id INTEGER NOT NULL, insert_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, sql_text MEDIUMBLOB NOT NULL, thread_id BIGINT(21) UNSIGNED NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"; -CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(93) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH', 'MANDATORY_TIANMU', 'NO_KEY_ERROR') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events'; +CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(93) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events'; CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL, File VARCHAR(255) NOT NULL, epoch BIGINT UNSIGNED NOT NULL, inserts INT UNSIGNED NOT NULL, updates INT UNSIGNED NOT NULL, deletes INT UNSIGNED NOT NULL, schemaops INT UNSIGNED NOT NULL, orig_server_id INT UNSIGNED NOT NULL, orig_epoch BIGINT UNSIGNED NOT NULL, gci INT UNSIGNED NOT NULL, next_position BIGINT UNSIGNED NOT NULL, next_file VARCHAR(255) NOT NULL, PRIMARY KEY(epoch, orig_server_id, orig_epoch)) ENGINE=MYISAM; diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql index e781ddb74..9af709c74 100644 --- a/scripts/mysql_system_tables_fix.sql +++ b/scripts/mysql_system_tables_fix.sql @@ -476,9 +476,7 @@ ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL, 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', - 'PAD_CHAR_TO_FULL_LENGTH', - 'MANDATORY_TIANMU', - 'NO_KEY_ERROR' + 'PAD_CHAR_TO_FULL_LENGTH' ) DEFAULT '' NOT NULL, DEFAULT CHARACTER SET utf8; @@ -598,9 +596,7 @@ ALTER TABLE event MODIFY sql_mode 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', - 'PAD_CHAR_TO_FULL_LENGTH', - 'MANDATORY_TIANMU', - 'NO_KEY_ERROR' + 'PAD_CHAR_TO_FULL_LENGTH' ) DEFAULT '' NOT NULL AFTER on_completion; ALTER TABLE event MODIFY name char(64) CHARACTER SET utf8 NOT NULL default ''; diff --git a/sql/auth/sql_authorization.cc b/sql/auth/sql_authorization.cc index 2874fa0da..a40aa5b93 100644 --- a/sql/auth/sql_authorization.cc +++ b/sql/auth/sql_authorization.cc @@ -4389,10 +4389,10 @@ bool check_fk_parent_table_access(THD *thd, // Return if engine does not support Foreign key Constraint. if (!ha_check_storage_engine_flag(db_type, HTON_SUPPORTS_FOREIGN_KEYS)) { - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; if (db_type == tianmu_hton && - (alter_info->flags & Alter_info::ADD_FOREIGN_KEY) && - (!(sql_mode & MODE_NO_KEY_ERROR))) { + (alter_info->flags & Alter_info::ADD_FOREIGN_KEY) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_FOREIGN_KEY, MYF(0)); return true; } diff --git a/sql/sql_class.h b/sql/sql_class.h index 73e35a69a..bb9204de0 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -179,9 +179,6 @@ enum enum_binlog_format { #define MODE_HIGH_NOT_PRECEDENCE (MODE_NO_AUTO_CREATE_USER*2) #define MODE_NO_ENGINE_SUBSTITUTION (MODE_HIGH_NOT_PRECEDENCE*2) #define MODE_PAD_CHAR_TO_FULL_LENGTH (1ULL << 31) -//Force the engine to be tianmu when acting as a slave library -#define MODE_MANDATORY_TIANMU (1ULL << 32) -#define MODE_NO_KEY_ERROR (1ULL << 33) /* Replication uses 8 bytes to store SQL_MODE in the binary log. The day you @@ -584,6 +581,17 @@ typedef struct system_variables 'COLUMN_TYPE' field. */ my_bool show_old_temporals; + + /* + Specifies whether to enable mandatory Tianmu engine in table. + if yes ,set tianmu_mandatory to ON, otherwise set the variable to OFF. + */ + my_bool tianmu_mandatory; + /* + Specifies whether to to directly skip DDL statements that are not supported by the SQL layer, + instead of reporting errors. if yes ,set tianmu_no_key_error to ON, otherwise set the variable to OFF. + */ + my_bool tianmu_no_key_error; } SV; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e486cfc89..a5a4f7483 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2774,18 +2774,14 @@ mysql_execute_command(THD *thd, bool first_level) if (!thd->in_sub_stmt) thd->query_plan.set_query_plan(lex->sql_command, lex, !thd->stmt_arena->is_conventional()); - /* - the (sql_mode) of (MANDATORY_TIANMU) is set, - the engine will be forcibly converted to the tianmu engine. - */ + if(lex && ((lex->sql_command == SQLCOM_CREATE_TABLE) || (lex->sql_command == SQLCOM_ALTER_TABLE)) && !(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE)){ - sql_mode_t sql_mode = thd->variables.sql_mode; - if(thd->slave_thread) sql_mode = global_system_variables.sql_mode; - if(sql_mode & MODE_MANDATORY_TIANMU){ + my_bool tianmu_mandatory = thd->slave_thread ? global_system_variables.tianmu_mandatory : thd->variables.tianmu_mandatory; + if(tianmu_mandatory){ lex->create_info.db_type = ha_default_handlerton(thd); old_db_type = lex->create_info.db_type->db_type; lex->create_info.db_type->db_type = DB_TYPE_TIANMU; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index db9000529..f55c3877e 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -3933,17 +3933,16 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, } (*key_count)++; tmp=file->max_key_parts(); - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; if ((create_info->db_type->db_type == DB_TYPE_TIANMU)) { if ((file->ha_table_flags() & HA_NON_SECONDARY_KEY) && - (key->type == KEYTYPE_MULTIPLE) && - !(sql_mode & MODE_NO_KEY_ERROR)) { + (key->type == KEYTYPE_MULTIPLE) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_SECONDARY_INDEX, MYF(0)); DBUG_RETURN(TRUE); } if ((file->ha_table_flags() & HA_NON_UNIQUE_KEY) && - (key->type == KEYTYPE_UNIQUE) && - (!(sql_mode & MODE_NO_KEY_ERROR))) { + (key->type == KEYTYPE_UNIQUE) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_UNIQUE_INDEX, MYF(0)); DBUG_RETURN(TRUE); } @@ -4081,8 +4080,9 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, DBUG_RETURN(TRUE); } if (create_info->db_type->db_type == DB_TYPE_TIANMU){ - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; - if(!(sql_mode & MODE_NO_KEY_ERROR)) { + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; + if(!tianmu_no_key_error) { my_message(ER_TIANMU_NOT_SUPPORTED_FULLTEXT_INDEX, ER(ER_TIANMU_NOT_SUPPORTED_FULLTEXT_INDEX), MYF(0)); DBUG_RETURN(TRUE); @@ -8318,9 +8318,9 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, !my_strcasecmp(system_charset_info,key_name, drop->name)) { // for issue 1342 and 1343, if sql_mode does not contains NO_KEY_ERROR, // drop unique key, sencondary index, and fulltext index will return an error. - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; - if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && - !(sql_mode & MODE_NO_KEY_ERROR)) { + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; + if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && !tianmu_no_key_error) { if (key_info->flags & HA_SPATIAL){ //key_type= KEYTYPE_SPATIAL; //do nothing @@ -8524,12 +8524,12 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, // Now this contains only DROP for foreign keys and not-found objects Alter_drop *drop; drop_it.rewind(); - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; while ((drop=drop_it++)) { switch (drop->type) { case Alter_drop::KEY: - if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && - (!(sql_mode & MODE_NO_KEY_ERROR))) { + if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_FOUND_INDEX, MYF(0)); goto err; } @@ -8539,8 +8539,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, alter_info->drop_list.head()->name); goto err; case Alter_drop::FOREIGN_KEY: - if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && - (!(sql_mode & MODE_NO_KEY_ERROR))) { + if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_FOREIGN_KEY, MYF(0)); } break; @@ -8555,8 +8554,9 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, if (rename_key_list.elements) { if (create_info->db_type->db_type == DB_TYPE_TIANMU){ - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; - if(!(sql_mode & MODE_NO_KEY_ERROR)){ + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; + if(!tianmu_no_key_error){ my_error(ER_TIANMU_NOT_FOUND_INDEX, MYF(0)); goto err; } diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index 8388c8ce2..aeeab2cca 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -227,8 +227,9 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create) table= tables->table; table->pos_in_table_list= tables; if ((table->file && table->file->ht == tianmu_hton)){ - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; - if(!(sql_mode & MODE_NO_KEY_ERROR)) { + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; + if(!tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_TRIGGER, MYF(0)); goto end; } diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 452b2481c..c7889092a 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3904,7 +3904,7 @@ static const char *sql_mode_names[]= "STRICT_ALL_TABLES", "NO_ZERO_IN_DATE", "NO_ZERO_DATE", "ALLOW_INVALID_DATES", "ERROR_FOR_DIVISION_BY_ZERO", "TRADITIONAL", "NO_AUTO_CREATE_USER", "HIGH_NOT_PRECEDENCE", "NO_ENGINE_SUBSTITUTION", - "PAD_CHAR_TO_FULL_LENGTH", "MANDATORY_TIANMU", "NO_KEY_ERROR", + "PAD_CHAR_TO_FULL_LENGTH", 0 }; export bool sql_mode_string_representation(THD *thd, sql_mode_t sql_mode, @@ -5996,6 +5996,26 @@ static Sys_var_mybool Sys_show_old_temporals( ON_CHECK(0), ON_UPDATE(0), DEPRECATED_VAR("")); +static Sys_var_mybool Sys_tianmu_mandatory( + "tianmu_mandatory", + "Specifies whether to enable mandatory Tianmu engine in table." + "if yes ,set tianmu_mandatory to ON, otherwise set the variable to OFF.", + SESSION_VAR(tianmu_mandatory), + CMD_LINE(OPT_ARG, OPT_SHOW_OLD_TEMPORALS), + DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, + ON_CHECK(0), ON_UPDATE(0), + DEPRECATED_VAR("")); + +static Sys_var_mybool Sys_tianmu_no_key_error( + "tianmu_no_key_error", + "Specifies whether to to directly skip DDL statements that are not supported by the SQL layer," + "instead of reporting errors. if yes ,set tianmu_no_key_error to ON, otherwise set the variable to OFF.", + SESSION_VAR(tianmu_no_key_error), + CMD_LINE(OPT_ARG, OPT_SHOW_OLD_TEMPORALS), + DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, + ON_CHECK(0), ON_UPDATE(0), + DEPRECATED_VAR("")); + static Sys_var_charptr Sys_disabled_storage_engines( "disabled_storage_engines", "Limit CREATE TABLE for the storage engines listed", diff --git a/storage/tianmu/handler/ha_tianmu.cpp b/storage/tianmu/handler/ha_tianmu.cpp index 93ab41786..08b2896bc 100644 --- a/storage/tianmu/handler/ha_tianmu.cpp +++ b/storage/tianmu/handler/ha_tianmu.cpp @@ -1570,13 +1570,14 @@ enum_alter_inplace_result ha_tianmu::check_if_supported_inplace_alter([[maybe_un ha_alter_info->handler_flags & Alter_inplace_info::DROP_PK_INDEX) DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); // support alter table: mix add/drop key - sql_mode_t sql_mode = ha_thd()->slave_thread ? global_system_variables.sql_mode : ha_thd()->variables.sql_mode; + my_bool tianmu_no_key_error = + ha_thd()->slave_thread ? global_system_variables.tianmu_no_key_error : ha_thd()->variables.tianmu_no_key_error; if ((ha_alter_info->handler_flags & Alter_inplace_info::ADD_INDEX || ha_alter_info->handler_flags & Alter_inplace_info::DROP_INDEX || ha_alter_info->handler_flags & Alter_inplace_info::ADD_UNIQUE_INDEX || ha_alter_info->handler_flags & Alter_inplace_info::RENAME_INDEX || ha_alter_info->handler_flags & Alter_inplace_info::DROP_UNIQUE_INDEX) && - (sql_mode & MODE_NO_KEY_ERROR)) + tianmu_no_key_error) DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); DBUG_RETURN(HA_ALTER_ERROR);