summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKentoku <kentokushiba@gmail.com>2019-02-22 13:11:08 +0900
committerKentoku <kentokushiba@gmail.com>2019-02-26 07:03:25 +0900
commit4d37898f2d1d330e28756d5a9f4e75acbb0db508 (patch)
tree6c3b9925b218968ce3a6b9fef0de0d6e155c9ee4
parentc511453f2ff22addde52e4fda3795755f52a5a77 (diff)
downloadmariadb-git-4d37898f2d1d330e28756d5a9f4e75acbb0db508.tar.gz
MDEV-16967 Spider CREATE TABLE Pushdown
For preparing pushdown, please see mysql-test/spider/feature/include/rewrite_*_init.inc
-rw-r--r--storage/spider/CMakeLists.txt2
-rw-r--r--storage/spider/ha_spider.cc3
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_deinit.inc20
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_init.inc51
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_deinit.inc20
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_init.inc51
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_deinit.inc20
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_init.inc51
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_deinit.inc20
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_init.inc51
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_deinit.inc19
-rw-r--r--storage/spider/mysql-test/spider/bugfix/include/quick_mode_init.inc50
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/quick_mode_0.result2
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/quick_mode_1.result2
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/quick_mode_2.result2
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/quick_mode_3.result2
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode.cnf4
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode.inc152
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.cnf5
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.test153
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.cnf5
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.test153
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.cnf5
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.test153
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.cnf5
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.test154
-rw-r--r--storage/spider/mysql-test/spider/feature/include/rewrite_deinit.inc7
-rw-r--r--storage/spider/mysql-test/spider/feature/include/rewrite_init.inc9
-rw-r--r--storage/spider/mysql-test/spider/feature/include/rewrite_partition_deinit.inc1
-rw-r--r--storage/spider/mysql-test/spider/feature/include/rewrite_partition_init.inc16
-rw-r--r--storage/spider/mysql-test/spider/feature/include/rewrite_simple_deinit.inc1
-rw-r--r--storage/spider/mysql-test/spider/feature/include/rewrite_simple_init.inc12
-rw-r--r--storage/spider/mysql-test/spider/feature/include/rewrite_subpartition_deinit.inc1
-rw-r--r--storage/spider/mysql-test/spider/feature/include/rewrite_subpartition_init.inc23
-rw-r--r--storage/spider/mysql-test/spider/feature/my.cnf2
-rw-r--r--storage/spider/mysql-test/spider/feature/my_1_1.cnf44
-rw-r--r--storage/spider/mysql-test/spider/feature/my_2_1.cnf56
-rw-r--r--storage/spider/mysql-test/spider/feature/my_2_2.cnf38
-rw-r--r--storage/spider/mysql-test/spider/feature/my_2_3.cnf8
-rw-r--r--storage/spider/mysql-test/spider/feature/my_3_1.cnf11
-rw-r--r--storage/spider/mysql-test/spider/feature/my_3_2.cnf9
-rw-r--r--storage/spider/mysql-test/spider/feature/my_3_3.cnf9
-rw-r--r--storage/spider/mysql-test/spider/feature/my_4_1.cnf9
-rw-r--r--storage/spider/mysql-test/spider/feature/r/rewrite_partition.result130
-rw-r--r--storage/spider/mysql-test/spider/feature/r/rewrite_simple.result112
-rw-r--r--storage/spider/mysql-test/spider/feature/r/rewrite_subpartition.result160
-rw-r--r--storage/spider/mysql-test/spider/feature/suite.opt1
-rw-r--r--storage/spider/mysql-test/spider/feature/suite.pm12
-rw-r--r--storage/spider/mysql-test/spider/feature/t/rewrite.inc60
-rw-r--r--storage/spider/mysql-test/spider/feature/t/rewrite_partition.cnf3
-rw-r--r--storage/spider/mysql-test/spider/feature/t/rewrite_partition.test12
-rw-r--r--storage/spider/mysql-test/spider/feature/t/rewrite_simple.cnf3
-rw-r--r--storage/spider/mysql-test/spider/feature/t/rewrite_simple.test7
-rw-r--r--storage/spider/mysql-test/spider/feature/t/rewrite_subpartition.cnf3
-rw-r--r--storage/spider/mysql-test/spider/feature/t/rewrite_subpartition.test12
-rw-r--r--storage/spider/mysql-test/spider/include/checksum_table_with_quick_mode_3_deinit.inc2
-rw-r--r--storage/spider/mysql-test/spider/include/deinit_spider.inc30
-rw-r--r--storage/spider/mysql-test/spider/include/init_spider.inc76
-rw-r--r--storage/spider/mysql-test/spider/r/show_system_tables.result5
-rw-r--r--storage/spider/scripts/install_spider.sql92
-rw-r--r--storage/spider/spd_db_conn.cc47
-rw-r--r--storage/spider/spd_db_handlersocket.cc14
-rw-r--r--storage/spider/spd_db_handlersocket.h7
-rw-r--r--storage/spider/spd_db_include.cc3791
-rw-r--r--storage/spider/spd_db_include.h145
-rw-r--r--storage/spider/spd_db_mysql.cc221
-rw-r--r--storage/spider/spd_db_mysql.h50
-rw-r--r--storage/spider/spd_db_oracle.cc125
-rw-r--r--storage/spider/spd_db_oracle.h20
-rw-r--r--storage/spider/spd_environ.h8
-rw-r--r--storage/spider/spd_err.h12
-rw-r--r--storage/spider/spd_include.h56
-rw-r--r--storage/spider/spd_param.cc15
-rw-r--r--storage/spider/spd_parse.cc1058
-rw-r--r--storage/spider/spd_parse.h145
-rw-r--r--storage/spider/spd_rewrite.cc2074
-rw-r--r--storage/spider/spd_rewrite.h148
-rw-r--r--storage/spider/spd_sys_table.cc606
-rw-r--r--storage/spider/spd_sys_table.h96
-rw-r--r--storage/spider/spd_table.cc98
-rw-r--r--storage/spider/spd_table.h10
-rw-r--r--storage/spider/spd_udf.cc25
-rw-r--r--storage/spider/spd_udf.def3
-rw-r--r--storage/spider/spd_udf.h7
84 files changed, 9943 insertions, 969 deletions
diff --git a/storage/spider/CMakeLists.txt b/storage/spider/CMakeLists.txt
index 62dfc968579..7c0cbdd2b38 100644
--- a/storage/spider/CMakeLists.txt
+++ b/storage/spider/CMakeLists.txt
@@ -18,7 +18,7 @@ SET(SPIDER_SOURCES
spd_table.cc spd_direct_sql.cc spd_udf.cc spd_ping_table.cc
spd_copy_tables.cc spd_i_s.cc spd_malloc.cc ha_spider.cc spd_udf.def
spd_db_mysql.cc spd_db_handlersocket.cc spd_db_oracle.cc
- spd_group_by_handler.cc spd_db_include.cc
+ spd_group_by_handler.cc spd_db_include.cc spd_parse.cc spd_rewrite.cc
hs_client/config.cpp hs_client/escape.cpp hs_client/fatal.cpp
hs_client/hstcpcli.cpp hs_client/socket.cpp hs_client/string_util.cpp
)
diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc
index a5fc3345ea3..d10dcd98660 100644
--- a/storage/spider/ha_spider.cc
+++ b/storage/spider/ha_spider.cc
@@ -9400,6 +9400,9 @@ ulonglong ha_spider::table_flags() const
#ifdef HA_SLOW_CMP_REF
HA_SLOW_CMP_REF |
#endif
+#ifdef HA_CMP_REF_IS_EXPENSIVE
+ HA_CMP_REF_IS_EXPENSIVE |
+#endif
#ifdef SPIDER_ENGINE_CONDITION_PUSHDOWN_IS_ALWAYS_ON
HA_CAN_TABLE_CONDITION_PUSHDOWN |
#endif
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_deinit.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_deinit.inc
index 42124a794ea..b3cab9f05c6 100644
--- a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_deinit.inc
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_deinit.inc
@@ -1,19 +1 @@
---let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
---let $MASTER_1_COMMENT_2_2= $MASTER_1_COMMENT_2_2_BACKUP
---let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
---let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
---let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
---let $CHILD2_2_DROP_TABLES= $CHILD2_2_DROP_TABLES_BACKUP
---let $CHILD2_2_CREATE_TABLES= $CHILD2_2_CREATE_TABLES_BACKUP
---let $CHILD2_2_SELECT_TABLES= $CHILD2_2_SELECT_TABLES_BACKUP
---connection master_1
-set session spider_quick_mode= @old_spider_quick_mode;
-set session spider_quick_page_size= @old_spider_quick_page_size;
-set session spider_quick_page_byte= @old_spider_quick_page_byte;
---disable_warnings
---disable_query_log
---disable_result_log
---source ../t/test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
+--source quick_mode_deinit.inc
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_init.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_init.inc
index 2656517216c..3395fa98152 100644
--- a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_init.inc
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_0_init.inc
@@ -1,51 +1,2 @@
---disable_warnings
---disable_query_log
---disable_result_log
---source ../t/test_init.inc
---enable_result_log
---enable_query_log
---enable_warnings
---let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
-let $MASTER_1_COMMENT_2_1=
- COMMENT='table "tbl_a", srv "s_2_1"';
---let $MASTER_1_COMMENT_2_2_BACKUP= $MASTER_1_COMMENT_2_2
-let $MASTER_1_COMMENT_2_2=
- COMMENT='table "tbl_b", srv "s_2_2"';
---let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
-let $CHILD2_1_DROP_TABLES=
- DROP TABLE IF EXISTS tbl_a;
---let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
-let $CHILD2_1_CREATE_TABLES=
- CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
---let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
-let $CHILD2_1_SELECT_TABLES=
- SELECT pkey FROM tbl_a ORDER BY pkey;
-let $CHILD2_1_SELECT_ARGUMENT1=
- SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
---let $CHILD2_2_DROP_TABLES_BACKUP= $CHILD2_2_DROP_TABLES
-let $CHILD2_2_DROP_TABLES=
- DROP TABLE IF EXISTS tbl_b;
---let $CHILD2_2_CREATE_TABLES_BACKUP= $CHILD2_2_CREATE_TABLES
-let $CHILD2_2_CREATE_TABLES=
- CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
---let $CHILD2_2_SELECT_TABLES_BACKUP= $CHILD2_2_SELECT_TABLES
-let $CHILD2_2_SELECT_TABLES=
- SELECT pkey FROM tbl_b ORDER BY pkey;
-let $CHILD2_2_SELECT_ARGUMENT1=
- SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
---connection master_1
-set @old_spider_quick_mode= @@spider_quick_mode;
+--source quick_mode_init.inc
set session spider_quick_mode= 0;
-set @old_spider_quick_page_size= @@spider_quick_page_size;
-set session spider_quick_page_size= 3;
-set @old_spider_quick_page_byte= @@spider_quick_page_byte;
-let $MASTER_1_SET_QUICK_PAGE_BYTE_6=
- set session spider_quick_page_byte= 6;
-let $MASTER_1_SET_QUICK_PAGE_BYTE_0=
- set session spider_quick_page_byte= 0;
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_deinit.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_deinit.inc
index 42124a794ea..b3cab9f05c6 100644
--- a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_deinit.inc
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_deinit.inc
@@ -1,19 +1 @@
---let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
---let $MASTER_1_COMMENT_2_2= $MASTER_1_COMMENT_2_2_BACKUP
---let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
---let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
---let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
---let $CHILD2_2_DROP_TABLES= $CHILD2_2_DROP_TABLES_BACKUP
---let $CHILD2_2_CREATE_TABLES= $CHILD2_2_CREATE_TABLES_BACKUP
---let $CHILD2_2_SELECT_TABLES= $CHILD2_2_SELECT_TABLES_BACKUP
---connection master_1
-set session spider_quick_mode= @old_spider_quick_mode;
-set session spider_quick_page_size= @old_spider_quick_page_size;
-set session spider_quick_page_byte= @old_spider_quick_page_byte;
---disable_warnings
---disable_query_log
---disable_result_log
---source ../t/test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
+--source quick_mode_deinit.inc
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_init.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_init.inc
index 9a8de407569..9fb44470c50 100644
--- a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_init.inc
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_1_init.inc
@@ -1,51 +1,2 @@
---disable_warnings
---disable_query_log
---disable_result_log
---source ../t/test_init.inc
---enable_result_log
---enable_query_log
---enable_warnings
---let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
-let $MASTER_1_COMMENT_2_1=
- COMMENT='table "tbl_a", srv "s_2_1"';
---let $MASTER_1_COMMENT_2_2_BACKUP= $MASTER_1_COMMENT_2_2
-let $MASTER_1_COMMENT_2_2=
- COMMENT='table "tbl_b", srv "s_2_2"';
---let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
-let $CHILD2_1_DROP_TABLES=
- DROP TABLE IF EXISTS tbl_a;
---let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
-let $CHILD2_1_CREATE_TABLES=
- CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
---let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
-let $CHILD2_1_SELECT_TABLES=
- SELECT pkey FROM tbl_a ORDER BY pkey;
-let $CHILD2_1_SELECT_ARGUMENT1=
- SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
---let $CHILD2_2_DROP_TABLES_BACKUP= $CHILD2_2_DROP_TABLES
-let $CHILD2_2_DROP_TABLES=
- DROP TABLE IF EXISTS tbl_b;
---let $CHILD2_2_CREATE_TABLES_BACKUP= $CHILD2_2_CREATE_TABLES
-let $CHILD2_2_CREATE_TABLES=
- CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
---let $CHILD2_2_SELECT_TABLES_BACKUP= $CHILD2_2_SELECT_TABLES
-let $CHILD2_2_SELECT_TABLES=
- SELECT pkey FROM tbl_b ORDER BY pkey;
-let $CHILD2_2_SELECT_ARGUMENT1=
- SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
---connection master_1
-set @old_spider_quick_mode= @@spider_quick_mode;
+--source quick_mode_init.inc
set session spider_quick_mode= 1;
-set @old_spider_quick_page_size= @@spider_quick_page_size;
-set session spider_quick_page_size= 3;
-set @old_spider_quick_page_byte= @@spider_quick_page_byte;
-let $MASTER_1_SET_QUICK_PAGE_BYTE_6=
- set session spider_quick_page_byte= 6;
-let $MASTER_1_SET_QUICK_PAGE_BYTE_0=
- set session spider_quick_page_byte= 0;
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_deinit.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_deinit.inc
index 42124a794ea..b3cab9f05c6 100644
--- a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_deinit.inc
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_deinit.inc
@@ -1,19 +1 @@
---let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
---let $MASTER_1_COMMENT_2_2= $MASTER_1_COMMENT_2_2_BACKUP
---let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
---let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
---let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
---let $CHILD2_2_DROP_TABLES= $CHILD2_2_DROP_TABLES_BACKUP
---let $CHILD2_2_CREATE_TABLES= $CHILD2_2_CREATE_TABLES_BACKUP
---let $CHILD2_2_SELECT_TABLES= $CHILD2_2_SELECT_TABLES_BACKUP
---connection master_1
-set session spider_quick_mode= @old_spider_quick_mode;
-set session spider_quick_page_size= @old_spider_quick_page_size;
-set session spider_quick_page_byte= @old_spider_quick_page_byte;
---disable_warnings
---disable_query_log
---disable_result_log
---source ../t/test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
+--source quick_mode_deinit.inc
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_init.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_init.inc
index dbe3f703a2f..78057b1dd28 100644
--- a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_init.inc
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_2_init.inc
@@ -1,51 +1,2 @@
---disable_warnings
---disable_query_log
---disable_result_log
---source ../t/test_init.inc
---enable_result_log
---enable_query_log
---enable_warnings
---let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
-let $MASTER_1_COMMENT_2_1=
- COMMENT='table "tbl_a", srv "s_2_1"';
---let $MASTER_1_COMMENT_2_2_BACKUP= $MASTER_1_COMMENT_2_2
-let $MASTER_1_COMMENT_2_2=
- COMMENT='table "tbl_b", srv "s_2_2"';
---let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
-let $CHILD2_1_DROP_TABLES=
- DROP TABLE IF EXISTS tbl_a;
---let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
-let $CHILD2_1_CREATE_TABLES=
- CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
---let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
-let $CHILD2_1_SELECT_TABLES=
- SELECT pkey FROM tbl_a ORDER BY pkey;
-let $CHILD2_1_SELECT_ARGUMENT1=
- SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
---let $CHILD2_2_DROP_TABLES_BACKUP= $CHILD2_2_DROP_TABLES
-let $CHILD2_2_DROP_TABLES=
- DROP TABLE IF EXISTS tbl_b;
---let $CHILD2_2_CREATE_TABLES_BACKUP= $CHILD2_2_CREATE_TABLES
-let $CHILD2_2_CREATE_TABLES=
- CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
---let $CHILD2_2_SELECT_TABLES_BACKUP= $CHILD2_2_SELECT_TABLES
-let $CHILD2_2_SELECT_TABLES=
- SELECT pkey FROM tbl_b ORDER BY pkey;
-let $CHILD2_2_SELECT_ARGUMENT1=
- SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
---connection master_1
-set @old_spider_quick_mode= @@spider_quick_mode;
+--source quick_mode_init.inc
set session spider_quick_mode= 2;
-set @old_spider_quick_page_size= @@spider_quick_page_size;
-set session spider_quick_page_size= 3;
-set @old_spider_quick_page_byte= @@spider_quick_page_byte;
-let $MASTER_1_SET_QUICK_PAGE_BYTE_6=
- set session spider_quick_page_byte= 6;
-let $MASTER_1_SET_QUICK_PAGE_BYTE_0=
- set session spider_quick_page_byte= 0;
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_deinit.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_deinit.inc
index 42124a794ea..b3cab9f05c6 100644
--- a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_deinit.inc
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_deinit.inc
@@ -1,19 +1 @@
---let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
---let $MASTER_1_COMMENT_2_2= $MASTER_1_COMMENT_2_2_BACKUP
---let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
---let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
---let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
---let $CHILD2_2_DROP_TABLES= $CHILD2_2_DROP_TABLES_BACKUP
---let $CHILD2_2_CREATE_TABLES= $CHILD2_2_CREATE_TABLES_BACKUP
---let $CHILD2_2_SELECT_TABLES= $CHILD2_2_SELECT_TABLES_BACKUP
---connection master_1
-set session spider_quick_mode= @old_spider_quick_mode;
-set session spider_quick_page_size= @old_spider_quick_page_size;
-set session spider_quick_page_byte= @old_spider_quick_page_byte;
---disable_warnings
---disable_query_log
---disable_result_log
---source ../t/test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
+--source quick_mode_deinit.inc
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_init.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_init.inc
index 81239206dfc..2ae2e95089d 100644
--- a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_init.inc
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_3_init.inc
@@ -1,51 +1,2 @@
---disable_warnings
---disable_query_log
---disable_result_log
---source ../t/test_init.inc
---enable_result_log
---enable_query_log
---enable_warnings
---let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
-let $MASTER_1_COMMENT_2_1=
- COMMENT='table "tbl_a", srv "s_2_1"';
---let $MASTER_1_COMMENT_2_2_BACKUP= $MASTER_1_COMMENT_2_2
-let $MASTER_1_COMMENT_2_2=
- COMMENT='table "tbl_b", srv "s_2_2"';
---let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
-let $CHILD2_1_DROP_TABLES=
- DROP TABLE IF EXISTS tbl_a;
---let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
-let $CHILD2_1_CREATE_TABLES=
- CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
---let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
-let $CHILD2_1_SELECT_TABLES=
- SELECT pkey FROM tbl_a ORDER BY pkey;
-let $CHILD2_1_SELECT_ARGUMENT1=
- SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
---let $CHILD2_2_DROP_TABLES_BACKUP= $CHILD2_2_DROP_TABLES
-let $CHILD2_2_DROP_TABLES=
- DROP TABLE IF EXISTS tbl_b;
---let $CHILD2_2_CREATE_TABLES_BACKUP= $CHILD2_2_CREATE_TABLES
-let $CHILD2_2_CREATE_TABLES=
- CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
---let $CHILD2_2_SELECT_TABLES_BACKUP= $CHILD2_2_SELECT_TABLES
-let $CHILD2_2_SELECT_TABLES=
- SELECT pkey FROM tbl_b ORDER BY pkey;
-let $CHILD2_2_SELECT_ARGUMENT1=
- SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
---connection master_1
-set @old_spider_quick_mode= @@spider_quick_mode;
+--source quick_mode_init.inc
set session spider_quick_mode= 3;
-set @old_spider_quick_page_size= @@spider_quick_page_size;
-set session spider_quick_page_size= 3;
-set @old_spider_quick_page_byte= @@spider_quick_page_byte;
-let $MASTER_1_SET_QUICK_PAGE_BYTE_6=
- set session spider_quick_page_byte= 6;
-let $MASTER_1_SET_QUICK_PAGE_BYTE_0=
- set session spider_quick_page_byte= 0;
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_deinit.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_deinit.inc
new file mode 100644
index 00000000000..42124a794ea
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_deinit.inc
@@ -0,0 +1,19 @@
+--let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
+--let $MASTER_1_COMMENT_2_2= $MASTER_1_COMMENT_2_2_BACKUP
+--let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
+--let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
+--let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
+--let $CHILD2_2_DROP_TABLES= $CHILD2_2_DROP_TABLES_BACKUP
+--let $CHILD2_2_CREATE_TABLES= $CHILD2_2_CREATE_TABLES_BACKUP
+--let $CHILD2_2_SELECT_TABLES= $CHILD2_2_SELECT_TABLES_BACKUP
+--connection master_1
+set session spider_quick_mode= @old_spider_quick_mode;
+set session spider_quick_page_size= @old_spider_quick_page_size;
+set session spider_quick_page_byte= @old_spider_quick_page_byte;
+--disable_warnings
+--disable_query_log
+--disable_result_log
+--source ../t/test_deinit.inc
+--enable_result_log
+--enable_query_log
+--enable_warnings
diff --git a/storage/spider/mysql-test/spider/bugfix/include/quick_mode_init.inc b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_init.inc
new file mode 100644
index 00000000000..dfab595cd7c
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/include/quick_mode_init.inc
@@ -0,0 +1,50 @@
+--disable_warnings
+--disable_query_log
+--disable_result_log
+--source ../t/test_init.inc
+--enable_result_log
+--enable_query_log
+--enable_warnings
+--let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
+let $MASTER_1_COMMENT_2_1=
+ COMMENT='table "tbl_a", srv "s_2_1"';
+--let $MASTER_1_COMMENT_2_2_BACKUP= $MASTER_1_COMMENT_2_2
+let $MASTER_1_COMMENT_2_2=
+ COMMENT='table "tbl_b", srv "s_2_2"';
+--let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
+let $CHILD2_1_DROP_TABLES=
+ DROP TABLE IF EXISTS tbl_a;
+--let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
+let $CHILD2_1_CREATE_TABLES=
+ CREATE TABLE tbl_a (
+ pkey int NOT NULL,
+ PRIMARY KEY (pkey)
+ ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
+--let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
+let $CHILD2_1_SELECT_TABLES=
+ SELECT pkey FROM tbl_a ORDER BY pkey;
+let $CHILD2_1_SELECT_ARGUMENT1=
+ SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
+--let $CHILD2_2_DROP_TABLES_BACKUP= $CHILD2_2_DROP_TABLES
+let $CHILD2_2_DROP_TABLES=
+ DROP TABLE IF EXISTS tbl_b;
+--let $CHILD2_2_CREATE_TABLES_BACKUP= $CHILD2_2_CREATE_TABLES
+let $CHILD2_2_CREATE_TABLES=
+ CREATE TABLE tbl_b (
+ pkey int NOT NULL,
+ PRIMARY KEY (pkey)
+ ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
+--let $CHILD2_2_SELECT_TABLES_BACKUP= $CHILD2_2_SELECT_TABLES
+let $CHILD2_2_SELECT_TABLES=
+ SELECT pkey FROM tbl_b ORDER BY pkey;
+let $CHILD2_2_SELECT_ARGUMENT1=
+ SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
+--connection master_1
+set @old_spider_quick_mode= @@spider_quick_mode;
+set @old_spider_quick_page_size= @@spider_quick_page_size;
+set session spider_quick_page_size= 3;
+set @old_spider_quick_page_byte= @@spider_quick_page_byte;
+let $MASTER_1_SET_QUICK_PAGE_BYTE_6=
+ set session spider_quick_page_byte= 6;
+let $MASTER_1_SET_QUICK_PAGE_BYTE_0=
+ set session spider_quick_page_byte= 0;
diff --git a/storage/spider/mysql-test/spider/bugfix/r/quick_mode_0.result b/storage/spider/mysql-test/spider/bugfix/r/quick_mode_0.result
index 6e5a0052370..52040a3120f 100644
--- a/storage/spider/mysql-test/spider/bugfix/r/quick_mode_0.result
+++ b/storage/spider/mysql-test/spider/bugfix/r/quick_mode_0.result
@@ -6,10 +6,10 @@ child2_3
for child3
connection master_1;
set @old_spider_quick_mode= @@spider_quick_mode;
-set session spider_quick_mode= 0;
set @old_spider_quick_page_size= @@spider_quick_page_size;
set session spider_quick_page_size= 3;
set @old_spider_quick_page_byte= @@spider_quick_page_byte;
+set session spider_quick_mode= 0;
this test is for MDEV-16520
diff --git a/storage/spider/mysql-test/spider/bugfix/r/quick_mode_1.result b/storage/spider/mysql-test/spider/bugfix/r/quick_mode_1.result
index bca6d172a49..96077cffc90 100644
--- a/storage/spider/mysql-test/spider/bugfix/r/quick_mode_1.result
+++ b/storage/spider/mysql-test/spider/bugfix/r/quick_mode_1.result
@@ -6,10 +6,10 @@ child2_3
for child3
connection master_1;
set @old_spider_quick_mode= @@spider_quick_mode;
-set session spider_quick_mode= 1;
set @old_spider_quick_page_size= @@spider_quick_page_size;
set session spider_quick_page_size= 3;
set @old_spider_quick_page_byte= @@spider_quick_page_byte;
+set session spider_quick_mode= 1;
this test is for MDEV-16520
diff --git a/storage/spider/mysql-test/spider/bugfix/r/quick_mode_2.result b/storage/spider/mysql-test/spider/bugfix/r/quick_mode_2.result
index 61a7764dddb..7a29c136f2a 100644
--- a/storage/spider/mysql-test/spider/bugfix/r/quick_mode_2.result
+++ b/storage/spider/mysql-test/spider/bugfix/r/quick_mode_2.result
@@ -6,10 +6,10 @@ child2_3
for child3
connection master_1;
set @old_spider_quick_mode= @@spider_quick_mode;
-set session spider_quick_mode= 2;
set @old_spider_quick_page_size= @@spider_quick_page_size;
set session spider_quick_page_size= 3;
set @old_spider_quick_page_byte= @@spider_quick_page_byte;
+set session spider_quick_mode= 2;
this test is for MDEV-16520
diff --git a/storage/spider/mysql-test/spider/bugfix/r/quick_mode_3.result b/storage/spider/mysql-test/spider/bugfix/r/quick_mode_3.result
index 38387a45509..e0c3ca1e07c 100644
--- a/storage/spider/mysql-test/spider/bugfix/r/quick_mode_3.result
+++ b/storage/spider/mysql-test/spider/bugfix/r/quick_mode_3.result
@@ -6,10 +6,10 @@ child2_3
for child3
connection master_1;
set @old_spider_quick_mode= @@spider_quick_mode;
-set session spider_quick_mode= 3;
set @old_spider_quick_page_size= @@spider_quick_page_size;
set session spider_quick_page_size= 3;
set @old_spider_quick_page_byte= @@spider_quick_page_byte;
+set session spider_quick_mode= 3;
this test is for MDEV-16520
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode.cnf b/storage/spider/mysql-test/spider/bugfix/t/quick_mode.cnf
new file mode 100644
index 00000000000..e0ffb99c38e
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode.cnf
@@ -0,0 +1,4 @@
+!include include/default_mysqld.cnf
+!include ../my_1_1.cnf
+!include ../my_2_1.cnf
+!include ../my_2_2.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode.inc b/storage/spider/mysql-test/spider/bugfix/t/quick_mode.inc
new file mode 100644
index 00000000000..592fc444ee6
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode.inc
@@ -0,0 +1,152 @@
+--echo
+--echo this test is for MDEV-16520
+--echo
+--echo drop and create databases
+--connection master_1
+--disable_warnings
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+
+--connection child2_1
+SET @old_log_output = @@global.log_output;
+SET GLOBAL log_output = 'TABLE,FILE';
+CREATE DATABASE auto_test_remote;
+USE auto_test_remote;
+
+--connection child2_2
+SET @old_log_output = @@global.log_output;
+SET GLOBAL log_output = 'TABLE,FILE';
+CREATE DATABASE auto_test_remote2;
+USE auto_test_remote2;
+--enable_warnings
+
+--echo
+--echo create table and insert
+
+--connection child2_1
+--disable_query_log
+echo CHILD2_1_CREATE_TABLES;
+eval $CHILD2_1_CREATE_TABLES;
+--enable_query_log
+TRUNCATE TABLE mysql.general_log;
+
+--connection child2_2
+--disable_query_log
+echo CHILD2_2_CREATE_TABLES;
+eval $CHILD2_2_CREATE_TABLES;
+--enable_query_log
+TRUNCATE TABLE mysql.general_log;
+
+--connection master_1
+--disable_query_log
+echo CREATE TABLE tbl_a (
+ pkey int NOT NULL,
+ PRIMARY KEY (pkey)
+) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
+echo CREATE TABLE tbl_b (
+ pkey int NOT NULL,
+ PRIMARY KEY (pkey)
+) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_2;
+eval CREATE TABLE tbl_a (
+ pkey int NOT NULL,
+ PRIMARY KEY (pkey)
+) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
+eval CREATE TABLE tbl_b (
+ pkey int NOT NULL,
+ PRIMARY KEY (pkey)
+) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_2;
+--enable_query_log
+INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+INSERT INTO tbl_a (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
+INSERT INTO tbl_a (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
+INSERT INTO tbl_b (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+INSERT INTO tbl_b (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
+INSERT INTO tbl_b (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
+
+--echo
+--echo select test 1
+
+--connection child2_1
+TRUNCATE TABLE mysql.general_log;
+
+--connection child2_2
+TRUNCATE TABLE mysql.general_log;
+
+--connection master_1
+SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
+
+--connection child2_1
+--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
+eval $CHILD2_1_SELECT_ARGUMENT1;
+eval $CHILD2_1_SELECT_TABLES;
+
+--connection child2_2
+--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
+eval $CHILD2_2_SELECT_ARGUMENT1;
+eval $CHILD2_2_SELECT_TABLES;
+
+--connection master_1
+eval $MASTER_1_SET_QUICK_PAGE_BYTE_6;
+
+--echo
+--echo select test 2
+
+--connection child2_1
+TRUNCATE TABLE mysql.general_log;
+
+--connection child2_2
+TRUNCATE TABLE mysql.general_log;
+
+--connection master_1
+SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
+
+--connection child2_1
+--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
+eval $CHILD2_1_SELECT_ARGUMENT1;
+eval $CHILD2_1_SELECT_TABLES;
+
+--connection child2_2
+--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
+eval $CHILD2_2_SELECT_ARGUMENT1;
+eval $CHILD2_2_SELECT_TABLES;
+
+--connection master_1
+eval $MASTER_1_SET_QUICK_PAGE_BYTE_0;
+
+--echo
+--echo select test 3
+
+--connection child2_1
+TRUNCATE TABLE mysql.general_log;
+
+--connection child2_2
+TRUNCATE TABLE mysql.general_log;
+
+--connection master_1
+SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
+
+--connection child2_1
+--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
+eval $CHILD2_1_SELECT_ARGUMENT1;
+eval $CHILD2_1_SELECT_TABLES;
+
+--connection child2_2
+--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
+eval $CHILD2_2_SELECT_ARGUMENT1;
+eval $CHILD2_2_SELECT_TABLES;
+
+--echo
+--echo deinit
+--disable_warnings
+--connection master_1
+DROP DATABASE IF EXISTS auto_test_local;
+
+--connection child2_1
+DROP DATABASE IF EXISTS auto_test_remote;
+SET GLOBAL log_output = @old_log_output;
+
+--connection child2_2
+DROP DATABASE IF EXISTS auto_test_remote2;
+SET GLOBAL log_output = @old_log_output;
+
+--enable_warnings
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.cnf b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.cnf
index e0ffb99c38e..c4b40c33cdc 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.cnf
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.cnf
@@ -1,4 +1 @@
-!include include/default_mysqld.cnf
-!include ../my_1_1.cnf
-!include ../my_2_1.cnf
-!include ../my_2_2.cnf
+!include quick_mode.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.test b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.test
index 235edc10d12..5cc3fd591a2 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.test
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_0.test
@@ -1,156 +1,5 @@
--source ../include/quick_mode_0_init.inc
---echo
---echo this test is for MDEV-16520
---echo
---echo drop and create databases
---connection master_1
---disable_warnings
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-
---connection child2_1
-SET @old_log_output = @@global.log_output;
-SET GLOBAL log_output = 'TABLE,FILE';
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-
---connection child2_2
-SET @old_log_output = @@global.log_output;
-SET GLOBAL log_output = 'TABLE,FILE';
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
---enable_warnings
-
---echo
---echo create table and insert
-
---connection child2_1
---disable_query_log
-echo CHILD2_1_CREATE_TABLES;
-eval $CHILD2_1_CREATE_TABLES;
---enable_query_log
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
---disable_query_log
-echo CHILD2_2_CREATE_TABLES;
-eval $CHILD2_2_CREATE_TABLES;
---enable_query_log
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
---disable_query_log
-echo CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-echo CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_2;
-eval CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
-eval CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_2;
---enable_query_log
-INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
-INSERT INTO tbl_a (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
-INSERT INTO tbl_a (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
-INSERT INTO tbl_b (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
-INSERT INTO tbl_b (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
-INSERT INTO tbl_b (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
-
---echo
---echo select test 1
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---connection master_1
-eval $MASTER_1_SET_QUICK_PAGE_BYTE_6;
-
---echo
---echo select test 2
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---connection master_1
-eval $MASTER_1_SET_QUICK_PAGE_BYTE_0;
-
---echo
---echo select test 3
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-
---connection child2_1
-DROP DATABASE IF EXISTS auto_test_remote;
-SET GLOBAL log_output = @old_log_output;
-
---connection child2_2
-DROP DATABASE IF EXISTS auto_test_remote2;
-SET GLOBAL log_output = @old_log_output;
-
---enable_warnings
+--source quick_mode.inc
--source ../include/quick_mode_0_deinit.inc
--echo
--echo end of test
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.cnf b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.cnf
index e0ffb99c38e..c4b40c33cdc 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.cnf
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.cnf
@@ -1,4 +1 @@
-!include include/default_mysqld.cnf
-!include ../my_1_1.cnf
-!include ../my_2_1.cnf
-!include ../my_2_2.cnf
+!include quick_mode.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.test b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.test
index 01fa0cb5128..493fabfe950 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.test
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_1.test
@@ -1,156 +1,5 @@
--source ../include/quick_mode_1_init.inc
---echo
---echo this test is for MDEV-16520
---echo
---echo drop and create databases
---connection master_1
---disable_warnings
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-
---connection child2_1
-SET @old_log_output = @@global.log_output;
-SET GLOBAL log_output = 'TABLE,FILE';
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-
---connection child2_2
-SET @old_log_output = @@global.log_output;
-SET GLOBAL log_output = 'TABLE,FILE';
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
---enable_warnings
-
---echo
---echo create table and insert
-
---connection child2_1
---disable_query_log
-echo CHILD2_1_CREATE_TABLES;
-eval $CHILD2_1_CREATE_TABLES;
---enable_query_log
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
---disable_query_log
-echo CHILD2_2_CREATE_TABLES;
-eval $CHILD2_2_CREATE_TABLES;
---enable_query_log
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
---disable_query_log
-echo CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-echo CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_2;
-eval CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
-eval CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_2;
---enable_query_log
-INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
-INSERT INTO tbl_a (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
-INSERT INTO tbl_a (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
-INSERT INTO tbl_b (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
-INSERT INTO tbl_b (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
-INSERT INTO tbl_b (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
-
---echo
---echo select test 1
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---connection master_1
-eval $MASTER_1_SET_QUICK_PAGE_BYTE_6;
-
---echo
---echo select test 2
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---connection master_1
-eval $MASTER_1_SET_QUICK_PAGE_BYTE_0;
-
---echo
---echo select test 3
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-
---connection child2_1
-DROP DATABASE IF EXISTS auto_test_remote;
-SET GLOBAL log_output = @old_log_output;
-
---connection child2_2
-DROP DATABASE IF EXISTS auto_test_remote2;
-SET GLOBAL log_output = @old_log_output;
-
---enable_warnings
+--source quick_mode.inc
--source ../include/quick_mode_1_deinit.inc
--echo
--echo end of test
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.cnf b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.cnf
index e0ffb99c38e..c4b40c33cdc 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.cnf
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.cnf
@@ -1,4 +1 @@
-!include include/default_mysqld.cnf
-!include ../my_1_1.cnf
-!include ../my_2_1.cnf
-!include ../my_2_2.cnf
+!include quick_mode.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.test b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.test
index 3ea8138e755..ee46b878484 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.test
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_2.test
@@ -1,156 +1,5 @@
--source ../include/quick_mode_2_init.inc
---echo
---echo this test is for MDEV-16520
---echo
---echo drop and create databases
---connection master_1
---disable_warnings
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-
---connection child2_1
-SET @old_log_output = @@global.log_output;
-SET GLOBAL log_output = 'TABLE,FILE';
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-
---connection child2_2
-SET @old_log_output = @@global.log_output;
-SET GLOBAL log_output = 'TABLE,FILE';
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
---enable_warnings
-
---echo
---echo create table and insert
-
---connection child2_1
---disable_query_log
-echo CHILD2_1_CREATE_TABLES;
-eval $CHILD2_1_CREATE_TABLES;
---enable_query_log
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
---disable_query_log
-echo CHILD2_2_CREATE_TABLES;
-eval $CHILD2_2_CREATE_TABLES;
---enable_query_log
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
---disable_query_log
-echo CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-echo CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_2;
-eval CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
-eval CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_2;
---enable_query_log
-INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
-INSERT INTO tbl_a (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
-INSERT INTO tbl_a (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
-INSERT INTO tbl_b (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
-INSERT INTO tbl_b (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
-INSERT INTO tbl_b (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
-
---echo
---echo select test 1
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---connection master_1
-eval $MASTER_1_SET_QUICK_PAGE_BYTE_6;
-
---echo
---echo select test 2
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---connection master_1
-eval $MASTER_1_SET_QUICK_PAGE_BYTE_0;
-
---echo
---echo select test 3
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-
---connection child2_1
-DROP DATABASE IF EXISTS auto_test_remote;
-SET GLOBAL log_output = @old_log_output;
-
---connection child2_2
-DROP DATABASE IF EXISTS auto_test_remote2;
-SET GLOBAL log_output = @old_log_output;
-
---enable_warnings
+--source quick_mode.inc
--source ../include/quick_mode_2_deinit.inc
--echo
--echo end of test
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.cnf b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.cnf
index e0ffb99c38e..c4b40c33cdc 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.cnf
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.cnf
@@ -1,4 +1 @@
-!include include/default_mysqld.cnf
-!include ../my_1_1.cnf
-!include ../my_2_1.cnf
-!include ../my_2_2.cnf
+!include quick_mode.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.test b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.test
index bc926b0a296..1d1bf0e24da 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.test
+++ b/storage/spider/mysql-test/spider/bugfix/t/quick_mode_3.test
@@ -1,157 +1,5 @@
--source ../include/quick_mode_3_init.inc
---echo
---echo this test is for MDEV-16520
---echo
---echo drop and create databases
-
---connection master_1
---disable_warnings
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-
---connection child2_1
-SET @old_log_output = @@global.log_output;
-SET GLOBAL log_output = 'TABLE,FILE';
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-
---connection child2_2
-SET @old_log_output = @@global.log_output;
-SET GLOBAL log_output = 'TABLE,FILE';
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
---enable_warnings
-
---echo
---echo create table and insert
-
---connection child2_1
---disable_query_log
-echo CHILD2_1_CREATE_TABLES;
-eval $CHILD2_1_CREATE_TABLES;
---enable_query_log
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
---disable_query_log
-echo CHILD2_2_CREATE_TABLES;
-eval $CHILD2_2_CREATE_TABLES;
---enable_query_log
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
---disable_query_log
-echo CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-echo CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_2;
-eval CREATE TABLE tbl_a (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
-eval CREATE TABLE tbl_b (
- pkey int NOT NULL,
- PRIMARY KEY (pkey)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_2;
---enable_query_log
-INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
-INSERT INTO tbl_a (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
-INSERT INTO tbl_a (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
-INSERT INTO tbl_b (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
-INSERT INTO tbl_b (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
-INSERT INTO tbl_b (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
-
---echo
---echo select test 1
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---connection master_1
-eval $MASTER_1_SET_QUICK_PAGE_BYTE_6;
-
---echo
---echo select test 2
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---connection master_1
-eval $MASTER_1_SET_QUICK_PAGE_BYTE_0;
-
---echo
---echo select test 3
-
---connection child2_1
-TRUNCATE TABLE mysql.general_log;
-
---connection child2_2
-TRUNCATE TABLE mysql.general_log;
-
---connection master_1
-SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
-
---connection child2_1
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_1_SELECT_ARGUMENT1;
-eval $CHILD2_1_SELECT_TABLES;
-
---connection child2_2
---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
-eval $CHILD2_2_SELECT_ARGUMENT1;
-eval $CHILD2_2_SELECT_TABLES;
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-
---connection child2_1
-DROP DATABASE IF EXISTS auto_test_remote;
-SET GLOBAL log_output = @old_log_output;
-
---connection child2_2
-DROP DATABASE IF EXISTS auto_test_remote2;
-SET GLOBAL log_output = @old_log_output;
-
---enable_warnings
+--source quick_mode.inc
--source ../include/quick_mode_3_deinit.inc
--echo
--echo end of test
diff --git a/storage/spider/mysql-test/spider/feature/include/rewrite_deinit.inc b/storage/spider/mysql-test/spider/feature/include/rewrite_deinit.inc
new file mode 100644
index 00000000000..ecb5622af14
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/include/rewrite_deinit.inc
@@ -0,0 +1,7 @@
+--disable_warnings
+--disable_query_log
+--disable_result_log
+--source ../t/test_deinit.inc
+--enable_result_log
+--enable_query_log
+--enable_warnings
diff --git a/storage/spider/mysql-test/spider/feature/include/rewrite_init.inc b/storage/spider/mysql-test/spider/feature/include/rewrite_init.inc
new file mode 100644
index 00000000000..cc6a0070da6
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/include/rewrite_init.inc
@@ -0,0 +1,9 @@
+--disable_warnings
+--disable_query_log
+--disable_result_log
+--source ../t/test_init.inc
+--enable_result_log
+--enable_query_log
+--enable_warnings
+let $CHILD2_1_SELECT_ARGUMENT1=
+ SELECT argument FROM mysql.general_log;
diff --git a/storage/spider/mysql-test/spider/feature/include/rewrite_partition_deinit.inc b/storage/spider/mysql-test/spider/feature/include/rewrite_partition_deinit.inc
new file mode 100644
index 00000000000..9b2dcf7354d
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/include/rewrite_partition_deinit.inc
@@ -0,0 +1 @@
+--source rewrite_deinit.inc
diff --git a/storage/spider/mysql-test/spider/feature/include/rewrite_partition_init.inc b/storage/spider/mysql-test/spider/feature/include/rewrite_partition_init.inc
new file mode 100644
index 00000000000..b6f49ef465c
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/include/rewrite_partition_init.inc
@@ -0,0 +1,16 @@
+--source rewrite_init.inc
+if (!$HAS_REWRITE)
+{
+ --source rewrite_partition_deinit.inc
+ skip Test requires audit rewrite;
+}
+--connection master_1
+INSERT INTO mysql.spider_rewrite_tables VALUES (1, '%', '%');
+INSERT INTO mysql.spider_rewrite_table_tables VALUES (1, 1, 'LIST', 'MOD(pkey,4)', '', '', 'srv "s_2_1"', '');
+INSERT INTO mysql.spider_rewrite_table_partitions VALUES
+ (1, 1, 1, 'pt1', '0,1', 'database "auto_test_remote"', ''),
+ (1, 1, 2, 'pt2', '2,3', 'database "auto_test_remote2"', '');
+select spider_flush_rewrite_cache();
+let $CHILD2_1_SELECT_TABLES=
+ SELECT pkey FROM auto_test_remote.tbl_a ORDER BY pkey $STR_SEMICOLON
+ SELECT pkey FROM auto_test_remote2.tbl_a ORDER BY pkey;
diff --git a/storage/spider/mysql-test/spider/feature/include/rewrite_simple_deinit.inc b/storage/spider/mysql-test/spider/feature/include/rewrite_simple_deinit.inc
new file mode 100644
index 00000000000..9b2dcf7354d
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/include/rewrite_simple_deinit.inc
@@ -0,0 +1 @@
+--source rewrite_deinit.inc
diff --git a/storage/spider/mysql-test/spider/feature/include/rewrite_simple_init.inc b/storage/spider/mysql-test/spider/feature/include/rewrite_simple_init.inc
new file mode 100644
index 00000000000..51d908d7af4
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/include/rewrite_simple_init.inc
@@ -0,0 +1,12 @@
+--source rewrite_init.inc
+if (!$HAS_REWRITE)
+{
+ --source rewrite_simple_deinit.inc
+ skip Test requires audit rewrite;
+}
+--connection master_1
+INSERT INTO mysql.spider_rewrite_tables VALUES (1, '%', '%');
+INSERT INTO mysql.spider_rewrite_table_tables VALUES (1, 1, '', '', '', '', 'srv "s_2_1"', '');
+select spider_flush_rewrite_cache();
+let $CHILD2_1_SELECT_TABLES=
+ SELECT pkey FROM auto_test_remote.tbl_a ORDER BY pkey;
diff --git a/storage/spider/mysql-test/spider/feature/include/rewrite_subpartition_deinit.inc b/storage/spider/mysql-test/spider/feature/include/rewrite_subpartition_deinit.inc
new file mode 100644
index 00000000000..9b2dcf7354d
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/include/rewrite_subpartition_deinit.inc
@@ -0,0 +1 @@
+--source rewrite_deinit.inc
diff --git a/storage/spider/mysql-test/spider/feature/include/rewrite_subpartition_init.inc b/storage/spider/mysql-test/spider/feature/include/rewrite_subpartition_init.inc
new file mode 100644
index 00000000000..2a97c8bc1fd
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/include/rewrite_subpartition_init.inc
@@ -0,0 +1,23 @@
+--source rewrite_init.inc
+if (!$HAS_REWRITE)
+{
+ --source rewrite_subpartition_deinit.inc
+ skip Test requires audit rewrite;
+}
+--connection master_1
+INSERT INTO mysql.spider_rewrite_tables VALUES (1, '%', '%');
+INSERT INTO mysql.spider_rewrite_table_tables VALUES (1, 1, 'RANGE', 'pkey', 'HASH', 'pkey', 'srv "s_2_1"', '');
+INSERT INTO mysql.spider_rewrite_table_partitions VALUES
+ (1, 1, 1, 'pt1', '5', '', ''),
+ (1, 1, 2, 'pt2', 'MAXVALUE', '', '');
+INSERT INTO mysql.spider_rewrite_table_subpartitions VALUES
+ (1, 1, 1, 1, 'spt1', '', 'database "auto_test_remote"', ''),
+ (1, 1, 1, 2, 'spt2', '', 'database "auto_test_remote2"', ''),
+ (1, 1, 2, 1, 'spt3', '', 'database "auto_test_remote3"', ''),
+ (1, 1, 2, 2, 'spt4', '', 'database "auto_test_remote4"', '');
+select spider_flush_rewrite_cache();
+let $CHILD2_1_SELECT_TABLES=
+ SELECT pkey FROM auto_test_remote.tbl_a ORDER BY pkey $STR_SEMICOLON
+ SELECT pkey FROM auto_test_remote2.tbl_a ORDER BY pkey $STR_SEMICOLON
+ SELECT pkey FROM auto_test_remote3.tbl_a ORDER BY pkey $STR_SEMICOLON
+ SELECT pkey FROM auto_test_remote4.tbl_a ORDER BY pkey;
diff --git a/storage/spider/mysql-test/spider/feature/my.cnf b/storage/spider/mysql-test/spider/feature/my.cnf
new file mode 100644
index 00000000000..b7f76a630cc
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my.cnf
@@ -0,0 +1,2 @@
+!include include/default_mysqld.cnf
+!include my_1_1.cnf
diff --git a/storage/spider/mysql-test/spider/feature/my_1_1.cnf b/storage/spider/mysql-test/spider/feature/my_1_1.cnf
new file mode 100644
index 00000000000..5f17295d895
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my_1_1.cnf
@@ -0,0 +1,44 @@
+[mysqld.1.1]
+log-bin= master-bin
+loose_handlersocket_port= 20000
+loose_handlersocket_port_wr= 20001
+loose_handlersocket_threads= 2
+loose_handlersocket_threads_wr= 1
+loose_handlersocket_support_merge_table= 0
+loose_handlersocket_direct_update_mode= 2
+loose_handlersocket_unlimited_boundary= 65536
+loose_handlersocket_bulk_insert= 0
+loose_handlersocket_bulk_insert_timeout= 0
+loose_handlersocket_general_log= 1
+loose_handlersocket_timeout= 30
+loose_handlersocket_close_table_interval=2
+open_files_limit= 4096
+loose_partition= 1
+
+[ENV]
+USE_GEOMETRY_TEST= 1
+USE_FULLTEXT_TEST= 1
+USE_HA_TEST= 1
+USE_GENERAL_LOG= 1
+USE_REPLICATION= 1
+MASTER_1_MYPORT= @mysqld.1.1.port
+MASTER_1_HSRPORT= 20000
+MASTER_1_HSWPORT= 20001
+MASTER_1_MYSOCK= @mysqld.1.1.socket
+MASTER_1_ENGINE_TYPE= Spider
+#MASTER_1_ENGINE_TYPE= MyISAM
+MASTER_1_ENGINE= ENGINE=Spider
+MASTER_1_CHARSET= DEFAULT CHARSET=utf8
+MASTER_1_ENGINE2= ENGINE=MyISAM
+MASTER_1_CHARSET2= DEFAULT CHARSET=utf8
+MASTER_1_CHARSET3= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
+
+STR_SEMICOLON= ;
+
+#The followings are set in include/init_xxx.inc files
+# MASTER_1_COMMENT_2_1
+# MASTER_1_COMMENT2_2_1
+# MASTER_1_COMMENT3_2_1
+# MASTER_1_COMMENT4_2_1
+# MASTER_1_COMMENT5_2_1
+# MASTER_1_COMMENT_P_2_1
diff --git a/storage/spider/mysql-test/spider/feature/my_2_1.cnf b/storage/spider/mysql-test/spider/feature/my_2_1.cnf
new file mode 100644
index 00000000000..24161645607
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my_2_1.cnf
@@ -0,0 +1,56 @@
+[mysqld.2.1]
+loose_handlersocket_port= 20002
+loose_handlersocket_port_wr= 20003
+loose_handlersocket_threads= 2
+loose_handlersocket_threads_wr= 1
+loose_handlersocket_support_merge_table= 0
+loose_handlersocket_direct_update_mode= 2
+loose_handlersocket_unlimited_boundary= 65536
+loose_handlersocket_bulk_insert= 0
+loose_handlersocket_bulk_insert_timeout= 0
+loose_handlersocket_general_log= 1
+loose_handlersocket_timeout= 30
+loose_handlersocket_close_table_interval=2
+open_files_limit= 4096
+
+[ENV]
+USE_CHILD_GROUP2= 1
+OUTPUT_CHILD_GROUP2= 0
+CHILD2_1_MYPORT= @mysqld.2.1.port
+CHILD2_1_HSRPORT= 20002
+CHILD2_1_HSWPORT= 20003
+CHILD2_1_MYSOCK= @mysqld.2.1.socket
+CHILD2_1_ENGINE_TYPE= InnoDB
+CHILD2_1_ENGINE= ENGINE=InnoDB
+CHILD2_1_CHARSET= DEFAULT CHARSET=utf8
+CHILD2_1_CHARSET2= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
+CHILD2_1_FT_MYPORT= @mysqld.2.1.port
+CHILD2_1_FT_MYSOCK= @mysqld.2.1.socket
+CHILD2_1_FT_ENGINE_TYPE= MyISAM
+CHILD2_1_FT_ENGINE= ENGINE=MyISAM
+CHILD2_1_FT_CHARSET= DEFAULT CHARSET=utf8
+CHILD2_1_GM_MYPORT= @mysqld.2.1.port
+CHILD2_1_GM_MYSOCK= @mysqld.2.1.socket
+CHILD2_1_GM_ENGINE_TYPE= MyISAM
+CHILD2_1_GM_ENGINE= ENGINE=MyISAM
+CHILD2_1_GM_CHARSET= DEFAULT CHARSET=utf8
+
+#The followings are set in include/init_xxx.inc files
+# CHILD2_1_DROP_TABLES
+# CHILD2_1_CREATE_TABLES
+# CHILD2_1_SELECT_TABLES
+# CHILD2_1_DROP_TABLES2
+# CHILD2_1_CREATE_TABLES2
+# CHILD2_1_SELECT_TABLES2
+# CHILD2_1_DROP_TABLES3
+# CHILD2_1_CREATE_TABLES3
+# CHILD2_1_SELECT_TABLES3
+# CHILD2_1_DROP_TABLES4
+# CHILD2_1_CREATE_TABLES4
+# CHILD2_1_SELECT_TABLES4
+# CHILD2_1_DROP_TABLES5
+# CHILD2_1_CREATE_TABLES5
+# CHILD2_1_SELECT_TABLES5
+# CHILD2_1_DROP_TABLES6
+# CHILD2_1_CREATE_TABLES6
+# CHILD2_1_SELECT_TABLES6
diff --git a/storage/spider/mysql-test/spider/feature/my_2_2.cnf b/storage/spider/mysql-test/spider/feature/my_2_2.cnf
new file mode 100644
index 00000000000..2d3c2a89a7d
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my_2_2.cnf
@@ -0,0 +1,38 @@
+[mysqld.2.2]
+loose_handlersocket_port= 20004
+loose_handlersocket_port_wr= 20005
+loose_handlersocket_threads= 2
+loose_handlersocket_threads_wr= 1
+loose_handlersocket_support_merge_table= 0
+loose_handlersocket_direct_update_mode= 2
+loose_handlersocket_unlimited_boundary= 65536
+loose_handlersocket_bulk_insert= 0
+loose_handlersocket_bulk_insert_timeout= 0
+loose_handlersocket_general_log= 1
+loose_handlersocket_timeout= 30
+loose_handlersocket_close_table_interval=2
+open_files_limit= 4096
+
+[ENV]
+CHILD2_2_MYPORT= @mysqld.2.2.port
+CHILD2_2_HSRPORT= 20004
+CHILD2_2_HSWPORT= 20005
+CHILD2_2_MYSOCK= @mysqld.2.2.socket
+CHILD2_2_ENGINE_TYPE= InnoDB
+CHILD2_2_ENGINE= ENGINE=InnoDB
+CHILD2_2_CHARSET= DEFAULT CHARSET=utf8
+CHILD2_2_FT_MYPORT= @mysqld.2.2.port
+CHILD2_2_FT_MYSOCK= @mysqld.2.2.socket
+CHILD2_2_FT_ENGINE_TYPE= MyISAM
+CHILD2_2_FT_ENGINE= ENGINE=MyISAM
+CHILD2_2_FT_CHARSET= DEFAULT CHARSET=utf8
+CHILD2_2_GM_MYPORT= @mysqld.2.2.port
+CHILD2_2_GM_MYSOCK= @mysqld.2.2.socket
+CHILD2_2_GM_ENGINE_TYPE= MyISAM
+CHILD2_2_GM_ENGINE= ENGINE=MyISAM
+CHILD2_2_GM_CHARSET= DEFAULT CHARSET=utf8
+
+#The followings are set in include/init_xxx.inc files
+# CHILD2_2_DROP_TABLES
+# CHILD2_2_CREATE_TABLES
+# CHILD2_2_SELECT_TABLES
diff --git a/storage/spider/mysql-test/spider/feature/my_2_3.cnf b/storage/spider/mysql-test/spider/feature/my_2_3.cnf
new file mode 100644
index 00000000000..024da651e0c
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my_2_3.cnf
@@ -0,0 +1,8 @@
+[mysqld.2.3]
+
+[ENV]
+CHILD2_3_MYPORT= @mysqld.2.3.port
+CHILD2_3_MYSOCK= @mysqld.2.3.socket
+CHILD2_3_ENGINE_TYPE= InnoDB
+CHILD2_3_ENGINE= ENGINE=InnoDB
+CHILD2_3_CHARSET= DEFAULT CHARSET=utf8
diff --git a/storage/spider/mysql-test/spider/feature/my_3_1.cnf b/storage/spider/mysql-test/spider/feature/my_3_1.cnf
new file mode 100644
index 00000000000..fad21607789
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my_3_1.cnf
@@ -0,0 +1,11 @@
+[mysqld.3.1]
+loose_partition= 1
+
+[ENV]
+USE_CHILD_GROUP3= 1
+OUTPUT_CHILD_GROUP3= 0
+CHILD3_1_MYPORT= @mysqld.3.1.port
+CHILD3_1_MYSOCK= @mysqld.3.1.socket
+CHILD3_1_ENGINE_TYPE= InnoDB
+CHILD3_1_ENGINE= ENGINE=InnoDB
+CHILD3_1_CHARSET= DEFAULT CHARSET=utf8
diff --git a/storage/spider/mysql-test/spider/feature/my_3_2.cnf b/storage/spider/mysql-test/spider/feature/my_3_2.cnf
new file mode 100644
index 00000000000..6f027b6f525
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my_3_2.cnf
@@ -0,0 +1,9 @@
+[mysqld.3.2]
+loose_partition= 1
+
+[ENV]
+CHILD3_2_MYPORT= @mysqld.3.2.port
+CHILD3_2_MYSOCK= @mysqld.3.2.socket
+CHILD3_2_ENGINE_TYPE= InnoDB
+CHILD3_2_ENGINE= ENGINE=InnoDB
+CHILD3_2_CHARSET= DEFAULT CHARSET=utf8
diff --git a/storage/spider/mysql-test/spider/feature/my_3_3.cnf b/storage/spider/mysql-test/spider/feature/my_3_3.cnf
new file mode 100644
index 00000000000..fbb33694738
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my_3_3.cnf
@@ -0,0 +1,9 @@
+[mysqld.3.3]
+loose_partition= 1
+
+[ENV]
+CHILD3_3_MYPORT= @mysqld.3.3.port
+CHILD3_3_MYSOCK= @mysqld.3.3.socket
+CHILD3_3_ENGINE_TYPE= InnoDB
+CHILD3_3_ENGINE= ENGINE=InnoDB
+CHILD3_3_CHARSET= DEFAULT CHARSET=utf8
diff --git a/storage/spider/mysql-test/spider/feature/my_4_1.cnf b/storage/spider/mysql-test/spider/feature/my_4_1.cnf
new file mode 100644
index 00000000000..d1812a48b68
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/my_4_1.cnf
@@ -0,0 +1,9 @@
+[mysqld.4.1]
+loose_partition= 1
+
+[ENV]
+SLAVE1_1_MYPORT= @mysqld.4.1.port
+SLAVE1_1_MYSOCK= @mysqld.4.1.socket
+SLAVE1_1_ENGINE_TYPE= MyISAM
+SLAVE1_1_ENGINE= ENGINE=MyISAM
+SLAVE1_1_CHARSET= DEFAULT CHARSET=utf8
diff --git a/storage/spider/mysql-test/spider/feature/r/rewrite_partition.result b/storage/spider/mysql-test/spider/feature/r/rewrite_partition.result
new file mode 100644
index 00000000000..4cfbcbe42a7
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/r/rewrite_partition.result
@@ -0,0 +1,130 @@
+for master_1
+for child2
+child2_1
+child2_2
+child2_3
+for child3
+connection master_1;
+INSERT INTO mysql.spider_rewrite_tables VALUES (1, '%', '%');
+INSERT INTO mysql.spider_rewrite_table_tables VALUES (1, 1, 'LIST', 'MOD(pkey,4)', '', '', 'srv "s_2_1"', '');
+INSERT INTO mysql.spider_rewrite_table_partitions VALUES
+(1, 1, 1, 'pt1', '0,1', 'database "auto_test_remote"', ''),
+(1, 1, 2, 'pt2', '2,3', 'database "auto_test_remote2"', '');
+select spider_flush_rewrite_cache();
+spider_flush_rewrite_cache()
+1
+
+this test is for MDEV-16967
+
+drop and create databases
+connection master_1;
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+connection child2_1;
+SET @old_log_output = @@global.log_output;
+SET GLOBAL log_output = 'TABLE,FILE';
+CREATE DATABASE auto_test_remote;
+CREATE DATABASE auto_test_remote2;
+CREATE DATABASE auto_test_remote3;
+CREATE DATABASE auto_test_remote4;
+
+create table and insert
+connection child2_1;
+TRUNCATE TABLE mysql.general_log;
+connection master_1;
+CREATE TABLE tbl_a (
+pkey int NOT NULL,
+PRIMARY KEY (pkey)
+) CHILD2_1_ENGINE CHILD2_1_CHARSET
+SHOW CREATE TABLE tbl_a;
+Table Create Table
+tbl_a CREATE TABLE `tbl_a` (
+ `pkey` int(11) NOT NULL,
+ PRIMARY KEY (`pkey`)
+) ENGINE=SPIDER DEFAULT CHARSET=utf8 CONNECTION='srv "s_2_1"'
+ PARTITION BY LIST (`pkey` MOD 4)
+(PARTITION `pt1` VALUES IN (0,1) CONNECTION = 'table"tbl_a",database "auto_test_remote"' ENGINE = SPIDER,
+ PARTITION `pt2` VALUES IN (2,3) CONNECTION = 'table"tbl_a",database "auto_test_remote2"' ENGINE = SPIDER)
+INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+
+select test
+SELECT * FROM tbl_a ORDER BY pkey;
+pkey
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+connection child2_1;
+SELECT argument FROM mysql.general_log;
+argument
+root@localhost as anonymous on
+set session time_zone = '+00:00'
+SET NAMES utf8
+auto_test_remote
+CREATE TABLE `auto_test_remote`.`tbl_a` (pkey INT NOT NULL ,PRIMARY KEY (pkey ))ENGINE InnoDB charset utf8
+auto_test_remote2
+CREATE TABLE `auto_test_remote2`.`tbl_a` (pkey INT NOT NULL ,PRIMARY KEY (pkey ))ENGINE InnoDB charset utf8
+
+root@localhost as anonymous on
+set session time_zone = '+00:00'
+SET NAMES utf8
+auto_test_remote
+show table status from `auto_test_remote` like 'tbl_a'
+auto_test_remote2
+show table status from `auto_test_remote2` like 'tbl_a'
+auto_test_remote
+show index from `auto_test_remote`.`tbl_a`
+set session transaction isolation level repeatable read;set session autocommit = 1;set session sql_log_off = 0;start transaction
+insert into `auto_test_remote`.`tbl_a`(`pkey`)values(0),(1),(4),(5),(8),(9)
+auto_test_remote2
+insert into `auto_test_remote2`.`tbl_a`(`pkey`)values(2),(3),(6),(7)
+commit
+
+root@localhost as anonymous on
+set session transaction isolation level repeatable read;set session autocommit = 1;set session sql_log_off = 0;set session time_zone = '+00:00';start transaction
+SET NAMES utf8
+auto_test_remote
+select `pkey` from `auto_test_remote`.`tbl_a` order by `pkey`
+auto_test_remote2
+select `pkey` from `auto_test_remote2`.`tbl_a` order by `pkey`
+commit
+
+SELECT argument FROM mysql.general_log
+SELECT pkey FROM auto_test_remote.tbl_a ORDER BY pkey ;
+SELECT pkey FROM auto_test_remote2.tbl_a ORDER BY pkey;
+pkey
+0
+1
+4
+5
+8
+9
+pkey
+2
+3
+6
+7
+
+deinit
+connection master_1;
+DROP DATABASE IF EXISTS auto_test_local;
+connection child2_1;
+DROP DATABASE IF EXISTS auto_test_remote;
+DROP DATABASE IF EXISTS auto_test_remote2;
+DROP DATABASE IF EXISTS auto_test_remote3;
+DROP DATABASE IF EXISTS auto_test_remote4;
+SET GLOBAL log_output = @old_log_output;
+for master_1
+for child2
+child2_1
+child2_2
+child2_3
+for child3
+
+end of test
diff --git a/storage/spider/mysql-test/spider/feature/r/rewrite_simple.result b/storage/spider/mysql-test/spider/feature/r/rewrite_simple.result
new file mode 100644
index 00000000000..6ebf38da163
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/r/rewrite_simple.result
@@ -0,0 +1,112 @@
+for master_1
+for child2
+child2_1
+child2_2
+child2_3
+for child3
+connection master_1;
+INSERT INTO mysql.spider_rewrite_tables VALUES (1, '%', '%');
+INSERT INTO mysql.spider_rewrite_table_tables VALUES (1, 1, '', '', '', '', 'srv "s_2_1"', '');
+select spider_flush_rewrite_cache();
+spider_flush_rewrite_cache()
+1
+
+this test is for MDEV-16967
+
+drop and create databases
+connection master_1;
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+connection child2_1;
+SET @old_log_output = @@global.log_output;
+SET GLOBAL log_output = 'TABLE,FILE';
+CREATE DATABASE auto_test_remote;
+CREATE DATABASE auto_test_remote2;
+CREATE DATABASE auto_test_remote3;
+CREATE DATABASE auto_test_remote4;
+
+create table and insert
+connection child2_1;
+TRUNCATE TABLE mysql.general_log;
+connection master_1;
+CREATE TABLE tbl_a (
+pkey int NOT NULL,
+PRIMARY KEY (pkey)
+) CHILD2_1_ENGINE CHILD2_1_CHARSET
+SHOW CREATE TABLE tbl_a;
+Table Create Table
+tbl_a CREATE TABLE `tbl_a` (
+ `pkey` int(11) NOT NULL,
+ PRIMARY KEY (`pkey`)
+) ENGINE=SPIDER DEFAULT CHARSET=utf8 CONNECTION='table"tbl_a",srv "s_2_1"'
+INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+
+select test
+SELECT * FROM tbl_a ORDER BY pkey;
+pkey
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+connection child2_1;
+SELECT argument FROM mysql.general_log;
+argument
+root@localhost as anonymous on
+set session time_zone = '+00:00'
+SET NAMES utf8
+auto_test_remote
+CREATE TABLE `auto_test_remote`.`tbl_a` (pkey INT NOT NULL ,PRIMARY KEY (pkey ))ENGINE InnoDB charset utf8
+
+root@localhost as anonymous on
+set session time_zone = '+00:00'
+SET NAMES utf8
+auto_test_remote
+show table status from `auto_test_remote` like 'tbl_a'
+set session transaction isolation level repeatable read;set session autocommit = 1;set session sql_log_off = 0;start transaction
+insert into `auto_test_remote`.`tbl_a`(`pkey`)values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)
+commit
+
+root@localhost as anonymous on
+set session transaction isolation level repeatable read;set session autocommit = 1;set session sql_log_off = 0;set session time_zone = '+00:00';start transaction
+SET NAMES utf8
+auto_test_remote
+select t0.`pkey` `pkey` from `auto_test_remote`.`tbl_a` t0 order by `pkey`
+commit
+
+SELECT argument FROM mysql.general_log
+SELECT pkey FROM auto_test_remote.tbl_a ORDER BY pkey;
+pkey
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+
+deinit
+connection master_1;
+DROP DATABASE IF EXISTS auto_test_local;
+connection child2_1;
+DROP DATABASE IF EXISTS auto_test_remote;
+DROP DATABASE IF EXISTS auto_test_remote2;
+DROP DATABASE IF EXISTS auto_test_remote3;
+DROP DATABASE IF EXISTS auto_test_remote4;
+SET GLOBAL log_output = @old_log_output;
+for master_1
+for child2
+child2_1
+child2_2
+child2_3
+for child3
+
+end of test
diff --git a/storage/spider/mysql-test/spider/feature/r/rewrite_subpartition.result b/storage/spider/mysql-test/spider/feature/r/rewrite_subpartition.result
new file mode 100644
index 00000000000..a30656c9ccc
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/r/rewrite_subpartition.result
@@ -0,0 +1,160 @@
+for master_1
+for child2
+child2_1
+child2_2
+child2_3
+for child3
+connection master_1;
+INSERT INTO mysql.spider_rewrite_tables VALUES (1, '%', '%');
+INSERT INTO mysql.spider_rewrite_table_tables VALUES (1, 1, 'RANGE', 'pkey', 'HASH', 'pkey', 'srv "s_2_1"', '');
+INSERT INTO mysql.spider_rewrite_table_partitions VALUES
+(1, 1, 1, 'pt1', '5', '', ''),
+(1, 1, 2, 'pt2', 'MAXVALUE', '', '');
+INSERT INTO mysql.spider_rewrite_table_subpartitions VALUES
+(1, 1, 1, 1, 'spt1', '', 'database "auto_test_remote"', ''),
+(1, 1, 1, 2, 'spt2', '', 'database "auto_test_remote2"', ''),
+(1, 1, 2, 1, 'spt3', '', 'database "auto_test_remote3"', ''),
+(1, 1, 2, 2, 'spt4', '', 'database "auto_test_remote4"', '');
+select spider_flush_rewrite_cache();
+spider_flush_rewrite_cache()
+1
+
+this test is for MDEV-16967
+
+drop and create databases
+connection master_1;
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+connection child2_1;
+SET @old_log_output = @@global.log_output;
+SET GLOBAL log_output = 'TABLE,FILE';
+CREATE DATABASE auto_test_remote;
+CREATE DATABASE auto_test_remote2;
+CREATE DATABASE auto_test_remote3;
+CREATE DATABASE auto_test_remote4;
+
+create table and insert
+connection child2_1;
+TRUNCATE TABLE mysql.general_log;
+connection master_1;
+CREATE TABLE tbl_a (
+pkey int NOT NULL,
+PRIMARY KEY (pkey)
+) CHILD2_1_ENGINE CHILD2_1_CHARSET
+SHOW CREATE TABLE tbl_a;
+Table Create Table
+tbl_a CREATE TABLE `tbl_a` (
+ `pkey` int(11) NOT NULL,
+ PRIMARY KEY (`pkey`)
+) ENGINE=SPIDER DEFAULT CHARSET=utf8 CONNECTION='srv "s_2_1"'
+ PARTITION BY RANGE (`pkey`)
+SUBPARTITION BY HASH (`pkey`)
+(PARTITION `pt1` VALUES LESS THAN (5)
+ (SUBPARTITION `spt1` CONNECTION = 'table"tbl_a",database "auto_test_remote"' ENGINE = SPIDER,
+ SUBPARTITION `spt2` CONNECTION = 'table"tbl_a",database "auto_test_remote2"' ENGINE = SPIDER),
+ PARTITION `pt2` VALUES LESS THAN MAXVALUE
+ (SUBPARTITION `spt3` CONNECTION = 'table"tbl_a",database "auto_test_remote3"' ENGINE = SPIDER,
+ SUBPARTITION `spt4` CONNECTION = 'table"tbl_a",database "auto_test_remote4"' ENGINE = SPIDER))
+INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+
+select test
+SELECT * FROM tbl_a ORDER BY pkey;
+pkey
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+connection child2_1;
+SELECT argument FROM mysql.general_log;
+argument
+root@localhost as anonymous on
+set session time_zone = '+00:00'
+SET NAMES utf8
+auto_test_remote
+CREATE TABLE `auto_test_remote`.`tbl_a` (pkey INT NOT NULL ,PRIMARY KEY (pkey ))ENGINE InnoDB charset utf8
+auto_test_remote2
+CREATE TABLE `auto_test_remote2`.`tbl_a` (pkey INT NOT NULL ,PRIMARY KEY (pkey ))ENGINE InnoDB charset utf8
+auto_test_remote3
+CREATE TABLE `auto_test_remote3`.`tbl_a` (pkey INT NOT NULL ,PRIMARY KEY (pkey ))ENGINE InnoDB charset utf8
+auto_test_remote4
+CREATE TABLE `auto_test_remote4`.`tbl_a` (pkey INT NOT NULL ,PRIMARY KEY (pkey ))ENGINE InnoDB charset utf8
+
+root@localhost as anonymous on
+set session time_zone = '+00:00'
+SET NAMES utf8
+auto_test_remote
+show table status from `auto_test_remote` like 'tbl_a'
+auto_test_remote2
+show table status from `auto_test_remote2` like 'tbl_a'
+auto_test_remote3
+show table status from `auto_test_remote3` like 'tbl_a'
+auto_test_remote4
+show table status from `auto_test_remote4` like 'tbl_a'
+auto_test_remote
+show index from `auto_test_remote`.`tbl_a`
+set session transaction isolation level repeatable read;set session autocommit = 1;set session sql_log_off = 0;start transaction
+insert into `auto_test_remote`.`tbl_a`(`pkey`)values(0),(2),(4)
+auto_test_remote2
+insert into `auto_test_remote2`.`tbl_a`(`pkey`)values(1),(3)
+auto_test_remote3
+insert into `auto_test_remote3`.`tbl_a`(`pkey`)values(6),(8)
+auto_test_remote4
+insert into `auto_test_remote4`.`tbl_a`(`pkey`)values(5),(7),(9)
+commit
+
+root@localhost as anonymous on
+set session transaction isolation level repeatable read;set session autocommit = 1;set session sql_log_off = 0;set session time_zone = '+00:00';start transaction
+SET NAMES utf8
+auto_test_remote
+select `pkey` from `auto_test_remote`.`tbl_a` order by `pkey`
+auto_test_remote2
+select `pkey` from `auto_test_remote2`.`tbl_a` order by `pkey`
+auto_test_remote3
+select `pkey` from `auto_test_remote3`.`tbl_a` order by `pkey`
+auto_test_remote4
+select `pkey` from `auto_test_remote4`.`tbl_a` order by `pkey`
+commit
+
+SELECT argument FROM mysql.general_log
+SELECT pkey FROM auto_test_remote.tbl_a ORDER BY pkey ;
+SELECT pkey FROM auto_test_remote2.tbl_a ORDER BY pkey ;
+SELECT pkey FROM auto_test_remote3.tbl_a ORDER BY pkey ;
+SELECT pkey FROM auto_test_remote4.tbl_a ORDER BY pkey;
+pkey
+0
+2
+4
+pkey
+1
+3
+pkey
+6
+8
+pkey
+5
+7
+9
+
+deinit
+connection master_1;
+DROP DATABASE IF EXISTS auto_test_local;
+connection child2_1;
+DROP DATABASE IF EXISTS auto_test_remote;
+DROP DATABASE IF EXISTS auto_test_remote2;
+DROP DATABASE IF EXISTS auto_test_remote3;
+DROP DATABASE IF EXISTS auto_test_remote4;
+SET GLOBAL log_output = @old_log_output;
+for master_1
+for child2
+child2_1
+child2_2
+child2_3
+for child3
+
+end of test
diff --git a/storage/spider/mysql-test/spider/feature/suite.opt b/storage/spider/mysql-test/spider/feature/suite.opt
new file mode 100644
index 00000000000..672a3b37d4f
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/suite.opt
@@ -0,0 +1 @@
+--loose-innodb --loose-skip-performance-schema
diff --git a/storage/spider/mysql-test/spider/feature/suite.pm b/storage/spider/mysql-test/spider/feature/suite.pm
new file mode 100644
index 00000000000..f106147deb6
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/suite.pm
@@ -0,0 +1,12 @@
+package My::Suite::Spider;
+
+@ISA = qw(My::Suite);
+
+return "No Spider engine" unless $ENV{HA_SPIDER_SO};
+return "Not run for embedded server" if $::opt_embedded_server;
+return "Test needs --big-test" unless $::opt_big_test;
+
+sub is_default { 1 }
+
+bless { };
+
diff --git a/storage/spider/mysql-test/spider/feature/t/rewrite.inc b/storage/spider/mysql-test/spider/feature/t/rewrite.inc
new file mode 100644
index 00000000000..37b96ddc79a
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/t/rewrite.inc
@@ -0,0 +1,60 @@
+--echo
+--echo drop and create databases
+
+--connection master_1
+--disable_warnings
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+
+--connection child2_1
+SET @old_log_output = @@global.log_output;
+SET GLOBAL log_output = 'TABLE,FILE';
+CREATE DATABASE auto_test_remote;
+CREATE DATABASE auto_test_remote2;
+CREATE DATABASE auto_test_remote3;
+CREATE DATABASE auto_test_remote4;
+--enable_warnings
+
+--echo
+--echo create table and insert
+
+--connection child2_1
+TRUNCATE TABLE mysql.general_log;
+
+--connection master_1
+--disable_query_log
+echo CREATE TABLE tbl_a (
+ pkey int NOT NULL,
+ PRIMARY KEY (pkey)
+) CHILD2_1_ENGINE CHILD2_1_CHARSET;
+eval CREATE TABLE tbl_a (
+ pkey int NOT NULL,
+ PRIMARY KEY (pkey)
+) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
+--enable_query_log
+SHOW CREATE TABLE tbl_a;
+INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+
+--echo
+--echo select test
+SELECT * FROM tbl_a ORDER BY pkey;
+
+--connection child2_1
+eval $CHILD2_1_SELECT_ARGUMENT1;
+eval $CHILD2_1_SELECT_TABLES;
+
+--echo
+--echo deinit
+--disable_warnings
+
+--connection master_1
+DROP DATABASE IF EXISTS auto_test_local;
+
+--connection child2_1
+DROP DATABASE IF EXISTS auto_test_remote;
+DROP DATABASE IF EXISTS auto_test_remote2;
+DROP DATABASE IF EXISTS auto_test_remote3;
+DROP DATABASE IF EXISTS auto_test_remote4;
+SET GLOBAL log_output = @old_log_output;
+
+--enable_warnings
diff --git a/storage/spider/mysql-test/spider/feature/t/rewrite_partition.cnf b/storage/spider/mysql-test/spider/feature/t/rewrite_partition.cnf
new file mode 100644
index 00000000000..05dfd8a0bce
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/t/rewrite_partition.cnf
@@ -0,0 +1,3 @@
+!include include/default_mysqld.cnf
+!include ../my_1_1.cnf
+!include ../my_2_1.cnf
diff --git a/storage/spider/mysql-test/spider/feature/t/rewrite_partition.test b/storage/spider/mysql-test/spider/feature/t/rewrite_partition.test
new file mode 100644
index 00000000000..0e32bb7ae13
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/t/rewrite_partition.test
@@ -0,0 +1,12 @@
+--source ../include/rewrite_partition_init.inc
+--echo
+--echo this test is for MDEV-16967
+if (!$HAVE_PARTITION)
+{
+ --source ../include/rewrite_partition_deinit.inc
+ skip Test requires partitioning;
+}
+--source rewrite.inc
+--source ../include/rewrite_partition_deinit.inc
+--echo
+--echo end of test
diff --git a/storage/spider/mysql-test/spider/feature/t/rewrite_simple.cnf b/storage/spider/mysql-test/spider/feature/t/rewrite_simple.cnf
new file mode 100644
index 00000000000..05dfd8a0bce
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/t/rewrite_simple.cnf
@@ -0,0 +1,3 @@
+!include include/default_mysqld.cnf
+!include ../my_1_1.cnf
+!include ../my_2_1.cnf
diff --git a/storage/spider/mysql-test/spider/feature/t/rewrite_simple.test b/storage/spider/mysql-test/spider/feature/t/rewrite_simple.test
new file mode 100644
index 00000000000..a9e7307524f
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/t/rewrite_simple.test
@@ -0,0 +1,7 @@
+--source ../include/rewrite_simple_init.inc
+--echo
+--echo this test is for MDEV-16967
+--source rewrite.inc
+--source ../include/rewrite_simple_deinit.inc
+--echo
+--echo end of test
diff --git a/storage/spider/mysql-test/spider/feature/t/rewrite_subpartition.cnf b/storage/spider/mysql-test/spider/feature/t/rewrite_subpartition.cnf
new file mode 100644
index 00000000000..05dfd8a0bce
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/t/rewrite_subpartition.cnf
@@ -0,0 +1,3 @@
+!include include/default_mysqld.cnf
+!include ../my_1_1.cnf
+!include ../my_2_1.cnf
diff --git a/storage/spider/mysql-test/spider/feature/t/rewrite_subpartition.test b/storage/spider/mysql-test/spider/feature/t/rewrite_subpartition.test
new file mode 100644
index 00000000000..c66de169512
--- /dev/null
+++ b/storage/spider/mysql-test/spider/feature/t/rewrite_subpartition.test
@@ -0,0 +1,12 @@
+--source ../include/rewrite_subpartition_init.inc
+--echo
+--echo this test is for MDEV-16967
+if (!$HAVE_PARTITION)
+{
+ --source ../include/rewrite_subpartition_deinit.inc
+ skip Test requires partitioning;
+}
+--source rewrite.inc
+--source ../include/rewrite_subpartition_deinit.inc
+--echo
+--echo end of test
diff --git a/storage/spider/mysql-test/spider/include/checksum_table_with_quick_mode_3_deinit.inc b/storage/spider/mysql-test/spider/include/checksum_table_with_quick_mode_3_deinit.inc
index 7db871c700f..d551f5a4af3 100644
--- a/storage/spider/mysql-test/spider/include/checksum_table_with_quick_mode_3_deinit.inc
+++ b/storage/spider/mysql-test/spider/include/checksum_table_with_quick_mode_3_deinit.inc
@@ -1,3 +1,5 @@
+--let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
+--let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
--let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
--let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
--let $OUTPUT_CHILD_GROUP2= $OUTPUT_CHILD_GROUP2_BACKUP
diff --git a/storage/spider/mysql-test/spider/include/deinit_spider.inc b/storage/spider/mysql-test/spider/include/deinit_spider.inc
index 3609551e169..d915a998000 100644
--- a/storage/spider/mysql-test/spider/include/deinit_spider.inc
+++ b/storage/spider/mysql-test/spider/include/deinit_spider.inc
@@ -1,8 +1,38 @@
+let $SERVER_NAME=
+ `SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(version(), '-', 2), '-', -1)`;
+let $SERVER_MAJOR_VERSION=
+ `SELECT SUBSTRING_INDEX(version(), '.', 1)`;
+let $SERVER_MINOR_VERSION=
+ `SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(version(), '.', 2), '.', -1)`;
+let $PLUGIN_VERSION=
+ `SELECT SUBSTRING_INDEX(plugin_version, '.', 1)
+ FROM information_schema.plugins
+ WHERE plugin_name = 'SPIDER'`;
+if (`SELECT IF($PLUGIN_VERSION = 3, 1, 0)`)
+{
+ let $HAS_REWRITE=
+ `SELECT IF (STRCMP('$SERVER_NAME', 'MariaDB') = 0,
+ IF ($SERVER_MAJOR_VERSION = 10,
+ IF ($SERVER_MINOR_VERSION < 4, 0, 1),
+ IF ($SERVER_MAJOR_VERSION < 10, 0, 1)),
+ 0)`;
+ if ($HAS_REWRITE)
+ {
+ DROP FUNCTION spider_flush_rewrite_cache;
+ UNINSTALL PLUGIN spider_rewrite;
+ DROP TABLE IF EXISTS mysql.spider_rewrite_tables;
+ DROP TABLE IF EXISTS mysql.spider_rewrite_table_tables;
+ DROP TABLE IF EXISTS mysql.spider_rewrite_table_partitions;
+ DROP TABLE IF EXISTS mysql.spider_rewrite_table_subpartitions;
+ DROP TABLE IF EXISTS mysql.spider_rewritten_tables;
+ }
+}
DROP FUNCTION spider_direct_sql;
DROP FUNCTION spider_bg_direct_sql;
DROP FUNCTION spider_ping_table;
DROP FUNCTION spider_copy_tables;
DROP FUNCTION spider_flush_table_mon_cache;
+UNINSTALL PLUGIN spider_alloc_mem;
UNINSTALL PLUGIN spider;
DROP TABLE IF EXISTS mysql.spider_xa;
DROP TABLE IF EXISTS mysql.spider_xa_member;
diff --git a/storage/spider/mysql-test/spider/include/init_spider.inc b/storage/spider/mysql-test/spider/include/init_spider.inc
index 1da1ec970b5..67d94542baf 100644
--- a/storage/spider/mysql-test/spider/include/init_spider.inc
+++ b/storage/spider/mysql-test/spider/include/init_spider.inc
@@ -3,6 +3,7 @@ let $VERSION_COMPILE_OS_WIN=
if ($VERSION_COMPILE_OS_WIN)
{
INSTALL PLUGIN spider SONAME 'ha_spider.dll';
+ INSTALL PLUGIN spider_alloc_mem SONAME 'ha_spider.dll';
CREATE FUNCTION spider_direct_sql RETURNS INT SONAME 'ha_spider.dll';
CREATE AGGREGATE FUNCTION spider_bg_direct_sql RETURNS INT SONAME 'ha_spider.dll';
CREATE FUNCTION spider_ping_table RETURNS INT SONAME 'ha_spider.dll';
@@ -54,6 +55,7 @@ if ($VERSION_COMPILE_OS_WIN)
if (!$VERSION_COMPILE_OS_WIN)
{
INSTALL PLUGIN spider SONAME 'ha_spider.so';
+ INSTALL PLUGIN spider_alloc_mem SONAME 'ha_spider.so';
CREATE FUNCTION spider_direct_sql RETURNS INT SONAME 'ha_spider.so';
CREATE AGGREGATE FUNCTION spider_bg_direct_sql RETURNS INT SONAME 'ha_spider.so';
CREATE FUNCTION spider_ping_table RETURNS INT SONAME 'ha_spider.so';
@@ -420,6 +422,80 @@ if (`SELECT IF($PLUGIN_VERSION = 3, 1, 0)`)
cardinality bigint not null default 0,
primary key (db_name, table_name, key_seq)
) ENGINE=$ENGINE_NAME DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+ let $HAS_REWRITE=
+ `SELECT IF (STRCMP('$SERVER_NAME', 'MariaDB') = 0,
+ IF ($SERVER_MAJOR_VERSION = 10,
+ IF ($SERVER_MINOR_VERSION < 4, 0, 1),
+ IF ($SERVER_MAJOR_VERSION < 10, 0, 1)),
+ 0)`;
+ if ($HAS_REWRITE)
+ {
+ DROP TABLE IF EXISTS mysql.spider_rewrite_tables;
+ CREATE TABLE mysql.spider_rewrite_tables(
+ table_id bigint unsigned not null auto_increment,
+ db_name char(64) not null default '',
+ table_name char(64) not null default '',
+ primary key (table_id),
+ unique uk1(db_name, table_name)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ DROP TABLE IF EXISTS mysql.spider_rewrite_table_partitions;
+ CREATE TABLE mysql.spider_rewrite_table_tables(
+ table_id bigint unsigned not null,
+ partition_id bigint unsigned not null auto_increment,
+ partition_method varchar(18) default '',
+ partition_expression varchar(64) default '',
+ subpartition_method varchar(12) default '',
+ subpartition_expression varchar(64) default '',
+ connection_str text not null default '',
+ comment_str text not null default '',
+ primary key (table_id, partition_id),
+ unique uk1(table_id, partition_method, partition_expression, subpartition_method, subpartition_expression)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ DROP TABLE IF EXISTS mysql.spider_rewrite_table_partition_partitions;
+ CREATE TABLE mysql.spider_rewrite_table_partitions(
+ table_id bigint unsigned not null,
+ partition_id bigint unsigned not null,
+ partition_ordinal_position bigint unsigned not null auto_increment,
+ partition_name varchar(64) not null default '',
+ partition_description varchar(64) not null default '',
+ connection_str text not null default '',
+ comment_str text not null default '',
+ primary key (table_id, partition_id, partition_ordinal_position),
+ unique key uk1 (table_id, partition_id, partition_name)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ DROP TABLE IF EXISTS mysql.spider_rewrite_table_partition_subpartitions;
+ CREATE TABLE mysql.spider_rewrite_table_subpartitions(
+ table_id bigint unsigned not null,
+ partition_id bigint unsigned not null,
+ partition_ordinal_position bigint unsigned not null,
+ subpartition_ordinal_position bigint unsigned not null auto_increment,
+ subpartition_name varchar(64) not null default '',
+ subpartition_description varchar(64) not null default '',
+ connection_str text not null default '',
+ comment_str text not null default '',
+ primary key (table_id, partition_id, partition_ordinal_position, subpartition_ordinal_position),
+ unique key uk1 (table_id, partition_id, partition_ordinal_position, subpartition_name)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ DROP TABLE IF EXISTS mysql.spider_rewritten_tables;
+ CREATE TABLE mysql.spider_rewritten_tables(
+ db_name char(64) not null,
+ table_name char(64) not null,
+ table_id bigint unsigned not null,
+ partition_id bigint unsigned not null,
+ primary key (db_name, table_name, table_id, partition_id)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ if ($VERSION_COMPILE_OS_WIN)
+ {
+ INSTALL PLUGIN spider_rewrite SONAME 'ha_spider.dll';
+ CREATE FUNCTION spider_flush_rewrite_cache RETURNS INT SONAME 'ha_spider.dll';
+ }
+ if (!$VERSION_COMPILE_OS_WIN)
+ {
+ INSTALL PLUGIN spider_rewrite SONAME 'ha_spider.so';
+ CREATE FUNCTION spider_flush_rewrite_cache RETURNS INT SONAME 'ha_spider.so';
+ }
+ }
}
SET spider_internal_sql_log_off= 0;
diff --git a/storage/spider/mysql-test/spider/r/show_system_tables.result b/storage/spider/mysql-test/spider/r/show_system_tables.result
index 67411862e00..85ceb24bf32 100644
--- a/storage/spider/mysql-test/spider/r/show_system_tables.result
+++ b/storage/spider/mysql-test/spider/r/show_system_tables.result
@@ -15,6 +15,11 @@ WHERE table_schema = 'mysql' AND table_name like '%spider_%';
table_name engine
spider_link_failed_log Aria
spider_link_mon_servers Aria
+spider_rewrite_table_partitions Aria
+spider_rewrite_table_subpartitions Aria
+spider_rewrite_table_tables Aria
+spider_rewrite_tables Aria
+spider_rewritten_tables Aria
spider_table_crd Aria
spider_table_position_for_recovery Aria
spider_table_sts Aria
diff --git a/storage/spider/scripts/install_spider.sql b/storage/spider/scripts/install_spider.sql
index 904288f4237..cdc944ed600 100644
--- a/storage/spider/scripts/install_spider.sql
+++ b/storage/spider/scripts/install_spider.sql
@@ -1,4 +1,4 @@
-# Copyright (C) 2010-2018 Kentoku Shiba
+# Copyright (C) 2010-2019 Kentoku Shiba
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -481,6 +481,57 @@ begin
alter table mysql.spider_xa_member
engine=Aria transactional=1;
end if;
+
+ /* table for ddl pushdown */
+ create table if not exists mysql.spider_rewrite_tables(
+ table_id bigint unsigned not null auto_increment,
+ db_name char(64) not null default '',
+ table_name char(64) not null default '',
+ primary key (table_id),
+ unique uk1(db_name, table_name)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ create table if not exists mysql.spider_rewrite_table_tables(
+ table_id bigint unsigned not null,
+ partition_id bigint unsigned not null auto_increment,
+ partition_method varchar(18) default '',
+ partition_expression varchar(64) default '',
+ subpartition_method varchar(12) default '',
+ subpartition_expression varchar(64) default '',
+ connection_str text not null default '',
+ comment_str text not null default '',
+ primary key (table_id, partition_id),
+ unique uk1(table_id, partition_method, partition_expression, subpartition_method, subpartition_expression)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ create table if not exists mysql.spider_rewrite_table_partitions(
+ table_id bigint unsigned not null,
+ partition_id bigint unsigned not null,
+ partition_ordinal_position bigint unsigned not null auto_increment,
+ partition_name varchar(64) not null default '',
+ partition_description varchar(64) not null default '',
+ connection_str text not null default '',
+ comment_str text not null default '',
+ primary key (table_id, partition_id, partition_ordinal_position),
+ unique key uk1 (table_id, partition_id, partition_name)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ create table if not exists mysql.spider_rewrite_table_subpartitions(
+ table_id bigint unsigned not null,
+ partition_id bigint unsigned not null,
+ partition_ordinal_position bigint unsigned not null,
+ subpartition_ordinal_position bigint unsigned not null auto_increment,
+ subpartition_name varchar(64) not null default '',
+ subpartition_description varchar(64) not null default '',
+ connection_str text not null default '',
+ comment_str text not null default '',
+ primary key (table_id, partition_id, partition_ordinal_position, subpartition_ordinal_position),
+ unique key uk1 (table_id, partition_id, partition_ordinal_position, subpartition_name)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
+ create table if not exists mysql.spider_rewritten_tables(
+ db_name char(64) not null,
+ table_name char(64) not null,
+ table_id bigint unsigned not null,
+ partition_id bigint unsigned not null,
+ primary key (db_name, table_name, table_id, partition_id)
+ ) engine=Aria transactional=1 default charset=utf8 collate=utf8_bin;
end if;
end;//
delimiter ;
@@ -566,7 +617,6 @@ begin
create function spider_copy_tables returns int soname 'ha_spider.dll';
end if;
end if;
-
set @have_spider_flush_table_mon_cache_udf := 0;
select @have_spider_flush_table_mon_cache_udf := 1 from mysql.func where name = 'spider_flush_table_mon_cache';
if @have_spider_flush_table_mon_cache_udf = 0 then
@@ -576,7 +626,43 @@ begin
create function spider_flush_table_mon_cache returns int soname 'ha_spider.dll';
end if;
end if;
-
+ if @server_name = 'MariaDB' and
+ (
+ @server_major_version > 10 or
+ (
+ @server_major_version = 10 and
+ @server_minor_version >= 4
+ )
+ )
+ then
+ set @have_spider_i_s_rewrite_plugin := 0;
+ select @have_spider_i_s_rewrite_plugin := 1 from INFORMATION_SCHEMA.plugins where PLUGIN_NAME = 'SPIDER_REWRITE';
+ set @have_spider_rewrite_plugin := 0;
+ select @have_spider_rewrite_plugin := 1 from mysql.plugin where name = 'spider_rewrite';
+ if @have_spider_i_s_rewrite_plugin = 0 then
+ if @have_spider_rewrite_plugin = 1 then
+ -- spider_rewrite plugin is present in mysql.plugin but not in
+ -- information_schema.plugins. Remove spider_rewrite plugin entry
+ -- in mysql.plugin first.
+ delete from mysql.plugin where name = 'spider_rewrite';
+ end if;
+ -- Install spider_rewrite plugin
+ if @win_plugin = 0 then
+ install plugin spider_rewrite soname 'ha_spider.so';
+ else
+ install plugin spider_rewrite soname 'ha_spider.dll';
+ end if;
+ end if;
+ set @have_spider_flush_rewrite_cache_udf := 0;
+ select @have_spider_flush_rewrite_cache_udf := 1 from mysql.func where name = 'spider_flush_rewrite_cache';
+ if @have_spider_flush_rewrite_cache_udf = 0 then
+ if @win_plugin = 0 then
+ create function spider_flush_rewrite_cache returns int soname 'ha_spider.so';
+ else
+ create function spider_flush_rewrite_cache returns int soname 'ha_spider.dll';
+ end if;
+ end if;
+ end if;
end;//
delimiter ;
call mysql.spider_plugin_installer;
diff --git a/storage/spider/spd_db_conn.cc b/storage/spider/spd_db_conn.cc
index c2cd4beccdb..50e667c7009 100644
--- a/storage/spider/spd_db_conn.cc
+++ b/storage/spider/spd_db_conn.cc
@@ -948,23 +948,29 @@ int spider_db_query_with_set_names(
int link_idx
) {
int error_num;
+ bool mta_conn_mutex_lock_already = conn->mta_conn_mutex_lock_already;
+ bool mta_conn_mutex_unlock_later = conn->mta_conn_mutex_unlock_later;
SPIDER_SHARE *share = spider->share;
spider_db_handler *dbton_hdl = spider->dbton_handler[conn->dbton_id];
DBUG_ENTER("spider_db_query_with_set_names");
-/*
- pthread_mutex_lock(&conn->mta_conn_mutex);
- SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
-*/
- conn->need_mon = &spider->need_mons[link_idx];
- conn->mta_conn_mutex_lock_already = TRUE;
+ if (!mta_conn_mutex_lock_already)
+ {
+ pthread_mutex_lock(&conn->mta_conn_mutex);
+ SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
+ conn->need_mon = &spider->need_mons[link_idx];
+ conn->mta_conn_mutex_lock_already = TRUE;
+ }
conn->mta_conn_mutex_unlock_later = TRUE;
if ((error_num = spider_db_set_names(spider, conn, link_idx)))
{
- conn->mta_conn_mutex_lock_already = FALSE;
- conn->mta_conn_mutex_unlock_later = FALSE;
- SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
- pthread_mutex_unlock(&conn->mta_conn_mutex);
+ conn->mta_conn_mutex_lock_already = mta_conn_mutex_lock_already;
+ if (!mta_conn_mutex_unlock_later)
+ {
+ conn->mta_conn_mutex_unlock_later = FALSE;
+ SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
+ pthread_mutex_unlock(&conn->mta_conn_mutex);
+ }
if (
share->monitoring_kind[link_idx] &&
spider->need_mons[link_idx]
@@ -996,8 +1002,8 @@ int spider_db_query_with_set_names(
-1,
&spider->need_mons[link_idx])
) {
- conn->mta_conn_mutex_lock_already = FALSE;
- conn->mta_conn_mutex_unlock_later = FALSE;
+ conn->mta_conn_mutex_lock_already = mta_conn_mutex_lock_already;
+ conn->mta_conn_mutex_unlock_later = mta_conn_mutex_unlock_later;
error_num = spider_db_errorno(conn);
if (
share->monitoring_kind[link_idx] &&
@@ -1022,10 +1028,13 @@ int spider_db_query_with_set_names(
}
DBUG_RETURN(error_num);
}
- conn->mta_conn_mutex_lock_already = FALSE;
- conn->mta_conn_mutex_unlock_later = FALSE;
- SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
- pthread_mutex_unlock(&conn->mta_conn_mutex);
+ conn->mta_conn_mutex_lock_already = mta_conn_mutex_lock_already;
+ if (!mta_conn_mutex_unlock_later)
+ {
+ conn->mta_conn_mutex_unlock_later = FALSE;
+ SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
+ pthread_mutex_unlock(&conn->mta_conn_mutex);
+ }
DBUG_RETURN(0);
}
@@ -7509,9 +7518,15 @@ int spider_db_delete(
pthread_mutex_lock(&conn->mta_conn_mutex);
SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
}
+ conn->mta_conn_mutex_lock_already = TRUE;
+ conn->need_mon = &spider->need_mons[roop_count];
if ((error_num = spider_db_query_with_set_names(
SPIDER_SQL_TYPE_DELETE_SQL, spider, conn, roop_count)))
+ {
+ conn->mta_conn_mutex_lock_already = FALSE;
DBUG_RETURN(error_num);
+ }
+ conn->mta_conn_mutex_lock_already = FALSE;
result_list->update_sqls[roop_count].length(0);
}
if ((error_num = spider->reset_sql_sql(SPIDER_SQL_TYPE_DELETE_SQL)))
diff --git a/storage/spider/spd_db_handlersocket.cc b/storage/spider/spd_db_handlersocket.cc
index 37bbe530723..dff63186ced 100644
--- a/storage/spider/spd_db_handlersocket.cc
+++ b/storage/spider/spd_db_handlersocket.cc
@@ -1,4 +1,5 @@
-/* Copyright (C) 2012-2018 Kentoku Shiba
+/* Copyright (C) 2012-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -126,6 +127,7 @@ SPIDER_DBTON spider_dbton_handlersocket = {
spider_handlersocket_create_handler,
NULL,
spider_handlersocket_create_conn,
+ NULL,
spider_handlersocket_support_direct_join,
&spider_db_handlersocket_utility
};
@@ -5738,6 +5740,16 @@ int spider_handlersocket_handler::set_sql_for_exec(
DBUG_RETURN(0);
}
+int spider_handlersocket_handler::set_sql_for_exec(
+ spider_db_sql *db_sql,
+ int link_idx
+) {
+ DBUG_ENTER("spider_handlersocket_handler::set_sql_for_exec");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_ASSERT(0);
+ DBUG_RETURN(0);
+}
+
int spider_handlersocket_handler::execute_sql(
ulong sql_type,
SPIDER_CONN *conn,
diff --git a/storage/spider/spd_db_handlersocket.h b/storage/spider/spd_db_handlersocket.h
index 075f8720abf..e86530eaea2 100644
--- a/storage/spider/spd_db_handlersocket.h
+++ b/storage/spider/spd_db_handlersocket.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2012-2018 Kentoku Shiba
+/* Copyright (C) 2012-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -910,6 +911,10 @@ public:
spider_db_copy_table *tgt_ct,
ulong sql_type
);
+ int set_sql_for_exec(
+ spider_db_sql *db_sql,
+ int link_idx
+ );
int execute_sql(
ulong sql_type,
SPIDER_CONN *conn,
diff --git a/storage/spider/spd_db_include.cc b/storage/spider/spd_db_include.cc
index 2910aa97690..a2f062e225b 100644
--- a/storage/spider/spd_db_include.cc
+++ b/storage/spider/spd_db_include.cc
@@ -1,4 +1,5 @@
/* Copyright (C) 2018-2019 Kentoku Shiba
+ Copyright (C) 2018-2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -14,6 +15,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#define MYSQL_LEX 1
#include <my_global.h>
#include "mysql_version.h"
#include "spd_environ.h"
@@ -24,13 +26,3796 @@
#include "sql_priv.h"
#include "probes_mysql.h"
#include "sql_class.h"
+#include "sql_lex.h"
#endif
-#include "sql_common.h"
-#include <mysql.h>
-#include <errmsg.h>
#include "spd_err.h"
#include "spd_db_include.h"
#include "spd_include.h"
+#include "spd_db_conn.h"
+#include "spd_malloc.h"
+
+spider_db_sql::~spider_db_sql()
+{
+ DBUG_ENTER("spider_db_sql::~spider_db_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (likely(sql_init))
+ {
+ delete [] sql_str;
+ }
+ DBUG_VOID_RETURN;
+}
+
+int spider_db_sql::init(
+ CHARSET_INFO *charset
+) {
+ uint roop_count;
+ DBUG_ENTER("spider_db_sql::init");
+ if (unlikely(!(sql_str = new spider_string[SPIDER_DB_SQL_STRINGS])))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ for (roop_count = 0; roop_count < SPIDER_DB_SQL_STRINGS; ++roop_count)
+ {
+ sql_str[roop_count].init_calc_mem(257);
+ sql_str[roop_count].set_charset(charset);
+ }
+ sql_init = TRUE;
+ DBUG_RETURN(0);
+}
+
+void spider_db_sql::reset(
+ CHARSET_INFO *charset
+) {
+ uint roop_count;
+ DBUG_ENTER("spider_db_sql::init");
+ for (roop_count = 0; roop_count < SPIDER_DB_SQL_STRINGS; ++roop_count)
+ {
+ sql_str[roop_count].length(0);
+ sql_str[roop_count].set_charset(charset);
+ }
+ DBUG_VOID_RETURN;
+}
+
+void spider_db_sql::set_quote_char_for_ident(
+ LEX_CSTRING quote_char
+) {
+ DBUG_ENTER("spider_db_sql::set_quote_char_for_ident");
+ quote_char_for_ident = quote_char;
+ DBUG_VOID_RETURN;
+}
+
+int spider_db_sql::append_parsed_symbol(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ DBUG_ENTER("spider_db_sql::append_parsed_symbol");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(append_parsed_symbol(symbol_tok, yylval_tok, &sql_str[0]));
+}
+
+int spider_db_sql::append_parsed_symbol_ex(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ DBUG_ENTER("spider_db_sql::append_parsed_symbol_ex");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(append_parsed_symbol(symbol_tok, yylval_tok, &sql_str[1]));
+}
+
+int spider_db_sql::append_table_name_space(
+ uint str_id
+) {
+ spider_string *str = &sql_str[str_id];
+ DBUG_ENTER("spider_mysql_sql::append_table_name_space");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_PRINT("info",("spider str_id=%u", str_id));
+ DBUG_PRINT("info",("spider table_name_pos=%u", str->length()));
+ table_name_pos[str_id] = str->length();
+ if (str->reserve(SPIDER_TABLE_NAME_SPACE))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ memset((char *) str->ptr() + str->length(), ' ', SPIDER_TABLE_NAME_SPACE);
+ str->length(str->length() + SPIDER_TABLE_NAME_SPACE);
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_table_name_space()
+{
+ DBUG_ENTER("spider_mysql_sql::append_table_name_space");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(append_table_name_space(0));
+}
+
+void spider_db_sql::set_sql_end_pos()
+{
+ DBUG_ENTER("spider_mysql_sql::set_sql_end_pos");
+ DBUG_PRINT("info",("spider this=%p", this));
+ sql_end_pos[0] = sql_str[0].length();
+ sql_end_pos[1] = sql_str[1].length();
+ DBUG_VOID_RETURN;
+}
+
+int spider_db_sql::append_parsed_symbol(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok,
+ spider_string *str
+) {
+ DBUG_ENTER("spider_db_sql::append_parsed_symbol");
+ if (symbol_tok < 256)
+ {
+ uchar single_char = (uchar) symbol_tok;
+ if (str->append((char *) &single_char, 1))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(0);
+ }
+ switch (symbol_tok)
+ {
+ case AND_AND_SYM:
+ DBUG_PRINT("info",("spider AND_AND_SYM"));
+ if (str->append(STRING_WITH_LEN("&& "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LE:
+ DBUG_PRINT("info",("spider LE"));
+ if (str->append(STRING_WITH_LEN("<= "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NE:
+ DBUG_PRINT("info",("spider NE"));
+ if (str->append(STRING_WITH_LEN("!= "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case NEG:
+ DBUG_PRINT("info",("spider NEG"));
+ if (str->append(STRING_WITH_LEN("!"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case GE:
+ DBUG_PRINT("info",("spider GE"));
+ if (str->append(STRING_WITH_LEN(">= "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SHIFT_LEFT:
+ DBUG_PRINT("info",("spider SHIFT_LEFT"));
+ if (str->append(STRING_WITH_LEN("<< "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SHIFT_RIGHT:
+ DBUG_PRINT("info",("spider SHIFT_RIGHT"));
+ if (str->append(STRING_WITH_LEN(">> "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EQUAL_SYM:
+ DBUG_PRINT("info",("spider EQUAL_SYM"));
+ if (str->append(STRING_WITH_LEN("<=> "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ACCESSIBLE_SYM:
+ DBUG_PRINT("info",("spider ACCESSIBLE_SYM"));
+ if (str->append(STRING_WITH_LEN("ACCESSIBLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_4
+ case ACCOUNT_SYM:
+ DBUG_PRINT("info",("spider ACCOUNT_SYM"));
+ if (str->append(STRING_WITH_LEN("ACCOUNT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case ACTION:
+ DBUG_PRINT("info",("spider ACTION"));
+ if (str->append(STRING_WITH_LEN("ACTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ADD:
+ DBUG_PRINT("info",("spider ADD"));
+ if (str->append(STRING_WITH_LEN("ADD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ADMIN_SYM:
+ DBUG_PRINT("info",("spider ADMIN_SYM"));
+ if (str->append(STRING_WITH_LEN("ADMIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AFTER_SYM:
+ DBUG_PRINT("info",("spider AFTER_SYM"));
+ if (str->append(STRING_WITH_LEN("AFTER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AGAINST:
+ DBUG_PRINT("info",("spider AGAINST"));
+ if (str->append(STRING_WITH_LEN("AGAINST "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AGGREGATE_SYM:
+ DBUG_PRINT("info",("spider AGGREGATE_SYM"));
+ if (str->append(STRING_WITH_LEN("AGGREGATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ALL: /* ALL */
+ DBUG_PRINT("info",("spider ALL"));
+ if (str->append(STRING_WITH_LEN("ALL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ALGORITHM_SYM:
+ DBUG_PRINT("info",("spider ALGORITHM_SYM"));
+ if (str->append(STRING_WITH_LEN("ALGORITHM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ALTER:
+ DBUG_PRINT("info",("spider ALTER"));
+ if (str->append(STRING_WITH_LEN("ALTER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ALWAYS_SYM:
+ DBUG_PRINT("info",("spider ALWAYS_SYM"));
+ if (str->append(STRING_WITH_LEN("ALWAYS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ANALYZE_SYM:
+ DBUG_PRINT("info",("spider ANALYZE_SYM"));
+ if (str->append(STRING_WITH_LEN("ANALYZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AND_SYM:
+ DBUG_PRINT("info",("spider AND_SYM"));
+ if (str->append(STRING_WITH_LEN("AND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ANY_SYM:
+ DBUG_PRINT("info",("spider ANY_SYM"));
+ if (str->append(STRING_WITH_LEN("ANY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AS:
+ DBUG_PRINT("info",("spider AS"));
+ if (str->append(STRING_WITH_LEN("AS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ASC:
+ DBUG_PRINT("info",("spider ASC"));
+ if (str->append(STRING_WITH_LEN("ASC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ASCII_SYM:
+ DBUG_PRINT("info",("spider ASCII_SYM"));
+ if (str->append(STRING_WITH_LEN("ASCII "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ASENSITIVE_SYM:
+ DBUG_PRINT("info",("spider ASENSITIVE_SYM"));
+ if (str->append(STRING_WITH_LEN("ASENSITIVE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AT_SYM:
+ DBUG_PRINT("info",("spider AT_SYM"));
+ if (str->append(STRING_WITH_LEN("AT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ATOMIC_SYM:
+ DBUG_PRINT("info",("spider ATOMIC_SYM"));
+ if (str->append(STRING_WITH_LEN("ATOMIC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AUTHORS_SYM:
+ DBUG_PRINT("info",("spider AUTHORS_SYM"));
+ if (str->append(STRING_WITH_LEN("AUTHORS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AUTO_INC:
+ DBUG_PRINT("info",("spider AUTO_INC"));
+ if (str->append(STRING_WITH_LEN("AUTO_INCREMENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AUTOEXTEND_SIZE_SYM:
+ DBUG_PRINT("info",("spider AUTOEXTEND_SIZE_SYM"));
+ if (str->append(STRING_WITH_LEN("AUTOEXTEND_SIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AUTO_SYM:
+ DBUG_PRINT("info",("spider AUTO_SYM"));
+ if (str->append(STRING_WITH_LEN("AUTO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AVG_SYM:
+ DBUG_PRINT("info",("spider AVG_SYM"));
+ if (str->append(STRING_WITH_LEN("AVG "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case AVG_ROW_LENGTH:
+ DBUG_PRINT("info",("spider AVG_ROW_LENGTH"));
+ if (str->append(STRING_WITH_LEN("AVG_ROW_LENGTH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BACKUP_SYM:
+ DBUG_PRINT("info",("spider BACKUP_SYM"));
+ if (str->append(STRING_WITH_LEN("BACKUP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BEFORE_SYM:
+ DBUG_PRINT("info",("spider BEFORE_SYM"));
+ if (str->append(STRING_WITH_LEN("BEFORE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case BEGIN_MARIADB_SYM:
+ DBUG_PRINT("info",("spider BEGIN_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("BEGIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BEGIN_ORACLE_SYM:
+ DBUG_PRINT("info",("spider BEGIN_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("BEGIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case BEGIN_SYM:
+ DBUG_PRINT("info",("spider BEGIN_SYM"));
+ if (str->append(STRING_WITH_LEN("BEGIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case BETWEEN_SYM:
+ DBUG_PRINT("info",("spider BETWEEN_SYM"));
+ if (str->append(STRING_WITH_LEN("BETWEEN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BIGINT:
+ DBUG_PRINT("info",("spider BIGINT"));
+ if (str->append(STRING_WITH_LEN("BIGINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BINARY:
+ DBUG_PRINT("info",("spider BINARY"));
+ if (str->append(STRING_WITH_LEN("BINARY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BINLOG_SYM:
+ DBUG_PRINT("info",("spider BINLOG_SYM"));
+ if (str->append(STRING_WITH_LEN("BINLOG "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BIT_SYM:
+ DBUG_PRINT("info",("spider BIT_SYM"));
+ if (str->append(STRING_WITH_LEN("BIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case BLOB_MARIADB_SYM:
+ DBUG_PRINT("info",("spider BLOB_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("BLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BLOB_ORACLE_SYM:
+ DBUG_PRINT("info",("spider BLOB_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("BLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case BLOB_SYM:
+ DBUG_PRINT("info",("spider BLOB_SYM"));
+ if (str->append(STRING_WITH_LEN("BLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case BLOCK_SYM:
+ DBUG_PRINT("info",("spider BLOCK_SYM"));
+ if (str->append(STRING_WITH_LEN("BLOCK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case BODY_MARIADB_SYM:
+ DBUG_PRINT("info",("spider BODY_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("BODY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BODY_ORACLE_SYM:
+ DBUG_PRINT("info",("spider BODY_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("BODY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case BODY_SYM:
+ DBUG_PRINT("info",("spider BODY_SYM"));
+ if (str->append(STRING_WITH_LEN("BODY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case BOOL_SYM:
+ DBUG_PRINT("info",("spider BOOL_SYM"));
+ if (str->append(STRING_WITH_LEN("BOOL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BOOLEAN_SYM:
+ DBUG_PRINT("info",("spider BOOLEAN_SYM"));
+ if (str->append(STRING_WITH_LEN("BOOLEAN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BOTH:
+ DBUG_PRINT("info",("spider BOTH"));
+ if (str->append(STRING_WITH_LEN("BOTH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BTREE_SYM:
+ DBUG_PRINT("info",("spider BTREE_SYM"));
+ if (str->append(STRING_WITH_LEN("BTREE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BY:
+ DBUG_PRINT("info",("spider BY"));
+ if (str->append(STRING_WITH_LEN("BY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BYTE_SYM:
+ DBUG_PRINT("info",("spider BYTE_SYM"));
+ if (str->append(STRING_WITH_LEN("BYTE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CACHE_SYM:
+ DBUG_PRINT("info",("spider CACHE_SYM"));
+ if (str->append(STRING_WITH_LEN("CACHE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CALL_SYM:
+ DBUG_PRINT("info",("spider CALL_SYM"));
+ if (str->append(STRING_WITH_LEN("CALL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CASCADE:
+ DBUG_PRINT("info",("spider CASCADE"));
+ if (str->append(STRING_WITH_LEN("CASCADE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CASCADED:
+ DBUG_PRINT("info",("spider CASCADED"));
+ if (str->append(STRING_WITH_LEN("CASCADED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CASE_SYM:
+ DBUG_PRINT("info",("spider CASE_SYM"));
+ if (str->append(STRING_WITH_LEN("CASE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CATALOG_NAME_SYM:
+ DBUG_PRINT("info",("spider CATALOG_NAME_SYM"));
+ if (str->append(STRING_WITH_LEN("CATALOG_NAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CHAIN_SYM:
+ DBUG_PRINT("info",("spider CHAIN_SYM"));
+ if (str->append(STRING_WITH_LEN("CHAIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CHANGE:
+ DBUG_PRINT("info",("spider CHANGE"));
+ if (str->append(STRING_WITH_LEN("CHANGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CHANGED:
+ DBUG_PRINT("info",("spider CHANGED"));
+ if (str->append(STRING_WITH_LEN("CHANGED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CHAR_SYM:
+ DBUG_PRINT("info",("spider CHAR_SYM"));
+ if (str->append(STRING_WITH_LEN("CHARACTER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CHARSET:
+ DBUG_PRINT("info",("spider CHARSET"));
+ if (str->append(STRING_WITH_LEN("CHARSET "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CHECK_SYM:
+ DBUG_PRINT("info",("spider CHECK_SYM"));
+ if (str->append(STRING_WITH_LEN("CHECK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CHECKPOINT_SYM:
+ DBUG_PRINT("info",("spider CHECKPOINT_SYM"));
+ if (str->append(STRING_WITH_LEN("CHECKPOINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CHECKSUM_SYM:
+ DBUG_PRINT("info",("spider CHECKSUM_SYM"));
+ if (str->append(STRING_WITH_LEN("CHECKSUM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CIPHER_SYM:
+ DBUG_PRINT("info",("spider CIPHER_SYM"));
+ if (str->append(STRING_WITH_LEN("CIPHER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CLASS_ORIGIN_SYM:
+ DBUG_PRINT("info",("spider CLASS_ORIGIN_SYM"));
+ if (str->append(STRING_WITH_LEN("CLASS_ORIGIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CLIENT_SYM:
+ DBUG_PRINT("info",("spider CLIENT_SYM"));
+ if (str->append(STRING_WITH_LEN("CLIENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case CLOB_MARIADB_SYM:
+ DBUG_PRINT("info",("spider CLOB_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("CLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CLOB_ORACLE_SYM:
+ DBUG_PRINT("info",("spider CLOB_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("CLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case CLOB:
+ DBUG_PRINT("info",("spider CLOB"));
+ if (str->append(STRING_WITH_LEN("CLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case CLOSE_SYM:
+ DBUG_PRINT("info",("spider CLOSE_SYM"));
+ if (str->append(STRING_WITH_LEN("CLOSE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COALESCE:
+ DBUG_PRINT("info",("spider COALESCE"));
+ if (str->append(STRING_WITH_LEN("COALESCE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CODE_SYM:
+ DBUG_PRINT("info",("spider CODE_SYM"));
+ if (str->append(STRING_WITH_LEN("CODE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLLATE_SYM:
+ DBUG_PRINT("info",("spider COLLATE_SYM"));
+ if (str->append(STRING_WITH_LEN("COLLATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLLATION_SYM:
+ DBUG_PRINT("info",("spider COLLATION_SYM"));
+ if (str->append(STRING_WITH_LEN("COLLATION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case COLON_ORACLE_SYM:
+ DBUG_PRINT("info",("spider COLON_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN(":"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case COLUMN_SYM:
+ DBUG_PRINT("info",("spider COLUMN_SYM"));
+ if (str->append(STRING_WITH_LEN("COLUMN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLUMN_NAME_SYM:
+ DBUG_PRINT("info",("spider COLUMN_NAME_SYM"));
+ if (str->append(STRING_WITH_LEN("COLUMN_NAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLUMNS:
+ DBUG_PRINT("info",("spider COLUMNS"));
+ if (str->append(STRING_WITH_LEN("COLUMNS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLUMN_ADD_SYM:
+ DBUG_PRINT("info",("spider COLUMN_ADD_SYM"));
+ if (str->append(STRING_WITH_LEN("COLUMN_ADD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLUMN_CHECK_SYM:
+ DBUG_PRINT("info",("spider COLUMN_CHECK_SYM"));
+ if (str->append(STRING_WITH_LEN("COLUMN_CHECK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLUMN_CREATE_SYM:
+ DBUG_PRINT("info",("spider COLUMN_CREATE_SYM"));
+ if (str->append(STRING_WITH_LEN("COLUMN_CREATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLUMN_DELETE_SYM:
+ DBUG_PRINT("info",("spider COLUMN_DELETE_SYM"));
+ if (str->append(STRING_WITH_LEN("COLUMN_DELETE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COLUMN_GET_SYM:
+ DBUG_PRINT("info",("spider COLUMN_GET_SYM"));
+ if (str->append(STRING_WITH_LEN("COLUMN_GET "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COMMENT_SYM:
+ DBUG_PRINT("info",("spider COMMENT_SYM"));
+ if (str->append(STRING_WITH_LEN("COMMENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COMMIT_SYM:
+ DBUG_PRINT("info",("spider COMMIT_SYM"));
+ if (str->append(STRING_WITH_LEN("COMMIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COMMITTED_SYM:
+ DBUG_PRINT("info",("spider COMMITTED_SYM"));
+ if (str->append(STRING_WITH_LEN("COMMITTED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COMPACT_SYM:
+ DBUG_PRINT("info",("spider COMPACT_SYM"));
+ if (str->append(STRING_WITH_LEN("COMPACT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COMPLETION_SYM:
+ DBUG_PRINT("info",("spider COMPLETION_SYM"));
+ if (str->append(STRING_WITH_LEN("COMPLETION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COMPRESSED_SYM:
+ DBUG_PRINT("info",("spider COMPRESSED_SYM"));
+ if (str->append(STRING_WITH_LEN("COMPRESSED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONCURRENT:
+ DBUG_PRINT("info",("spider CONCURRENT"));
+ if (str->append(STRING_WITH_LEN("CONCURRENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONDITION_SYM:
+ DBUG_PRINT("info",("spider CONDITION_SYM"));
+ if (str->append(STRING_WITH_LEN("CONDITION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONNECTION_SYM:
+ DBUG_PRINT("info",("spider CONNECTION_SYM"));
+ if (str->append(STRING_WITH_LEN("CONNECTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONSISTENT_SYM:
+ DBUG_PRINT("info",("spider CONSISTENT_SYM"));
+ if (str->append(STRING_WITH_LEN("CONSISTENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONSTRAINT:
+ DBUG_PRINT("info",("spider CONSTRAINT"));
+ if (str->append(STRING_WITH_LEN("CONSTRAINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONSTRAINT_CATALOG_SYM:
+ DBUG_PRINT("info",("spider CONSTRAINT_CATALOG_SYM"));
+ if (str->append(STRING_WITH_LEN("CONSTRAINT_CATALOG "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONSTRAINT_NAME_SYM:
+ DBUG_PRINT("info",("spider CONSTRAINT_NAME_SYM"));
+ if (str->append(STRING_WITH_LEN("CONSTRAINT_NAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONSTRAINT_SCHEMA_SYM:
+ DBUG_PRINT("info",("spider CONSTRAINT_SCHEMA_SYM"));
+ if (str->append(STRING_WITH_LEN("CONSTRAINT_SCHEMA "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONTAINS_SYM:
+ DBUG_PRINT("info",("spider CONTAINS_SYM"));
+ if (str->append(STRING_WITH_LEN("CONTAINS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONTEXT_SYM:
+ DBUG_PRINT("info",("spider CONTEXT_SYM"));
+ if (str->append(STRING_WITH_LEN("CONTEXT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case CONTINUE_MARIADB_SYM:
+ DBUG_PRINT("info",("spider CONTINUE_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("CONTINUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONTINUE_ORACLE_SYM:
+ DBUG_PRINT("info",("spider CONTINUE_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("CONTINUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case CONTINUE_SYM:
+ DBUG_PRINT("info",("spider CONTINUE_SYM"));
+ if (str->append(STRING_WITH_LEN("CONTINUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case CONTRIBUTORS_SYM:
+ DBUG_PRINT("info",("spider CONTRIBUTORS_SYM"));
+ if (str->append(STRING_WITH_LEN("CONTRIBUTORS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CONVERT_SYM:
+ DBUG_PRINT("info",("spider CONVERT_SYM"));
+ if (str->append(STRING_WITH_LEN("CONVERT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CPU_SYM:
+ DBUG_PRINT("info",("spider CPU_SYM"));
+ if (str->append(STRING_WITH_LEN("CPU "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CREATE: /* CREATE */
+ DBUG_PRINT("info",("spider CREATE"));
+ if (str->append(STRING_WITH_LEN("CREATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CROSS:
+ DBUG_PRINT("info",("spider CROSS"));
+ if (str->append(STRING_WITH_LEN("CROSS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CUBE_SYM:
+ DBUG_PRINT("info",("spider CUBE_SYM"));
+ if (str->append(STRING_WITH_LEN("CUBE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CURRENT_SYM:
+ DBUG_PRINT("info",("spider CURRENT_SYM"));
+ if (str->append(STRING_WITH_LEN("CURRENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CURDATE:
+ DBUG_PRINT("info",("spider CURDATE"));
+ if (str->append(STRING_WITH_LEN("CURRENT_DATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CURRENT_POS_SYM:
+ DBUG_PRINT("info",("spider CURRENT_POS_SYM"));
+ if (str->append(STRING_WITH_LEN("CURRENT_POS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CURRENT_ROLE:
+ DBUG_PRINT("info",("spider CURRENT_ROLE"));
+ if (str->append(STRING_WITH_LEN("CURRENT_ROLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CURTIME:
+ DBUG_PRINT("info",("spider CURTIME"));
+ if (str->append(STRING_WITH_LEN("CURRENT_TIME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NOW_SYM:
+ DBUG_PRINT("info",("spider NOW_SYM"));
+ if (str->append(STRING_WITH_LEN("CURRENT_TIMESTAMP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CURRENT_USER:
+ DBUG_PRINT("info",("spider CURRENT_USER"));
+ if (str->append(STRING_WITH_LEN("CURRENT_USER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CURSOR_SYM:
+ DBUG_PRINT("info",("spider CURSOR_SYM"));
+ if (str->append(STRING_WITH_LEN("CURSOR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CURSOR_NAME_SYM:
+ DBUG_PRINT("info",("spider CURSOR_NAME_SYM"));
+ if (str->append(STRING_WITH_LEN("CURSOR_NAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CYCLE_SYM:
+ DBUG_PRINT("info",("spider CYCLE_SYM"));
+ if (str->append(STRING_WITH_LEN("CYCLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATA_SYM:
+ DBUG_PRINT("info",("spider DATA_SYM"));
+ if (str->append(STRING_WITH_LEN("DATA "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATABASE:
+ DBUG_PRINT("info",("spider DATABASE"));
+ if (str->append(STRING_WITH_LEN("DATABASE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATABASES:
+ DBUG_PRINT("info",("spider DATABASES"));
+ if (str->append(STRING_WITH_LEN("DATABASES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATAFILE_SYM:
+ DBUG_PRINT("info",("spider DATAFILE_SYM"));
+ if (str->append(STRING_WITH_LEN("DATAFILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATE_SYM:
+ DBUG_PRINT("info",("spider DATE_SYM"));
+ if (str->append(STRING_WITH_LEN("DATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATETIME:
+ DBUG_PRINT("info",("spider DATETIME"));
+ if (str->append(STRING_WITH_LEN("DATETIME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DAY_SYM:
+ DBUG_PRINT("info",("spider DAY_SYM"));
+ if (str->append(STRING_WITH_LEN("DAY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DAY_HOUR_SYM:
+ DBUG_PRINT("info",("spider DAY_HOUR_SYM"));
+ if (str->append(STRING_WITH_LEN("DAY_HOUR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DAY_MICROSECOND_SYM:
+ DBUG_PRINT("info",("spider DAY_MICROSECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("DAY_MICROSECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DAY_MINUTE_SYM:
+ DBUG_PRINT("info",("spider DAY_MINUTE_SYM"));
+ if (str->append(STRING_WITH_LEN("DAY_MINUTE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DAY_SECOND_SYM:
+ DBUG_PRINT("info",("spider DAY_SECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("DAY_SECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DEALLOCATE_SYM :
+ DBUG_PRINT("info",("spider DEALLOCATE_SYM "));
+ if (str->append(STRING_WITH_LEN("DEALLOCATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DECIMAL_SYM:
+ DBUG_PRINT("info",("spider DECIMAL_SYM"));
+ if (str->append(STRING_WITH_LEN("DECIMAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case DECLARE_MARIADB_SYM:
+ DBUG_PRINT("info",("spider DECLARE_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("DECLARE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DECLARE_ORACLE_SYM:
+ DBUG_PRINT("info",("spider DECLARE_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("DECLARE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case DECLARE_SYM:
+ DBUG_PRINT("info",("spider DECLARE_SYM"));
+ if (str->append(STRING_WITH_LEN("DECLARE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case DEFAULT:
+ DBUG_PRINT("info",("spider DEFAULT"));
+ if (str->append(STRING_WITH_LEN("DEFAULT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DEFINER_SYM:
+ DBUG_PRINT("info",("spider DEFINER_SYM"));
+ if (str->append(STRING_WITH_LEN("DEFINER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DELAYED_SYM:
+ DBUG_PRINT("info",("spider DELAYED_SYM"));
+ if (str->append(STRING_WITH_LEN("DELAYED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DELAY_KEY_WRITE_SYM:
+ DBUG_PRINT("info",("spider DELAY_KEY_WRITE_SYM"));
+ if (str->append(STRING_WITH_LEN("DELAY_KEY_WRITE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DELETE_SYM:
+ DBUG_PRINT("info",("spider DELETE_SYM"));
+ if (str->append(STRING_WITH_LEN("DELETE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DELETE_DOMAIN_ID_SYM:
+ DBUG_PRINT("info",("spider DELETE_DOMAIN_ID_SYM"));
+ if (str->append(STRING_WITH_LEN("DELETE_DOMAIN_ID "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DESC:
+ DBUG_PRINT("info",("spider DESC"));
+ if (str->append(STRING_WITH_LEN("DESC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DESCRIBE:
+ DBUG_PRINT("info",("spider DESCRIBE"));
+ if (str->append(STRING_WITH_LEN("DESCRIBE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DES_KEY_FILE:
+ DBUG_PRINT("info",("spider DES_KEY_FILE"));
+ if (str->append(STRING_WITH_LEN("DES_KEY_FILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DETERMINISTIC_SYM:
+ DBUG_PRINT("info",("spider DETERMINISTIC_SYM"));
+ if (str->append(STRING_WITH_LEN("DETERMINISTIC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DIAGNOSTICS_SYM:
+ DBUG_PRINT("info",("spider DIAGNOSTICS_SYM"));
+ if (str->append(STRING_WITH_LEN("DIAGNOSTICS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DIRECTORY_SYM:
+ DBUG_PRINT("info",("spider DIRECTORY_SYM"));
+ if (str->append(STRING_WITH_LEN("DIRECTORY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DISABLE_SYM:
+ DBUG_PRINT("info",("spider DISABLE_SYM"));
+ if (str->append(STRING_WITH_LEN("DISABLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DISCARD:
+ DBUG_PRINT("info",("spider DISCARD"));
+ if (str->append(STRING_WITH_LEN("DISCARD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DISK_SYM:
+ DBUG_PRINT("info",("spider DISK_SYM"));
+ if (str->append(STRING_WITH_LEN("DISK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DISTINCT:
+ DBUG_PRINT("info",("spider DISTINCT"));
+ if (str->append(STRING_WITH_LEN("DISTINCT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DIV_SYM:
+ DBUG_PRINT("info",("spider DIV_SYM"));
+ if (str->append(STRING_WITH_LEN("DIV "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DO_SYM:
+ DBUG_PRINT("info",("spider DO_SYM"));
+ if (str->append(STRING_WITH_LEN("DO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case DOT_DOT_SYM:
+ DBUG_PRINT("info",("spider DOT_DOT_SYM"));
+ if (str->append(STRING_WITH_LEN(".."))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case DOUBLE_SYM:
+ DBUG_PRINT("info",("spider DOUBLE_SYM"));
+ if (str->append(STRING_WITH_LEN("DOUBLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DO_DOMAIN_IDS_SYM:
+ DBUG_PRINT("info",("spider DO_DOMAIN_IDS_SYM"));
+ if (str->append(STRING_WITH_LEN("DO_DOMAIN_IDS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DROP:
+ DBUG_PRINT("info",("spider DROP"));
+ if (str->append(STRING_WITH_LEN("DROP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DUAL_SYM:
+ DBUG_PRINT("info",("spider DUAL_SYM"));
+ if (str->append(STRING_WITH_LEN("DUAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DUMPFILE:
+ DBUG_PRINT("info",("spider DUMPFILE"));
+ if (str->append(STRING_WITH_LEN("DUMPFILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DUPLICATE_SYM:
+ DBUG_PRINT("info",("spider DUPLICATE_SYM"));
+ if (str->append(STRING_WITH_LEN("DUPLICATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DYNAMIC_SYM:
+ DBUG_PRINT("info",("spider DYNAMIC_SYM"));
+ if (str->append(STRING_WITH_LEN("DYNAMIC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EACH_SYM:
+ DBUG_PRINT("info",("spider EACH_SYM"));
+ if (str->append(STRING_WITH_LEN("EACH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ELSE:
+ DBUG_PRINT("info",("spider ELSE"));
+ if (str->append(STRING_WITH_LEN("ELSE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case ELSEIF_MARIADB_SYM:
+ DBUG_PRINT("info",("spider ELSEIF_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("ELSEIF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ELSEIF_ORACLE_SYM:
+ DBUG_PRINT("info",("spider ELSEIF_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("ELSEIF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case ELSEIF_SYM:
+ DBUG_PRINT("info",("spider ELSEIF_SYM"));
+ if (str->append(STRING_WITH_LEN("ELSEIF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+#ifdef SPIDER_TOKEN_10_3
+ case ELSIF_MARIADB_SYM:
+ DBUG_PRINT("info",("spider ELSIF_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("ELSIF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ELSIF_ORACLE_SYM:
+ DBUG_PRINT("info",("spider ELSIF_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("ELSIF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case ELSIF_SYM:
+ DBUG_PRINT("info",("spider ELSIF_SYM"));
+ if (str->append(STRING_WITH_LEN("ELSIF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case ENABLE_SYM:
+ DBUG_PRINT("info",("spider ENABLE_SYM"));
+ if (str->append(STRING_WITH_LEN("ENABLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ENCLOSED:
+ DBUG_PRINT("info",("spider ENCLOSED"));
+ if (str->append(STRING_WITH_LEN("ENCLOSED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case END:
+ DBUG_PRINT("info",("spider END"));
+ if (str->append(STRING_WITH_LEN("END "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ENDS_SYM:
+ DBUG_PRINT("info",("spider ENDS_SYM"));
+ if (str->append(STRING_WITH_LEN("ENDS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ENGINE_SYM:
+ DBUG_PRINT("info",("spider ENGINE_SYM"));
+ if (str->append(STRING_WITH_LEN("ENGINE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ENGINES_SYM:
+ DBUG_PRINT("info",("spider ENGINES_SYM"));
+ if (str->append(STRING_WITH_LEN("ENGINES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ENUM:
+ DBUG_PRINT("info",("spider ENUM"));
+ if (str->append(STRING_WITH_LEN("ENUM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ERROR_SYM:
+ DBUG_PRINT("info",("spider ERROR_SYM"));
+ if (str->append(STRING_WITH_LEN("ERROR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ERRORS:
+ DBUG_PRINT("info",("spider ERRORS"));
+ if (str->append(STRING_WITH_LEN("ERRORS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ESCAPE_SYM:
+ DBUG_PRINT("info",("spider ESCAPE_SYM"));
+ if (str->append(STRING_WITH_LEN("ESCAPE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ESCAPED:
+ DBUG_PRINT("info",("spider ESCAPED"));
+ if (str->append(STRING_WITH_LEN("ESCAPED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EVENT_SYM:
+ DBUG_PRINT("info",("spider EVENT_SYM"));
+ if (str->append(STRING_WITH_LEN("EVENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EVENTS_SYM:
+ DBUG_PRINT("info",("spider EVENTS_SYM"));
+ if (str->append(STRING_WITH_LEN("EVENTS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EVERY_SYM:
+ DBUG_PRINT("info",("spider EVERY_SYM"));
+ if (str->append(STRING_WITH_LEN("EVERY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXAMINED_SYM:
+ DBUG_PRINT("info",("spider EXAMINED_SYM"));
+ if (str->append(STRING_WITH_LEN("EXAMINED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXCEPT_SYM:
+ DBUG_PRINT("info",("spider EXCEPT_SYM"));
+ if (str->append(STRING_WITH_LEN("EXCEPT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXCHANGE_SYM:
+ DBUG_PRINT("info",("spider EXCHANGE_SYM"));
+ if (str->append(STRING_WITH_LEN("EXCHANGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXCLUDE_SYM:
+ DBUG_PRINT("info",("spider EXCLUDE_SYM"));
+ if (str->append(STRING_WITH_LEN("EXCLUDE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXECUTE_SYM: /* EXECUTE */
+ DBUG_PRINT("info",("spider EXECUTE_SYM"));
+ if (str->append(STRING_WITH_LEN("EXECUTE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case EXCEPTION_MARIADB_SYM:
+ DBUG_PRINT("info",("spider EXCEPTION_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("EXCEPTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXCEPTION_ORACLE_SYM:
+ DBUG_PRINT("info",("spider EXCEPTION_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("EXCEPTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case EXCEPTION_SYM:
+ DBUG_PRINT("info",("spider EXCEPTION_SYM"));
+ if (str->append(STRING_WITH_LEN("EXCEPTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case EXISTS:
+ DBUG_PRINT("info",("spider EXISTS"));
+ if (str->append(STRING_WITH_LEN("EXISTS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case EXIT_MARIADB_SYM:
+ DBUG_PRINT("info",("spider EXIT_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("EXIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXIT_ORACLE_SYM:
+ DBUG_PRINT("info",("spider EXIT_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("EXIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case EXIT_SYM:
+ DBUG_PRINT("info",("spider EXIT_SYM"));
+ if (str->append(STRING_WITH_LEN("EXIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case EXPANSION_SYM:
+ DBUG_PRINT("info",("spider EXPANSION_SYM"));
+ if (str->append(STRING_WITH_LEN("EXPANSION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_4
+ case EXPIRE_SYM:
+ DBUG_PRINT("info",("spider EXPIRE_SYM"));
+ if (str->append(STRING_WITH_LEN("EXPIRE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case EXPORT_SYM:
+ DBUG_PRINT("info",("spider EXPORT_SYM"));
+ if (str->append(STRING_WITH_LEN("EXPORT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXTENDED_SYM:
+ DBUG_PRINT("info",("spider EXTENDED_SYM"));
+ if (str->append(STRING_WITH_LEN("EXTENDED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXTENT_SIZE_SYM:
+ DBUG_PRINT("info",("spider EXTENT_SIZE_SYM"));
+ if (str->append(STRING_WITH_LEN("EXTENT_SIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FALSE_SYM:
+ DBUG_PRINT("info",("spider FALSE_SYM"));
+ if (str->append(STRING_WITH_LEN("FALSE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FAST_SYM:
+ DBUG_PRINT("info",("spider FAST_SYM"));
+ if (str->append(STRING_WITH_LEN("FAST "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FAULTS_SYM:
+ DBUG_PRINT("info",("spider FAULTS_SYM"));
+ if (str->append(STRING_WITH_LEN("FAULTS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FETCH_SYM:
+ DBUG_PRINT("info",("spider FETCH_SYM"));
+ if (str->append(STRING_WITH_LEN("FETCH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FILE_SYM:
+ DBUG_PRINT("info",("spider FILE_SYM"));
+ if (str->append(STRING_WITH_LEN("FILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FIRST_SYM:
+ DBUG_PRINT("info",("spider FIRST_SYM"));
+ if (str->append(STRING_WITH_LEN("FIRST "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FIXED_SYM:
+ DBUG_PRINT("info",("spider FIXED_SYM"));
+ if (str->append(STRING_WITH_LEN("FIXED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FLOAT_SYM:
+ DBUG_PRINT("info",("spider FLOAT_SYM"));
+ if (str->append(STRING_WITH_LEN("FLOAT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FLUSH_SYM:
+ DBUG_PRINT("info",("spider FLUSH_SYM"));
+ if (str->append(STRING_WITH_LEN("FLUSH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FOLLOWING_SYM:
+ DBUG_PRINT("info",("spider FOLLOWING_SYM"));
+ if (str->append(STRING_WITH_LEN("FOLLOWING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FOLLOWS_SYM:
+ DBUG_PRINT("info",("spider FOLLOWS_SYM"));
+ if (str->append(STRING_WITH_LEN("FOLLOWS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FOR_SYM:
+ DBUG_PRINT("info",("spider FOR_SYM"));
+ if (str->append(STRING_WITH_LEN("FOR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case FOR_SYSTEM_TIME_SYM:
+ DBUG_PRINT("info",("spider FOR_SYSTEM_TIME_SYM"));
+ if (str->append(STRING_WITH_LEN("FOR SYSTEM TIME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case FORCE_SYM:
+ DBUG_PRINT("info",("spider FORCE_SYM"));
+ if (str->append(STRING_WITH_LEN("FORCE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FOREIGN:
+ DBUG_PRINT("info",("spider FOREIGN"));
+ if (str->append(STRING_WITH_LEN("FOREIGN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FORMAT_SYM:
+ DBUG_PRINT("info",("spider FORMAT_SYM"));
+ if (str->append(STRING_WITH_LEN("FORMAT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FOUND_SYM:
+ DBUG_PRINT("info",("spider FOUND_SYM"));
+ if (str->append(STRING_WITH_LEN("FOUND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FROM:
+ DBUG_PRINT("info",("spider FROM"));
+ if (str->append(STRING_WITH_LEN("FROM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FULL:
+ DBUG_PRINT("info",("spider FULL"));
+ if (str->append(STRING_WITH_LEN("FULL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FULLTEXT_SYM:
+ DBUG_PRINT("info",("spider FULLTEXT_SYM"));
+ if (str->append(STRING_WITH_LEN("FULLTEXT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FUNCTION_SYM:
+ DBUG_PRINT("info",("spider FUNCTION_SYM"));
+ if (str->append(STRING_WITH_LEN("FUNCTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GENERAL:
+ DBUG_PRINT("info",("spider GENERAL"));
+ if (str->append(STRING_WITH_LEN("GENERAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GENERATED_SYM:
+ DBUG_PRINT("info",("spider GENERATED_SYM"));
+ if (str->append(STRING_WITH_LEN("GENERATED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GEOMETRY_SYM:
+ DBUG_PRINT("info",("spider GEOMETRY_SYM"));
+ if (str->append(STRING_WITH_LEN("GEOMETRY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GEOMETRYCOLLECTION:
+ DBUG_PRINT("info",("spider GEOMETRYCOLLECTION"));
+ if (str->append(STRING_WITH_LEN("GEOMETRYCOLLECTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GET_FORMAT:
+ DBUG_PRINT("info",("spider GET_FORMAT"));
+ if (str->append(STRING_WITH_LEN("GET_FORMAT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GET_SYM:
+ DBUG_PRINT("info",("spider GET_SYM"));
+ if (str->append(STRING_WITH_LEN("GET "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GLOBAL_SYM:
+ DBUG_PRINT("info",("spider GLOBAL_SYM"));
+ if (str->append(STRING_WITH_LEN("GLOBAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case GOTO_MARIADB_SYM:
+ DBUG_PRINT("info",("spider GOTO_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("GOTO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GOTO_ORACLE_SYM:
+ DBUG_PRINT("info",("spider GOTO_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("GOTO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case GOTO_SYM:
+ DBUG_PRINT("info",("spider GOTO_SYM"));
+ if (str->append(STRING_WITH_LEN("GOTO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case GRANT: /* GRANT */
+ DBUG_PRINT("info",("spider GRANT"));
+ if (str->append(STRING_WITH_LEN("GRANT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GRANTS:
+ DBUG_PRINT("info",("spider GRANTS"));
+ if (str->append(STRING_WITH_LEN("GRANTS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GROUP_SYM:
+ DBUG_PRINT("info",("spider GROUP_SYM"));
+ if (str->append(STRING_WITH_LEN("GROUP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HANDLER_SYM:
+ DBUG_PRINT("info",("spider HANDLER_SYM"));
+ if (str->append(STRING_WITH_LEN("HANDLER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HARD_SYM:
+ DBUG_PRINT("info",("spider HARD_SYM"));
+ if (str->append(STRING_WITH_LEN("HARD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HASH_SYM:
+ DBUG_PRINT("info",("spider HASH_SYM"));
+ if (str->append(STRING_WITH_LEN("HASH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HAVING:
+ DBUG_PRINT("info",("spider HAVING"));
+ if (str->append(STRING_WITH_LEN("HAVING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HELP_SYM:
+ DBUG_PRINT("info",("spider HELP_SYM"));
+ if (str->append(STRING_WITH_LEN("HELP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HIGH_PRIORITY:
+ DBUG_PRINT("info",("spider HIGH_PRIORITY"));
+ if (str->append(STRING_WITH_LEN("HIGH_PRIORITY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HISTORY_SYM:
+ DBUG_PRINT("info",("spider HISTORY_SYM"));
+ if (str->append(STRING_WITH_LEN("HISTORY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HOST_SYM:
+ DBUG_PRINT("info",("spider HOST_SYM"));
+ if (str->append(STRING_WITH_LEN("HOST "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HOSTS_SYM:
+ DBUG_PRINT("info",("spider HOSTS_SYM"));
+ if (str->append(STRING_WITH_LEN("HOSTS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HOUR_SYM:
+ DBUG_PRINT("info",("spider HOUR_SYM"));
+ if (str->append(STRING_WITH_LEN("HOUR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HOUR_MICROSECOND_SYM:
+ DBUG_PRINT("info",("spider HOUR_MICROSECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("HOUR_MICROSECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HOUR_MINUTE_SYM:
+ DBUG_PRINT("info",("spider HOUR_MINUTE_SYM"));
+ if (str->append(STRING_WITH_LEN("HOUR_MINUTE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case HOUR_SECOND_SYM:
+ DBUG_PRINT("info",("spider HOUR_SECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("HOUR_SECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ID_SYM: /* id */
+ DBUG_PRINT("info",("spider ID_SYM"));
+ if (str->append(STRING_WITH_LEN("ID "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IDENTIFIED_SYM:
+ DBUG_PRINT("info",("spider IDENTIFIED_SYM"));
+ if (str->append(STRING_WITH_LEN("IDENTIFIED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IF_SYM:
+ DBUG_PRINT("info",("spider IF_SYM"));
+ if (str->append(STRING_WITH_LEN("IF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IGNORE_SYM:
+ DBUG_PRINT("info",("spider IGNORE_SYM"));
+ if (str->append(STRING_WITH_LEN("IGNORE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IGNORE_DOMAIN_IDS_SYM:
+ DBUG_PRINT("info",("spider IGNORE_DOMAIN_IDS_SYM"));
+ if (str->append(STRING_WITH_LEN("IGNORE_DOMAIN_IDS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IGNORE_SERVER_IDS_SYM:
+ DBUG_PRINT("info",("spider IGNORE_SERVER_IDS_SYM"));
+ if (str->append(STRING_WITH_LEN("IGNORE_SERVER_IDS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IMMEDIATE_SYM:
+ DBUG_PRINT("info",("spider IMMEDIATE_SYM"));
+ if (str->append(STRING_WITH_LEN("IMMEDIATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IMPORT:
+ DBUG_PRINT("info",("spider IMPORT"));
+ if (str->append(STRING_WITH_LEN("IMPORT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case IMPOSSIBLE_ACTION:
+ DBUG_PRINT("info",("spider IMPOSSIBLE_ACTION"));
+ if (str->append(STRING_WITH_LEN("IMPOSSIBLE ACTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case INTERSECT_SYM:
+ DBUG_PRINT("info",("spider INTERSECT_SYM"));
+ if (str->append(STRING_WITH_LEN("INTERSECT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IN_SYM:
+ DBUG_PRINT("info",("spider IN_SYM"));
+ if (str->append(STRING_WITH_LEN("IN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INCREMENT_SYM:
+ DBUG_PRINT("info",("spider INCREMENT_SYM"));
+ if (str->append(STRING_WITH_LEN("INCREMENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INDEX_SYM:
+ DBUG_PRINT("info",("spider INDEX_SYM"));
+ if (str->append(STRING_WITH_LEN("INDEX "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INDEXES:
+ DBUG_PRINT("info",("spider INDEXES"));
+ if (str->append(STRING_WITH_LEN("INDEXES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INFILE:
+ DBUG_PRINT("info",("spider INFILE"));
+ if (str->append(STRING_WITH_LEN("INFILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INITIAL_SIZE_SYM:
+ DBUG_PRINT("info",("spider INITIAL_SIZE_SYM"));
+ if (str->append(STRING_WITH_LEN("INITIAL_SIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INNER_SYM:
+ DBUG_PRINT("info",("spider INNER_SYM"));
+ if (str->append(STRING_WITH_LEN("INNER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INOUT_SYM:
+ DBUG_PRINT("info",("spider INOUT_SYM"));
+ if (str->append(STRING_WITH_LEN("INOUT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INSENSITIVE_SYM:
+ DBUG_PRINT("info",("spider INSENSITIVE_SYM"));
+ if (str->append(STRING_WITH_LEN("INSENSITIVE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INSERT:
+ DBUG_PRINT("info",("spider INSERT"));
+ if (str->append(STRING_WITH_LEN("INSERT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INSERT_METHOD:
+ DBUG_PRINT("info",("spider INSERT_METHOD"));
+ if (str->append(STRING_WITH_LEN("INSERT_METHOD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INSTALL_SYM:
+ DBUG_PRINT("info",("spider INSTALL_SYM"));
+ if (str->append(STRING_WITH_LEN("INSTALL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INT_SYM:
+ DBUG_PRINT("info",("spider INT_SYM"));
+ if (str->append(STRING_WITH_LEN("INT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INTERVAL_SYM:
+ DBUG_PRINT("info",("spider INTERVAL_SYM"));
+ if (str->append(STRING_WITH_LEN("INTERVAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INVISIBLE_SYM:
+ DBUG_PRINT("info",("spider INVISIBLE_SYM"));
+ if (str->append(STRING_WITH_LEN("INVISIBLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INTO:
+ DBUG_PRINT("info",("spider INTO"));
+ if (str->append(STRING_WITH_LEN("INTO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IO_SYM:
+ DBUG_PRINT("info",("spider IO_SYM"));
+ if (str->append(STRING_WITH_LEN("IO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RELAY_THREAD:
+ DBUG_PRINT("info",("spider RELAY_THREAD"));
+ if (str->append(STRING_WITH_LEN("IO_THREAD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IPC_SYM:
+ DBUG_PRINT("info",("spider IPC_SYM"));
+ if (str->append(STRING_WITH_LEN("IPC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case IS:
+ DBUG_PRINT("info",("spider IS"));
+ if (str->append(STRING_WITH_LEN("IS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ISOLATION:
+ DBUG_PRINT("info",("spider ISOLATION"));
+ if (str->append(STRING_WITH_LEN("ISOLATION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ISOPEN_SYM:
+ DBUG_PRINT("info",("spider ISOPEN_SYM"));
+ if (str->append(STRING_WITH_LEN("ISOPEN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ISSUER_SYM:
+ DBUG_PRINT("info",("spider ISSUER_SYM"));
+ if (str->append(STRING_WITH_LEN("ISSUER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ITERATE_SYM:
+ DBUG_PRINT("info",("spider ITERATE_SYM"));
+ if (str->append(STRING_WITH_LEN("ITERATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case INVOKER_SYM:
+ DBUG_PRINT("info",("spider INVOKER_SYM"));
+ if (str->append(STRING_WITH_LEN("INVOKER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case JOIN_SYM:
+ DBUG_PRINT("info",("spider JOIN_SYM"));
+ if (str->append(STRING_WITH_LEN("JOIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case JSON_SYM:
+ DBUG_PRINT("info",("spider JSON_SYM"));
+ if (str->append(STRING_WITH_LEN("JSON "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case KEY_SYM:
+ DBUG_PRINT("info",("spider KEY_SYM"));
+ if (str->append(STRING_WITH_LEN("KEY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case KEYS:
+ DBUG_PRINT("info",("spider KEYS"));
+ if (str->append(STRING_WITH_LEN("KEYS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case KEY_BLOCK_SIZE:
+ DBUG_PRINT("info",("spider KEY_BLOCK_SIZE"));
+ if (str->append(STRING_WITH_LEN("KEY_BLOCK_SIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case KILL_SYM:
+ DBUG_PRINT("info",("spider KILL_SYM"));
+ if (str->append(STRING_WITH_LEN("KILL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LANGUAGE_SYM:
+ DBUG_PRINT("info",("spider LANGUAGE_SYM"));
+ if (str->append(STRING_WITH_LEN("LANGUAGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LAST_SYM:
+ DBUG_PRINT("info",("spider LAST_SYM"));
+ if (str->append(STRING_WITH_LEN("LAST "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LAST_VALUE:
+ DBUG_PRINT("info",("spider LAST_VALUE"));
+ if (str->append(STRING_WITH_LEN("LAST_VALUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LASTVAL_SYM:
+ DBUG_PRINT("info",("spider LASTVAL_SYM"));
+ if (str->append(STRING_WITH_LEN("LASTVAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LEADING:
+ DBUG_PRINT("info",("spider LEADING"));
+ if (str->append(STRING_WITH_LEN("LEADING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LEAVE_SYM:
+ DBUG_PRINT("info",("spider LEAVE_SYM"));
+ if (str->append(STRING_WITH_LEN("LEAVE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LEAVES:
+ DBUG_PRINT("info",("spider LEAVES"));
+ if (str->append(STRING_WITH_LEN("LEAVES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LEFT:
+ DBUG_PRINT("info",("spider LEFT"));
+ if (str->append(STRING_WITH_LEN("LEFT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_4
+ case LEFT_PAREN_ALT:
+ DBUG_PRINT("info",("spider LEFT_PAREN_ALT"));
+ if (str->append(STRING_WITH_LEN(") ALT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LEFT_PAREN_LIKE:
+ DBUG_PRINT("info",("spider LEFT_PAREN_LIKE"));
+ if (str->append(STRING_WITH_LEN(") LIKE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LEFT_PAREN_WITH:
+ DBUG_PRINT("info",("spider LEFT_PAREN_WITH"));
+ if (str->append(STRING_WITH_LEN(") WITH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case LESS_SYM:
+ DBUG_PRINT("info",("spider LESS_SYM"));
+ if (str->append(STRING_WITH_LEN("LESS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LEVEL_SYM:
+ DBUG_PRINT("info",("spider LEVEL_SYM"));
+ if (str->append(STRING_WITH_LEN("LEVEL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LIKE:
+ DBUG_PRINT("info",("spider LIKE"));
+ if (str->append(STRING_WITH_LEN("LIKE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LIMIT:
+ DBUG_PRINT("info",("spider LIMIT"));
+ if (str->append(STRING_WITH_LEN("LIMIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LINEAR_SYM:
+ DBUG_PRINT("info",("spider LINEAR_SYM"));
+ if (str->append(STRING_WITH_LEN("LINEAR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LINES:
+ DBUG_PRINT("info",("spider LINES"));
+ if (str->append(STRING_WITH_LEN("LINES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LINESTRING:
+ DBUG_PRINT("info",("spider LINESTRING"));
+ if (str->append(STRING_WITH_LEN("LINESTRING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LIST_SYM:
+ DBUG_PRINT("info",("spider LIST_SYM"));
+ if (str->append(STRING_WITH_LEN("LIST "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LOAD:
+ DBUG_PRINT("info",("spider LOAD"));
+ if (str->append(STRING_WITH_LEN("LOAD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LOCAL_SYM:
+ DBUG_PRINT("info",("spider LOCAL_SYM"));
+ if (str->append(STRING_WITH_LEN("LOCAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case LOCATOR_SYM:
+ DBUG_PRINT("info",("spider LOCATOR_SYM"));
+ if (str->append(STRING_WITH_LEN("LOCATOR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case LOCK_SYM:
+ DBUG_PRINT("info",("spider LOCK_SYM"));
+ if (str->append(STRING_WITH_LEN("LOCK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LOCKS_SYM:
+ DBUG_PRINT("info",("spider LOCKS_SYM"));
+ if (str->append(STRING_WITH_LEN("LOCKS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LOGFILE_SYM:
+ DBUG_PRINT("info",("spider LOGFILE_SYM"));
+ if (str->append(STRING_WITH_LEN("LOGFILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LOGS_SYM:
+ DBUG_PRINT("info",("spider LOGS_SYM"));
+ if (str->append(STRING_WITH_LEN("LOGS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LONG_SYM:
+ DBUG_PRINT("info",("spider LONG_SYM"));
+ if (str->append(STRING_WITH_LEN("LONG "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LONGBLOB:
+ DBUG_PRINT("info",("spider LONGBLOB"));
+ if (str->append(STRING_WITH_LEN("LONGBLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LONGTEXT:
+ DBUG_PRINT("info",("spider LONGTEXT"));
+ if (str->append(STRING_WITH_LEN("LONGTEXT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LOOP_SYM:
+ DBUG_PRINT("info",("spider LOOP_SYM"));
+ if (str->append(STRING_WITH_LEN("LOOP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LOW_PRIORITY:
+ DBUG_PRINT("info",("spider LOW_PRIORITY"));
+ if (str->append(STRING_WITH_LEN("LOW_PRIORITY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SYM:
+ DBUG_PRINT("info",("spider MASTER_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_CONNECT_RETRY_SYM:
+ DBUG_PRINT("info",("spider MASTER_CONNECT_RETRY_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_CONNECT_RETRY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_DELAY_SYM:
+ DBUG_PRINT("info",("spider MASTER_DELAY_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_DELAY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_GTID_POS_SYM:
+ DBUG_PRINT("info",("spider MASTER_GTID_POS_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_GTID_POS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_HOST_SYM:
+ DBUG_PRINT("info",("spider MASTER_HOST_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_HOST "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_LOG_FILE_SYM:
+ DBUG_PRINT("info",("spider MASTER_LOG_FILE_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_LOG_FILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_LOG_POS_SYM:
+ DBUG_PRINT("info",("spider MASTER_LOG_POS_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_LOG_POS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_PASSWORD_SYM:
+ DBUG_PRINT("info",("spider MASTER_PASSWORD_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_PASSWORD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_PORT_SYM:
+ DBUG_PRINT("info",("spider MASTER_PORT_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_PORT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SERVER_ID_SYM:
+ DBUG_PRINT("info",("spider MASTER_SERVER_ID_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SERVER_ID "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_CA_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_CA_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL_CA "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_CAPATH_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_CAPATH_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL_CAPATH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_CERT_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_CERT_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL_CERT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_CIPHER_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_CIPHER_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL_CIPHER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_CRL_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_CRL_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL_CRL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_CRLPATH_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_CRLPATH_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL_CRLPATH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_KEY_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_KEY_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL_KEY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_SSL_VERIFY_SERVER_CERT_SYM:
+ DBUG_PRINT("info",("spider MASTER_SSL_VERIFY_SERVER_CERT_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_SSL_VERIFY_SERVER_CERT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_USER_SYM:
+ DBUG_PRINT("info",("spider MASTER_USER_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_USER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_USE_GTID_SYM:
+ DBUG_PRINT("info",("spider MASTER_USE_GTID_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_USE_GTID "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MASTER_HEARTBEAT_PERIOD_SYM:
+ DBUG_PRINT("info",("spider MASTER_HEARTBEAT_PERIOD_SYM"));
+ if (str->append(STRING_WITH_LEN("MASTER_HEARTBEAT_PERIOD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MATCH:
+ DBUG_PRINT("info",("spider MATCH"));
+ if (str->append(STRING_WITH_LEN("MATCH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAX_CONNECTIONS_PER_HOUR:
+ DBUG_PRINT("info",("spider MAX_CONNECTIONS_PER_HOUR"));
+ if (str->append(STRING_WITH_LEN("MAX_CONNECTIONS_PER_HOUR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAX_QUERIES_PER_HOUR:
+ DBUG_PRINT("info",("spider MAX_QUERIES_PER_HOUR"));
+ if (str->append(STRING_WITH_LEN("MAX_QUERIES_PER_HOUR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAX_ROWS:
+ DBUG_PRINT("info",("spider MAX_ROWS"));
+ if (str->append(STRING_WITH_LEN("MAX_ROWS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAX_SIZE_SYM:
+ DBUG_PRINT("info",("spider MAX_SIZE_SYM"));
+ if (str->append(STRING_WITH_LEN("MAX_SIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAX_STATEMENT_TIME_SYM:
+ DBUG_PRINT("info",("spider MAX_STATEMENT_TIME_SYM"));
+ if (str->append(STRING_WITH_LEN("MAX_STATEMENT_TIME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAX_UPDATES_PER_HOUR:
+ DBUG_PRINT("info",("spider MAX_UPDATES_PER_HOUR"));
+ if (str->append(STRING_WITH_LEN("MAX_UPDATES_PER_HOUR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAX_USER_CONNECTIONS_SYM:
+ DBUG_PRINT("info",("spider MAX_USER_CONNECTIONS_SYM"));
+ if (str->append(STRING_WITH_LEN("MAX_USER_CONNECTIONS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAXVALUE_SYM:
+ DBUG_PRINT("info",("spider MAXVALUE_SYM"));
+ if (str->append(STRING_WITH_LEN("MAXVALUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MEDIUM_SYM:
+ DBUG_PRINT("info",("spider MEDIUM_SYM"));
+ if (str->append(STRING_WITH_LEN("MEDIUM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MEDIUMBLOB:
+ DBUG_PRINT("info",("spider MEDIUMBLOB"));
+ if (str->append(STRING_WITH_LEN("MEDIUMBLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MEDIUMINT:
+ DBUG_PRINT("info",("spider MEDIUMINT"));
+ if (str->append(STRING_WITH_LEN("MEDIUMINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MEDIUMTEXT:
+ DBUG_PRINT("info",("spider MEDIUMTEXT"));
+ if (str->append(STRING_WITH_LEN("MEDIUMTEXT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MEMORY_SYM:
+ DBUG_PRINT("info",("spider MEMORY_SYM"));
+ if (str->append(STRING_WITH_LEN("MEMORY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MERGE_SYM:
+ DBUG_PRINT("info",("spider MERGE_SYM"));
+ if (str->append(STRING_WITH_LEN("MERGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MESSAGE_TEXT_SYM:
+ DBUG_PRINT("info",("spider MESSAGE_TEXT_SYM"));
+ if (str->append(STRING_WITH_LEN("MESSAGE_TEXT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MICROSECOND_SYM:
+ DBUG_PRINT("info",("spider MICROSECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("MICROSECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MIGRATE_SYM:
+ DBUG_PRINT("info",("spider MIGRATE_SYM"));
+ if (str->append(STRING_WITH_LEN("MIGRATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MINUTE_SYM:
+ DBUG_PRINT("info",("spider MINUTE_SYM"));
+ if (str->append(STRING_WITH_LEN("MINUTE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MINUTE_MICROSECOND_SYM:
+ DBUG_PRINT("info",("spider MINUTE_MICROSECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("MINUTE_MICROSECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MINUTE_SECOND_SYM:
+ DBUG_PRINT("info",("spider MINUTE_SECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("MINUTE_SECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MINVALUE_SYM:
+ DBUG_PRINT("info",("spider MINVALUE_SYM"));
+ if (str->append(STRING_WITH_LEN("MINVALUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MIN_ROWS:
+ DBUG_PRINT("info",("spider MIN_ROWS"));
+ if (str->append(STRING_WITH_LEN("MIN_ROWS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MOD_SYM:
+ DBUG_PRINT("info",("spider MOD_SYM"));
+ if (str->append(STRING_WITH_LEN("MOD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MODE_SYM:
+ DBUG_PRINT("info",("spider MODE_SYM"));
+ if (str->append(STRING_WITH_LEN("MODE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MODIFIES_SYM:
+ DBUG_PRINT("info",("spider MODIFIES_SYM"));
+ if (str->append(STRING_WITH_LEN("MODIFIES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MODIFY_SYM:
+ DBUG_PRINT("info",("spider MODIFY_SYM"));
+ if (str->append(STRING_WITH_LEN("MODIFY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MONTH_SYM:
+ DBUG_PRINT("info",("spider MONTH_SYM"));
+ if (str->append(STRING_WITH_LEN("MONTH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MULTILINESTRING:
+ DBUG_PRINT("info",("spider MULTILINESTRING"));
+ if (str->append(STRING_WITH_LEN("MULTILINESTRING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MULTIPOINT:
+ DBUG_PRINT("info",("spider MULTIPOINT"));
+ if (str->append(STRING_WITH_LEN("MULTIPOINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MULTIPOLYGON:
+ DBUG_PRINT("info",("spider MULTIPOLYGON"));
+ if (str->append(STRING_WITH_LEN("MULTIPOLYGON "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MUTEX_SYM:
+ DBUG_PRINT("info",("spider MUTEX_SYM"));
+ if (str->append(STRING_WITH_LEN("MUTEX "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case MYSQL_CONCAT_SYM:
+ DBUG_PRINT("info",("spider MYSQL_CONCAT_SYM"));
+ if (str->append(STRING_WITH_LEN("CONCAT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case MYSQL_SYM:
+ DBUG_PRINT("info",("spider MYSQL_SYM"));
+ if (str->append(STRING_WITH_LEN("MYSQL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MYSQL_ERRNO_SYM:
+ DBUG_PRINT("info",("spider MYSQL_ERRNO_SYM"));
+ if (str->append(STRING_WITH_LEN("MYSQL_ERRNO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NAME_SYM:
+ DBUG_PRINT("info",("spider NAME_SYM"));
+ if (str->append(STRING_WITH_LEN("NAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NAMES_SYM:
+ DBUG_PRINT("info",("spider NAMES_SYM"));
+ if (str->append(STRING_WITH_LEN("NAMES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NATIONAL_SYM:
+ DBUG_PRINT("info",("spider NATIONAL_SYM"));
+ if (str->append(STRING_WITH_LEN("NATIONAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NATURAL:
+ DBUG_PRINT("info",("spider NATURAL"));
+ if (str->append(STRING_WITH_LEN("NATURAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NCHAR_SYM:
+ DBUG_PRINT("info",("spider NCHAR_SYM"));
+ if (str->append(STRING_WITH_LEN("NCHAR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_4
+ case NEVER_SYM:
+ DBUG_PRINT("info",("spider NEVER_SYM"));
+ if (str->append(STRING_WITH_LEN("NEVER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case NEW_SYM:
+ DBUG_PRINT("info",("spider NEW_SYM"));
+ if (str->append(STRING_WITH_LEN("NEW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NEXT_SYM:
+ DBUG_PRINT("info",("spider NEXT_SYM"));
+ if (str->append(STRING_WITH_LEN("NEXT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NEXTVAL_SYM:
+ DBUG_PRINT("info",("spider NEXTVAL_SYM"));
+ if (str->append(STRING_WITH_LEN("NEXTVAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NO_SYM:
+ DBUG_PRINT("info",("spider NO_SYM"));
+ if (str->append(STRING_WITH_LEN("NO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NOMAXVALUE_SYM:
+ DBUG_PRINT("info",("spider NOMAXVALUE_SYM"));
+ if (str->append(STRING_WITH_LEN("NOMAXVALUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NOMINVALUE_SYM:
+ DBUG_PRINT("info",("spider NOMINVALUE_SYM"));
+ if (str->append(STRING_WITH_LEN("NOMINVALUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NOCACHE_SYM:
+ DBUG_PRINT("info",("spider NOCACHE_SYM"));
+ if (str->append(STRING_WITH_LEN("NOCACHE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NOCYCLE_SYM:
+ DBUG_PRINT("info",("spider NOCYCLE_SYM"));
+ if (str->append(STRING_WITH_LEN("NOCYCLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NO_WAIT_SYM:
+ DBUG_PRINT("info",("spider NO_WAIT_SYM"));
+ if (str->append(STRING_WITH_LEN("NO_WAIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NOWAIT_SYM:
+ DBUG_PRINT("info",("spider NOWAIT_SYM"));
+ if (str->append(STRING_WITH_LEN("NOWAIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NODEGROUP_SYM:
+ DBUG_PRINT("info",("spider NODEGROUP_SYM"));
+ if (str->append(STRING_WITH_LEN("NODEGROUP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NONE_SYM:
+ DBUG_PRINT("info",("spider NONE_SYM"));
+ if (str->append(STRING_WITH_LEN("NONE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NOT_SYM:
+ DBUG_PRINT("info",("spider NOT_SYM"));
+ if (str->append(STRING_WITH_LEN("NOT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NOTFOUND_SYM:
+ DBUG_PRINT("info",("spider NOTFOUND_SYM"));
+ if (str->append(STRING_WITH_LEN("NOTFOUND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NO_WRITE_TO_BINLOG:
+ DBUG_PRINT("info",("spider NO_WRITE_TO_BINLOG"));
+ if (str->append(STRING_WITH_LEN("NO_WRITE_TO_BINLOG "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NULL_SYM:
+ DBUG_PRINT("info",("spider NULL_SYM"));
+ if (str->append(STRING_WITH_LEN("NULL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case NUMBER_MARIADB_SYM:
+ DBUG_PRINT("info",("spider NUMBER_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("NUMBER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NUMBER_ORACLE_SYM:
+ DBUG_PRINT("info",("spider NUMBER_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("NUMBER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case NUMBER_SYM:
+ DBUG_PRINT("info",("spider NUMBER_SYM"));
+ if (str->append(STRING_WITH_LEN("NUMBER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case NUMERIC_SYM:
+ DBUG_PRINT("info",("spider NUMERIC_SYM"));
+ if (str->append(STRING_WITH_LEN("NUMERIC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NVARCHAR_SYM:
+ DBUG_PRINT("info",("spider NVARCHAR_SYM"));
+ if (str->append(STRING_WITH_LEN("NVARCHAR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OF_SYM:
+ DBUG_PRINT("info",("spider OF_SYM"));
+ if (str->append(STRING_WITH_LEN("OF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OFFSET_SYM:
+ DBUG_PRINT("info",("spider OFFSET_SYM"));
+ if (str->append(STRING_WITH_LEN("OFFSET "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OLD_PASSWORD_SYM:
+ DBUG_PRINT("info",("spider OLD_PASSWORD_SYM"));
+ if (str->append(STRING_WITH_LEN("OLD_PASSWORD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ON: /* ON */
+ DBUG_PRINT("info",("spider ON"));
+ if (str->append(STRING_WITH_LEN("ON "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ONE_SYM:
+ DBUG_PRINT("info",("spider ONE_SYM"));
+ if (str->append(STRING_WITH_LEN("ONE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ONLINE_SYM:
+ DBUG_PRINT("info",("spider ONLINE_SYM"));
+ if (str->append(STRING_WITH_LEN("ONLINE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ONLY_SYM:
+ DBUG_PRINT("info",("spider ONLY_SYM"));
+ if (str->append(STRING_WITH_LEN("ONLY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OPEN_SYM:
+ DBUG_PRINT("info",("spider OPEN_SYM"));
+ if (str->append(STRING_WITH_LEN("OPEN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OPTIMIZE:
+ DBUG_PRINT("info",("spider OPTIMIZE"));
+ if (str->append(STRING_WITH_LEN("OPTIMIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OPTIONS_SYM:
+ DBUG_PRINT("info",("spider OPTIONS_SYM"));
+ if (str->append(STRING_WITH_LEN("OPTIONS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OPTION:
+ DBUG_PRINT("info",("spider OPTION"));
+ if (str->append(STRING_WITH_LEN("OPTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OPTIONALLY:
+ DBUG_PRINT("info",("spider OPTIONALLY"));
+ if (str->append(STRING_WITH_LEN("OPTIONALLY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OR_SYM:
+ DBUG_PRINT("info",("spider OR_SYM"));
+ if (str->append(STRING_WITH_LEN("OR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case ORACLE_CONCAT_SYM:
+ DBUG_PRINT("info",("spider ORACLE_CONCAT_SYM"));
+ if (str->append(STRING_WITH_LEN("|| "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case ORDER_SYM:
+ DBUG_PRINT("info",("spider ORDER_SYM"));
+ if (str->append(STRING_WITH_LEN("ORDER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case OTHERS_MARIADB_SYM:
+ DBUG_PRINT("info",("spider OTHERS_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("OTHERS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OTHERS_ORACLE_SYM:
+ DBUG_PRINT("info",("spider OTHERS_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("OTHERS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case OTHERS_SYM:
+ DBUG_PRINT("info",("spider OTHERS_SYM"));
+ if (str->append(STRING_WITH_LEN("OTHERS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case OUT_SYM:
+ DBUG_PRINT("info",("spider OUT_SYM"));
+ if (str->append(STRING_WITH_LEN("OUT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OUTER:
+ DBUG_PRINT("info",("spider OUTER"));
+ if (str->append(STRING_WITH_LEN("OUTER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OUTFILE:
+ DBUG_PRINT("info",("spider OUTFILE"));
+ if (str->append(STRING_WITH_LEN("OUTFILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OVER_SYM:
+ DBUG_PRINT("info",("spider OVER_SYM"));
+ if (str->append(STRING_WITH_LEN("OVER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OWNER_SYM:
+ DBUG_PRINT("info",("spider OWNER_SYM"));
+ if (str->append(STRING_WITH_LEN("OWNER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case PACKAGE_MARIADB_SYM:
+ DBUG_PRINT("info",("spider PACKAGE_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("PACKAGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PACKAGE_ORACLE_SYM:
+ DBUG_PRINT("info",("spider PACKAGE_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("PACKAGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case PACKAGE_SYM:
+ DBUG_PRINT("info",("spider PACKAGE_SYM"));
+ if (str->append(STRING_WITH_LEN("PACKAGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case PACK_KEYS_SYM:
+ DBUG_PRINT("info",("spider PACK_KEYS_SYM"));
+ if (str->append(STRING_WITH_LEN("PACK_KEYS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PAGE_SYM:
+ DBUG_PRINT("info",("spider PAGE_SYM"));
+ if (str->append(STRING_WITH_LEN("PAGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PAGE_CHECKSUM_SYM:
+ DBUG_PRINT("info",("spider PAGE_CHECKSUM_SYM"));
+ if (str->append(STRING_WITH_LEN("PAGE_CHECKSUM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PARSER_SYM:
+ DBUG_PRINT("info",("spider PARSER_SYM"));
+ if (str->append(STRING_WITH_LEN("PARSER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PARSE_VCOL_EXPR_SYM:
+ DBUG_PRINT("info",("spider PARSE_VCOL_EXPR_SYM"));
+ if (str->append(STRING_WITH_LEN("PARSE_VCOL_EXPR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PERIOD_SYM:
+ DBUG_PRINT("info",("spider PERIOD_SYM"));
+ if (str->append(STRING_WITH_LEN("PERIOD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PARTIAL:
+ DBUG_PRINT("info",("spider PARTIAL"));
+ if (str->append(STRING_WITH_LEN("PARTIAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PARTITION_SYM:
+ DBUG_PRINT("info",("spider PARTITION_SYM"));
+ if (str->append(STRING_WITH_LEN("PARTITION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PARTITIONING_SYM:
+ DBUG_PRINT("info",("spider PARTITIONING_SYM"));
+ if (str->append(STRING_WITH_LEN("PARTITIONING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PARTITIONS_SYM:
+ DBUG_PRINT("info",("spider PARTITIONS_SYM"));
+ if (str->append(STRING_WITH_LEN("PARTITIONS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PASSWORD_SYM:
+ DBUG_PRINT("info",("spider PASSWORD_SYM"));
+ if (str->append(STRING_WITH_LEN("PASSWORD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PERSISTENT_SYM:
+ DBUG_PRINT("info",("spider PERSISTENT_SYM"));
+ if (str->append(STRING_WITH_LEN("PERSISTENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PHASE_SYM:
+ DBUG_PRINT("info",("spider PHASE_SYM"));
+ if (str->append(STRING_WITH_LEN("PHASE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PLUGIN_SYM:
+ DBUG_PRINT("info",("spider PLUGIN_SYM"));
+ if (str->append(STRING_WITH_LEN("PLUGIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PLUGINS_SYM:
+ DBUG_PRINT("info",("spider PLUGINS_SYM"));
+ if (str->append(STRING_WITH_LEN("PLUGINS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case POINT_SYM:
+ DBUG_PRINT("info",("spider POINT_SYM"));
+ if (str->append(STRING_WITH_LEN("POINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case POLYGON:
+ DBUG_PRINT("info",("spider POLYGON"));
+ if (str->append(STRING_WITH_LEN("POLYGON "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PORT_SYM:
+ DBUG_PRINT("info",("spider PORT_SYM"));
+ if (str->append(STRING_WITH_LEN("PORT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case PREC_BELOW_CONTRACTION_TOKEN2:
+ DBUG_PRINT("info",("spider PREC_BELOW_CONTRACTION_TOKEN2"));
+ if (str->append(STRING_WITH_LEN("PREC_BELOW_CONTRACTION_TOKEN2 "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PREC_BELOW_ESCAPE:
+ DBUG_PRINT("info",("spider PREC_BELOW_ESCAPE"));
+ if (str->append(STRING_WITH_LEN("PREC_BELOW_ESCAPE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PREC_BELOW_IDENTIFIER_OPT_SPECIAL_CASE:
+ DBUG_PRINT("info",("spider PREC_BELOW_IDENTIFIER_OPT_SPECIAL_CASE"));
+ if (str->append(STRING_WITH_LEN("PREC_BELOW_IDENTIFIER_OPT_SPECIAL_CASE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PREC_BELOW_NOT:
+ DBUG_PRINT("info",("spider PREC_BELOW_NOT"));
+ if (str->append(STRING_WITH_LEN("PREC_BELOW_NOT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case PRECEDES_SYM:
+ DBUG_PRINT("info",("spider PRECEDES_SYM"));
+ if (str->append(STRING_WITH_LEN("PRECEDES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PRECEDING_SYM:
+ DBUG_PRINT("info",("spider PRECEDING_SYM"));
+ if (str->append(STRING_WITH_LEN("PRECEDING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PRECISION:
+ DBUG_PRINT("info",("spider PRECISION"));
+ if (str->append(STRING_WITH_LEN("PRECISION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PREPARE_SYM: /* PREPARE */
+ DBUG_PRINT("info",("spider PREPARE_SYM"));
+ if (str->append(STRING_WITH_LEN("PREPARE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PRESERVE_SYM:
+ DBUG_PRINT("info",("spider PRESERVE_SYM"));
+ if (str->append(STRING_WITH_LEN("PRESERVE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PREV_SYM:
+ DBUG_PRINT("info",("spider PREV_SYM"));
+ if (str->append(STRING_WITH_LEN("PREV "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PREVIOUS_SYM:
+ DBUG_PRINT("info",("spider PREVIOUS_SYM"));
+ if (str->append(STRING_WITH_LEN("PREVIOUS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PRIMARY_SYM:
+ DBUG_PRINT("info",("spider PRIMARY_SYM"));
+ if (str->append(STRING_WITH_LEN("PRIMARY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PRIVILEGES:
+ DBUG_PRINT("info",("spider PRIVILEGES"));
+ if (str->append(STRING_WITH_LEN("PRIVILEGES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PROCEDURE_SYM:
+ DBUG_PRINT("info",("spider PROCEDURE_SYM"));
+ if (str->append(STRING_WITH_LEN("PROCEDURE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PROCESS:
+ DBUG_PRINT("info",("spider PROCESS"));
+ if (str->append(STRING_WITH_LEN("PROCESS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PROCESSLIST_SYM:
+ DBUG_PRINT("info",("spider PROCESSLIST_SYM"));
+ if (str->append(STRING_WITH_LEN("PROCESSLIST "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PROFILE_SYM:
+ DBUG_PRINT("info",("spider PROFILE_SYM"));
+ if (str->append(STRING_WITH_LEN("PROFILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PROFILES_SYM:
+ DBUG_PRINT("info",("spider PROFILES_SYM"));
+ if (str->append(STRING_WITH_LEN("PROFILES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PROXY_SYM:
+ DBUG_PRINT("info",("spider PROXY_SYM"));
+ if (str->append(STRING_WITH_LEN("PROXY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PURGE:
+ DBUG_PRINT("info",("spider PURGE"));
+ if (str->append(STRING_WITH_LEN("PURGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case QUARTER_SYM:
+ DBUG_PRINT("info",("spider QUARTER_SYM"));
+ if (str->append(STRING_WITH_LEN("QUARTER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case QUERY_SYM:
+ DBUG_PRINT("info",("spider QUERY_SYM"));
+ if (str->append(STRING_WITH_LEN("QUERY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case QUICK:
+ DBUG_PRINT("info",("spider QUICK"));
+ if (str->append(STRING_WITH_LEN("QUICK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case RAISE_MARIADB_SYM:
+ DBUG_PRINT("info",("spider RAISE_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("RAISE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RAISE_ORACLE_SYM:
+ DBUG_PRINT("info",("spider RAISE_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("RAISE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case RAISE_SYM:
+ DBUG_PRINT("info",("spider RAISE_SYM"));
+ if (str->append(STRING_WITH_LEN("RAISE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case RANGE_SYM:
+ DBUG_PRINT("info",("spider RANGE_SYM"));
+ if (str->append(STRING_WITH_LEN("RANGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case RAW_MARIADB_SYM:
+ DBUG_PRINT("info",("spider RAW_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("RAW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RAW_ORACLE_SYM:
+ DBUG_PRINT("info",("spider RAW_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("RAW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case RAW:
+ DBUG_PRINT("info",("spider RAW"));
+ if (str->append(STRING_WITH_LEN("RAW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case READ_SYM:
+ DBUG_PRINT("info",("spider READ_SYM"));
+ if (str->append(STRING_WITH_LEN("READ "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case READ_ONLY_SYM:
+ DBUG_PRINT("info",("spider READ_ONLY_SYM"));
+ if (str->append(STRING_WITH_LEN("READ_ONLY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case READ_WRITE_SYM:
+ DBUG_PRINT("info",("spider READ_WRITE_SYM"));
+ if (str->append(STRING_WITH_LEN("READ_WRITE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case READS_SYM:
+ DBUG_PRINT("info",("spider READS_SYM"));
+ if (str->append(STRING_WITH_LEN("READS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REAL:
+ DBUG_PRINT("info",("spider REAL"));
+ if (str->append(STRING_WITH_LEN("REAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REBUILD_SYM:
+ DBUG_PRINT("info",("spider REBUILD_SYM"));
+ if (str->append(STRING_WITH_LEN("REBUILD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RECOVER_SYM:
+ DBUG_PRINT("info",("spider RECOVER_SYM"));
+ if (str->append(STRING_WITH_LEN("RECOVER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RECURSIVE_SYM:
+ DBUG_PRINT("info",("spider RECURSIVE_SYM"));
+ if (str->append(STRING_WITH_LEN("RECURSIVE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REDO_BUFFER_SIZE_SYM:
+ DBUG_PRINT("info",("spider REDO_BUFFER_SIZE_SYM"));
+ if (str->append(STRING_WITH_LEN("REDO_BUFFER_SIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REDOFILE_SYM:
+ DBUG_PRINT("info",("spider REDOFILE_SYM"));
+ if (str->append(STRING_WITH_LEN("REDOFILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REDUNDANT_SYM:
+ DBUG_PRINT("info",("spider REDUNDANT_SYM"));
+ if (str->append(STRING_WITH_LEN("REDUNDANT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REFERENCES:
+ DBUG_PRINT("info",("spider REFERENCES"));
+ if (str->append(STRING_WITH_LEN("REFERENCES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REGEXP:
+ DBUG_PRINT("info",("spider REGEXP"));
+ if (str->append(STRING_WITH_LEN("REGEXP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RELAY:
+ DBUG_PRINT("info",("spider RELAY"));
+ if (str->append(STRING_WITH_LEN("RELAY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RELAYLOG_SYM:
+ DBUG_PRINT("info",("spider RELAYLOG_SYM"));
+ if (str->append(STRING_WITH_LEN("RELAYLOG "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RELAY_LOG_FILE_SYM:
+ DBUG_PRINT("info",("spider RELAY_LOG_FILE_SYM"));
+ if (str->append(STRING_WITH_LEN("RELAY_LOG_FILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RELAY_LOG_POS_SYM:
+ DBUG_PRINT("info",("spider RELAY_LOG_POS_SYM"));
+ if (str->append(STRING_WITH_LEN("RELAY_LOG_POS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RELEASE_SYM:
+ DBUG_PRINT("info",("spider RELEASE_SYM"));
+ if (str->append(STRING_WITH_LEN("RELEASE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RELOAD:
+ DBUG_PRINT("info",("spider RELOAD"));
+ if (str->append(STRING_WITH_LEN("RELOAD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REMOVE_SYM:
+ DBUG_PRINT("info",("spider REMOVE_SYM"));
+ if (str->append(STRING_WITH_LEN("REMOVE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RENAME:
+ DBUG_PRINT("info",("spider RENAME"));
+ if (str->append(STRING_WITH_LEN("RENAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REORGANIZE_SYM:
+ DBUG_PRINT("info",("spider REORGANIZE_SYM"));
+ if (str->append(STRING_WITH_LEN("REORGANIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REPAIR:
+ DBUG_PRINT("info",("spider REPAIR"));
+ if (str->append(STRING_WITH_LEN("REPAIR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REPEATABLE_SYM:
+ DBUG_PRINT("info",("spider REPEATABLE_SYM"));
+ if (str->append(STRING_WITH_LEN("REPEATABLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REPLACE:
+ DBUG_PRINT("info",("spider REPLACE"));
+ if (str->append(STRING_WITH_LEN("REPLACE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REPLICATION:
+ DBUG_PRINT("info",("spider REPLICATION"));
+ if (str->append(STRING_WITH_LEN("REPLICATION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REPEAT_SYM:
+ DBUG_PRINT("info",("spider REPEAT_SYM"));
+ if (str->append(STRING_WITH_LEN("REPEAT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REQUIRE_SYM:
+ DBUG_PRINT("info",("spider REQUIRE_SYM"));
+ if (str->append(STRING_WITH_LEN("REQUIRE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RESET_SYM:
+ DBUG_PRINT("info",("spider RESET_SYM"));
+ if (str->append(STRING_WITH_LEN("RESET "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RESIGNAL_SYM:
+ DBUG_PRINT("info",("spider RESIGNAL_SYM"));
+ if (str->append(STRING_WITH_LEN("RESIGNAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RESTART_SYM:
+ DBUG_PRINT("info",("spider RESTART_SYM"));
+ if (str->append(STRING_WITH_LEN("RESTART "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RESTORE_SYM:
+ DBUG_PRINT("info",("spider RESTORE_SYM"));
+ if (str->append(STRING_WITH_LEN("RESTORE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RESTRICT:
+ DBUG_PRINT("info",("spider RESTRICT"));
+ if (str->append(STRING_WITH_LEN("RESTRICT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RESUME_SYM:
+ DBUG_PRINT("info",("spider RESUME_SYM"));
+ if (str->append(STRING_WITH_LEN("RESUME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RETURNED_SQLSTATE_SYM:
+ DBUG_PRINT("info",("spider RETURNED_SQLSTATE_SYM"));
+ if (str->append(STRING_WITH_LEN("RETURNED_SQLSTATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case RETURN_MARIADB_SYM:
+ DBUG_PRINT("info",("spider RETURN_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("RETURN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RETURN_ORACLE_SYM:
+ DBUG_PRINT("info",("spider RETURN_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("RETURN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case RETURN_SYM:
+ DBUG_PRINT("info",("spider RETURN_SYM"));
+ if (str->append(STRING_WITH_LEN("RETURN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case RETURNING_SYM:
+ DBUG_PRINT("info",("spider RETURNING_SYM"));
+ if (str->append(STRING_WITH_LEN("RETURNING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RETURNS_SYM:
+ DBUG_PRINT("info",("spider RETURNS_SYM"));
+ if (str->append(STRING_WITH_LEN("RETURNS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REUSE_SYM:
+ DBUG_PRINT("info",("spider REUSE_SYM"));
+ if (str->append(STRING_WITH_LEN("REUSE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REVERSE_SYM:
+ DBUG_PRINT("info",("spider REVERSE_SYM"));
+ if (str->append(STRING_WITH_LEN("REVERSE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REVOKE:
+ DBUG_PRINT("info",("spider REVOKE"));
+ if (str->append(STRING_WITH_LEN("REVOKE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RIGHT:
+ DBUG_PRINT("info",("spider RIGHT"));
+ if (str->append(STRING_WITH_LEN("RIGHT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROLE_SYM:
+ DBUG_PRINT("info",("spider ROLE_SYM"));
+ if (str->append(STRING_WITH_LEN("ROLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROLLBACK_SYM:
+ DBUG_PRINT("info",("spider ROLLBACK_SYM"));
+ if (str->append(STRING_WITH_LEN("ROLLBACK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROLLUP_SYM:
+ DBUG_PRINT("info",("spider ROLLUP_SYM"));
+ if (str->append(STRING_WITH_LEN("ROLLUP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROUTINE_SYM:
+ DBUG_PRINT("info",("spider ROUTINE_SYM"));
+ if (str->append(STRING_WITH_LEN("ROUTINE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROW_SYM:
+ DBUG_PRINT("info",("spider ROW_SYM"));
+ if (str->append(STRING_WITH_LEN("ROW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROWCOUNT_SYM:
+ DBUG_PRINT("info",("spider ROWCOUNT_SYM"));
+ if (str->append(STRING_WITH_LEN("ROWCOUNT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROWS_SYM:
+ DBUG_PRINT("info",("spider ROWS_SYM"));
+ if (str->append(STRING_WITH_LEN("ROWS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case ROWTYPE_MARIADB_SYM:
+ DBUG_PRINT("info",("spider ROWTYPE_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("ROWTYPE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROWTYPE_ORACLE_SYM:
+ DBUG_PRINT("info",("spider ROWTYPE_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("ROWTYPE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case ROWTYPE_SYM:
+ DBUG_PRINT("info",("spider ROWTYPE_SYM"));
+ if (str->append(STRING_WITH_LEN("ROWTYPE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case ROW_COUNT_SYM:
+ DBUG_PRINT("info",("spider ROW_COUNT_SYM"));
+ if (str->append(STRING_WITH_LEN("ROW_COUNT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROW_FORMAT_SYM:
+ DBUG_PRINT("info",("spider ROW_FORMAT_SYM"));
+ if (str->append(STRING_WITH_LEN("ROW_FORMAT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RTREE_SYM:
+ DBUG_PRINT("info",("spider RTREE_SYM"));
+ if (str->append(STRING_WITH_LEN("RTREE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SAVEPOINT_SYM:
+ DBUG_PRINT("info",("spider SAVEPOINT_SYM"));
+ if (str->append(STRING_WITH_LEN("SAVEPOINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SCHEDULE_SYM:
+ DBUG_PRINT("info",("spider SCHEDULE_SYM"));
+ if (str->append(STRING_WITH_LEN("SCHEDULE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SCHEMA_NAME_SYM:
+ DBUG_PRINT("info",("spider SCHEMA_NAME_SYM"));
+ if (str->append(STRING_WITH_LEN("SCHEMA_NAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SECOND_SYM:
+ DBUG_PRINT("info",("spider SECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("SECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SECOND_MICROSECOND_SYM:
+ DBUG_PRINT("info",("spider SECOND_MICROSECOND_SYM"));
+ if (str->append(STRING_WITH_LEN("SECOND_MICROSECOND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SECURITY_SYM:
+ DBUG_PRINT("info",("spider SECURITY_SYM"));
+ if (str->append(STRING_WITH_LEN("SECURITY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SELECT_SYM: /* SELECT */
+ DBUG_PRINT("info",("spider SELECT_SYM"));
+ if (str->append(STRING_WITH_LEN("SELECT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SENSITIVE_SYM:
+ DBUG_PRINT("info",("spider SENSITIVE_SYM"));
+ if (str->append(STRING_WITH_LEN("SENSITIVE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SEPARATOR_SYM:
+ DBUG_PRINT("info",("spider SEPARATOR_SYM"));
+ if (str->append(STRING_WITH_LEN("SEPARATOR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SEQUENCE_SYM:
+ DBUG_PRINT("info",("spider SEQUENCE_SYM"));
+ if (str->append(STRING_WITH_LEN("SEQUENCE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SERIAL_SYM:
+ DBUG_PRINT("info",("spider SERIAL_SYM"));
+ if (str->append(STRING_WITH_LEN("SERIAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SERIALIZABLE_SYM:
+ DBUG_PRINT("info",("spider SERIALIZABLE_SYM"));
+ if (str->append(STRING_WITH_LEN("SERIALIZABLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SESSION_SYM:
+ DBUG_PRINT("info",("spider SESSION_SYM"));
+ if (str->append(STRING_WITH_LEN("SESSION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case SERVER_OPTIONS:
+ DBUG_PRINT("info",("spider SERVER_OPTIONS"));
+ if (str->append(STRING_WITH_LEN("SERVER_OPTIONS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case SERVER_SYM:
+ DBUG_PRINT("info",("spider SERVER_SYM"));
+ if (str->append(STRING_WITH_LEN("SERVER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SET:
+ DBUG_PRINT("info",("spider SET"));
+ if (str->append(STRING_WITH_LEN("SET "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SETVAL_SYM:
+ DBUG_PRINT("info",("spider SETVAL_SYM"));
+ if (str->append(STRING_WITH_LEN("SETVAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SHARE_SYM:
+ DBUG_PRINT("info",("spider SHARE_SYM"));
+ if (str->append(STRING_WITH_LEN("SHARE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SHOW:
+ DBUG_PRINT("info",("spider SHOW"));
+ if (str->append(STRING_WITH_LEN("SHOW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SHUTDOWN:
+ DBUG_PRINT("info",("spider SHUTDOWN"));
+ if (str->append(STRING_WITH_LEN("SHUTDOWN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SIGNAL_SYM:
+ DBUG_PRINT("info",("spider SIGNAL_SYM"));
+ if (str->append(STRING_WITH_LEN("SIGNAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SIGNED_SYM:
+ DBUG_PRINT("info",("spider SIGNED_SYM"));
+ if (str->append(STRING_WITH_LEN("SIGNED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SIMPLE_SYM:
+ DBUG_PRINT("info",("spider SIMPLE_SYM"));
+ if (str->append(STRING_WITH_LEN("SIMPLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SLAVE:
+ DBUG_PRINT("info",("spider SLAVE"));
+ if (str->append(STRING_WITH_LEN("SLAVE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SLAVES:
+ DBUG_PRINT("info",("spider SLAVES"));
+ if (str->append(STRING_WITH_LEN("SLAVES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SLAVE_POS_SYM:
+ DBUG_PRINT("info",("spider SLAVE_POS_SYM"));
+ if (str->append(STRING_WITH_LEN("SLAVE_POS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SLOW:
+ DBUG_PRINT("info",("spider SLOW"));
+ if (str->append(STRING_WITH_LEN("SLOW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SNAPSHOT_SYM:
+ DBUG_PRINT("info",("spider SNAPSHOT_SYM"));
+ if (str->append(STRING_WITH_LEN("SNAPSHOT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SMALLINT:
+ DBUG_PRINT("info",("spider SMALLINT"));
+ if (str->append(STRING_WITH_LEN("SMALLINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SOCKET_SYM:
+ DBUG_PRINT("info",("spider SOCKET_SYM"));
+ if (str->append(STRING_WITH_LEN("SOCKET "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SOFT_SYM:
+ DBUG_PRINT("info",("spider SOFT_SYM"));
+ if (str->append(STRING_WITH_LEN("SOFT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SONAME_SYM:
+ DBUG_PRINT("info",("spider SONAME_SYM"));
+ if (str->append(STRING_WITH_LEN("SONAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SOUNDS_SYM:
+ DBUG_PRINT("info",("spider SOUNDS_SYM"));
+ if (str->append(STRING_WITH_LEN("SOUNDS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SOURCE_SYM:
+ DBUG_PRINT("info",("spider SOURCE_SYM"));
+ if (str->append(STRING_WITH_LEN("SOURCE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STORED_SYM:
+ DBUG_PRINT("info",("spider STORED_SYM"));
+ if (str->append(STRING_WITH_LEN("STORED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SPATIAL_SYM:
+ DBUG_PRINT("info",("spider SPATIAL_SYM"));
+ if (str->append(STRING_WITH_LEN("SPATIAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SPECIFIC_SYM:
+ DBUG_PRINT("info",("spider SPECIFIC_SYM"));
+ if (str->append(STRING_WITH_LEN("SPECIFIC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case REF_SYSTEM_ID_SYM:
+ DBUG_PRINT("info",("spider REF_SYSTEM_ID_SYM"));
+ if (str->append(STRING_WITH_LEN("REF_SYSTEM_ID "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQL_SYM:
+ DBUG_PRINT("info",("spider SQL_SYM"));
+ if (str->append(STRING_WITH_LEN("SQL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQLEXCEPTION_SYM:
+ DBUG_PRINT("info",("spider SQLEXCEPTION_SYM"));
+ if (str->append(STRING_WITH_LEN("SQLEXCEPTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQLSTATE_SYM:
+ DBUG_PRINT("info",("spider SQLSTATE_SYM"));
+ if (str->append(STRING_WITH_LEN("SQLSTATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQLWARNING_SYM:
+ DBUG_PRINT("info",("spider SQLWARNING_SYM"));
+ if (str->append(STRING_WITH_LEN("SQLWARNING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQL_BIG_RESULT:
+ DBUG_PRINT("info",("spider SQL_BIG_RESULT"));
+ if (str->append(STRING_WITH_LEN("SQL_BIG_RESULT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQL_BUFFER_RESULT:
+ DBUG_PRINT("info",("spider SQL_BUFFER_RESULT"));
+ if (str->append(STRING_WITH_LEN("SQL_BUFFER_RESULT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQL_CACHE_SYM:
+ DBUG_PRINT("info",("spider SQL_CACHE_SYM"));
+ if (str->append(STRING_WITH_LEN("SQL_CACHE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQL_CALC_FOUND_ROWS:
+ DBUG_PRINT("info",("spider SQL_CALC_FOUND_ROWS"));
+ if (str->append(STRING_WITH_LEN("SQL_CALC_FOUND_ROWS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQL_NO_CACHE_SYM:
+ DBUG_PRINT("info",("spider SQL_NO_CACHE_SYM"));
+ if (str->append(STRING_WITH_LEN("SQL_NO_CACHE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQL_SMALL_RESULT:
+ DBUG_PRINT("info",("spider SQL_SMALL_RESULT"));
+ if (str->append(STRING_WITH_LEN("SQL_SMALL_RESULT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SQL_THREAD:
+ DBUG_PRINT("info",("spider SQL_THREAD"));
+ if (str->append(STRING_WITH_LEN("SQL_THREAD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SSL_SYM:
+ DBUG_PRINT("info",("spider SSL_SYM"));
+ if (str->append(STRING_WITH_LEN("SSL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_4
+ case STAGE_SYM:
+ DBUG_PRINT("info",("spider STAGE_SYM"));
+ if (str->append(STRING_WITH_LEN("STAGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case START_SYM:
+ DBUG_PRINT("info",("spider START_SYM"));
+ if (str->append(STRING_WITH_LEN("START "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STARTING:
+ DBUG_PRINT("info",("spider STARTING"));
+ if (str->append(STRING_WITH_LEN("STARTING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STARTS_SYM:
+ DBUG_PRINT("info",("spider STARTS_SYM"));
+ if (str->append(STRING_WITH_LEN("STARTS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STATEMENT_SYM:
+ DBUG_PRINT("info",("spider STATEMENT_SYM"));
+ if (str->append(STRING_WITH_LEN("STATEMENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STATS_AUTO_RECALC_SYM:
+ DBUG_PRINT("info",("spider STATS_AUTO_RECALC_SYM"));
+ if (str->append(STRING_WITH_LEN("STATS_AUTO_RECALC "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STATS_PERSISTENT_SYM:
+ DBUG_PRINT("info",("spider STATS_PERSISTENT_SYM"));
+ if (str->append(STRING_WITH_LEN("STATS_PERSISTENT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STATS_SAMPLE_PAGES_SYM:
+ DBUG_PRINT("info",("spider STATS_SAMPLE_PAGES_SYM"));
+ if (str->append(STRING_WITH_LEN("STATS_SAMPLE_PAGES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STATUS_SYM:
+ DBUG_PRINT("info",("spider STATUS_SYM"));
+ if (str->append(STRING_WITH_LEN("STATUS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STOP_SYM:
+ DBUG_PRINT("info",("spider STOP_SYM"));
+ if (str->append(STRING_WITH_LEN("STOP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STORAGE_SYM:
+ DBUG_PRINT("info",("spider STORAGE_SYM"));
+ if (str->append(STRING_WITH_LEN("STORAGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STRAIGHT_JOIN:
+ DBUG_PRINT("info",("spider STRAIGHT_JOIN"));
+ if (str->append(STRING_WITH_LEN("STRAIGHT_JOIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STRING_SYM:
+ DBUG_PRINT("info",("spider STRING_SYM"));
+ if (str->append(STRING_WITH_LEN("STRING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUBCLASS_ORIGIN_SYM:
+ DBUG_PRINT("info",("spider SUBCLASS_ORIGIN_SYM"));
+ if (str->append(STRING_WITH_LEN("SUBCLASS_ORIGIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUBJECT_SYM:
+ DBUG_PRINT("info",("spider SUBJECT_SYM"));
+ if (str->append(STRING_WITH_LEN("SUBJECT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUBPARTITION_SYM:
+ DBUG_PRINT("info",("spider SUBPARTITION_SYM"));
+ if (str->append(STRING_WITH_LEN("SUBPARTITION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUBPARTITIONS_SYM:
+ DBUG_PRINT("info",("spider SUBPARTITIONS_SYM"));
+ if (str->append(STRING_WITH_LEN("SUBPARTITIONS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUPER_SYM:
+ DBUG_PRINT("info",("spider SUPER_SYM"));
+ if (str->append(STRING_WITH_LEN("SUPER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUSPEND_SYM:
+ DBUG_PRINT("info",("spider SUSPEND_SYM"));
+ if (str->append(STRING_WITH_LEN("SUSPEND "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SWAPS_SYM:
+ DBUG_PRINT("info",("spider SWAPS_SYM"));
+ if (str->append(STRING_WITH_LEN("SWAPS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SWITCHES_SYM:
+ DBUG_PRINT("info",("spider SWITCHES_SYM"));
+ if (str->append(STRING_WITH_LEN("SWITCHES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SYSTEM:
+ DBUG_PRINT("info",("spider SYSTEM"));
+ if (str->append(STRING_WITH_LEN("SYSTEM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SYSTEM_TIME_SYM:
+ DBUG_PRINT("info",("spider SYSTEM_TIME_SYM"));
+ if (str->append(STRING_WITH_LEN("SYSTEM_TIME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TABLE_SYM:
+ DBUG_PRINT("info",("spider TABLE_SYM"));
+ if (str->append(STRING_WITH_LEN("TABLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TABLE_NAME_SYM:
+ DBUG_PRINT("info",("spider TABLE_NAME_SYM"));
+ if (str->append(STRING_WITH_LEN("TABLE_NAME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case TABLE_REF_PRIORITY:
+ DBUG_PRINT("info",("spider TABLE_REF_PRIORITY"));
+ if (str->append(STRING_WITH_LEN("TABLE_REF_PRIORITY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case TABLES:
+ DBUG_PRINT("info",("spider TABLES"));
+ if (str->append(STRING_WITH_LEN("TABLES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TABLESPACE:
+ DBUG_PRINT("info",("spider TABLESPACE"));
+ if (str->append(STRING_WITH_LEN("TABLESPACE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TABLE_CHECKSUM_SYM:
+ DBUG_PRINT("info",("spider TABLE_CHECKSUM_SYM"));
+ if (str->append(STRING_WITH_LEN("TABLE_CHECKSUM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TEMPORARY:
+ DBUG_PRINT("info",("spider TEMPORARY"));
+ if (str->append(STRING_WITH_LEN("TEMPORARY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TEMPTABLE_SYM:
+ DBUG_PRINT("info",("spider TEMPTABLE_SYM"));
+ if (str->append(STRING_WITH_LEN("TEMPTABLE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TERMINATED:
+ DBUG_PRINT("info",("spider TERMINATED"));
+ if (str->append(STRING_WITH_LEN("TERMINATED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TEXT_SYM:
+ DBUG_PRINT("info",("spider TEXT_SYM"));
+ if (str->append(STRING_WITH_LEN("TEXT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case THAN_SYM:
+ DBUG_PRINT("info",("spider THAN_SYM"));
+ if (str->append(STRING_WITH_LEN("THAN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case THEN_SYM:
+ DBUG_PRINT("info",("spider THEN_SYM"));
+ if (str->append(STRING_WITH_LEN("THEN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TIES_SYM:
+ DBUG_PRINT("info",("spider TIES_SYM"));
+ if (str->append(STRING_WITH_LEN("TIES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TIME_SYM:
+ DBUG_PRINT("info",("spider TIME_SYM"));
+ if (str->append(STRING_WITH_LEN("TIME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TIMESTAMP:
+ DBUG_PRINT("info",("spider TIMESTAMP"));
+ if (str->append(STRING_WITH_LEN("TIMESTAMP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TIMESTAMP_ADD:
+ DBUG_PRINT("info",("spider TIMESTAMP_ADD"));
+ if (str->append(STRING_WITH_LEN("TIMESTAMPADD "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TIMESTAMP_DIFF:
+ DBUG_PRINT("info",("spider TIMESTAMP_DIFF"));
+ if (str->append(STRING_WITH_LEN("TIMESTAMPDIFF "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TINYBLOB:
+ DBUG_PRINT("info",("spider TINYBLOB"));
+ if (str->append(STRING_WITH_LEN("TINYBLOB "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TINYINT:
+ DBUG_PRINT("info",("spider TINYINT"));
+ if (str->append(STRING_WITH_LEN("TINYINT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TINYTEXT:
+ DBUG_PRINT("info",("spider TINYTEXT"));
+ if (str->append(STRING_WITH_LEN("TINYTEXT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TO_SYM: /* TO */
+ DBUG_PRINT("info",("spider TO_SYM"));
+ if (str->append(STRING_WITH_LEN("TO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRAILING:
+ DBUG_PRINT("info",("spider TRAILING"));
+ if (str->append(STRING_WITH_LEN("TRAILING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRANSACTION_SYM:
+ DBUG_PRINT("info",("spider TRANSACTION_SYM"));
+ if (str->append(STRING_WITH_LEN("TRANSACTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRANSACTIONAL_SYM:
+ DBUG_PRINT("info",("spider TRANSACTIONAL_SYM"));
+ if (str->append(STRING_WITH_LEN("TRANSACTIONAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRIGGER_SYM:
+ DBUG_PRINT("info",("spider TRIGGER_SYM"));
+ if (str->append(STRING_WITH_LEN("TRIGGER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRIGGERS_SYM:
+ DBUG_PRINT("info",("spider TRIGGERS_SYM"));
+ if (str->append(STRING_WITH_LEN("TRIGGERS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRUE_SYM:
+ DBUG_PRINT("info",("spider TRUE_SYM"));
+ if (str->append(STRING_WITH_LEN("TRUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRUNCATE_SYM:
+ DBUG_PRINT("info",("spider TRUNCATE_SYM"));
+ if (str->append(STRING_WITH_LEN("TRUNCATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TYPE_SYM:
+ DBUG_PRINT("info",("spider TYPE_SYM"));
+ if (str->append(STRING_WITH_LEN("TYPE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TYPES_SYM:
+ DBUG_PRINT("info",("spider TYPES_SYM"));
+ if (str->append(STRING_WITH_LEN("TYPES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case UDF_RETURNS_SYM:
+ DBUG_PRINT("info",("spider UDF_RETURNS_SYM"));
+ if (str->append(STRING_WITH_LEN("UDF_RETURNS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case UNBOUNDED_SYM:
+ DBUG_PRINT("info",("spider UNBOUNDED_SYM"));
+ if (str->append(STRING_WITH_LEN("UNBOUNDED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNCOMMITTED_SYM:
+ DBUG_PRINT("info",("spider UNCOMMITTED_SYM"));
+ if (str->append(STRING_WITH_LEN("UNCOMMITTED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNDEFINED_SYM:
+ DBUG_PRINT("info",("spider UNDEFINED_SYM"));
+ if (str->append(STRING_WITH_LEN("UNDEFINED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNDO_BUFFER_SIZE_SYM:
+ DBUG_PRINT("info",("spider UNDO_BUFFER_SIZE_SYM"));
+ if (str->append(STRING_WITH_LEN("UNDO_BUFFER_SIZE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNDOFILE_SYM:
+ DBUG_PRINT("info",("spider UNDOFILE_SYM"));
+ if (str->append(STRING_WITH_LEN("UNDOFILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNDO_SYM:
+ DBUG_PRINT("info",("spider UNDO_SYM"));
+ if (str->append(STRING_WITH_LEN("UNDO "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNICODE_SYM:
+ DBUG_PRINT("info",("spider UNICODE_SYM"));
+ if (str->append(STRING_WITH_LEN("UNICODE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNION_SYM:
+ DBUG_PRINT("info",("spider UNION_SYM"));
+ if (str->append(STRING_WITH_LEN("UNION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNIQUE_SYM:
+ DBUG_PRINT("info",("spider UNIQUE_SYM"));
+ if (str->append(STRING_WITH_LEN("UNIQUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNKNOWN_SYM:
+ DBUG_PRINT("info",("spider UNKNOWN_SYM"));
+ if (str->append(STRING_WITH_LEN("UNKNOWN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNLOCK_SYM:
+ DBUG_PRINT("info",("spider UNLOCK_SYM"));
+ if (str->append(STRING_WITH_LEN("UNLOCK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNINSTALL_SYM:
+ DBUG_PRINT("info",("spider UNINSTALL_SYM"));
+ if (str->append(STRING_WITH_LEN("UNINSTALL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNSIGNED:
+ DBUG_PRINT("info",("spider UNSIGNED"));
+ if (str->append(STRING_WITH_LEN("UNSIGNED "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UNTIL_SYM:
+ DBUG_PRINT("info",("spider UNTIL_SYM"));
+ if (str->append(STRING_WITH_LEN("UNTIL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UPDATE_SYM:
+ DBUG_PRINT("info",("spider UPDATE_SYM"));
+ if (str->append(STRING_WITH_LEN("UPDATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UPGRADE_SYM:
+ DBUG_PRINT("info",("spider UPGRADE_SYM"));
+ if (str->append(STRING_WITH_LEN("UPGRADE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case USAGE:
+ DBUG_PRINT("info",("spider USAGE"));
+ if (str->append(STRING_WITH_LEN("USAGE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case USE_SYM:
+ DBUG_PRINT("info",("spider USE_SYM"));
+ if (str->append(STRING_WITH_LEN("USE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case USER:
+ DBUG_PRINT("info",("spider USER"));
+ if (str->append(STRING_WITH_LEN("USER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case USER_SYM: /* USER */
+ DBUG_PRINT("info",("spider USER_SYM"));
+ if (str->append(STRING_WITH_LEN("USER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RESOURCES:
+ DBUG_PRINT("info",("spider RESOURCES"));
+ if (str->append(STRING_WITH_LEN("USER_RESOURCES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case USE_FRM:
+ DBUG_PRINT("info",("spider USE_FRM"));
+ if (str->append(STRING_WITH_LEN("USE_FRM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case USING: /* USING */
+ DBUG_PRINT("info",("spider USING"));
+ if (str->append(STRING_WITH_LEN("USING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UTC_DATE_SYM:
+ DBUG_PRINT("info",("spider UTC_DATE_SYM"));
+ if (str->append(STRING_WITH_LEN("UTC_DATE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UTC_TIME_SYM:
+ DBUG_PRINT("info",("spider UTC_TIME_SYM"));
+ if (str->append(STRING_WITH_LEN("UTC_TIME "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case UTC_TIMESTAMP_SYM:
+ DBUG_PRINT("info",("spider UTC_TIMESTAMP_SYM"));
+ if (str->append(STRING_WITH_LEN("UTC_TIMESTAMP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VALUE_SYM:
+ DBUG_PRINT("info",("spider VALUE_SYM"));
+ if (str->append(STRING_WITH_LEN("VALUE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VALUES:
+ DBUG_PRINT("info",("spider VALUES"));
+ if (str->append(STRING_WITH_LEN("VALUES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case VALUES_IN_SYM:
+ DBUG_PRINT("info",("spider VALUES_IN_SYM"));
+ if (str->append(STRING_WITH_LEN("VALUES IN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VALUES_LESS_SYM:
+ DBUG_PRINT("info",("spider VALUES_LESS_SYM"));
+ if (str->append(STRING_WITH_LEN("VALUES LESS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case VARBINARY:
+ DBUG_PRINT("info",("spider VARBINARY"));
+ if (str->append(STRING_WITH_LEN("VARBINARY "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VARCHAR:
+ DBUG_PRINT("info",("spider VARCHAR"));
+ if (str->append(STRING_WITH_LEN("VARCHAR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case VARCHAR2_MARIADB_SYM:
+ DBUG_PRINT("info",("spider VARCHAR2_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("VARCHAR2 "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VARCHAR2_ORACLE_SYM:
+ DBUG_PRINT("info",("spider VARCHAR2_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("VARCHAR2 "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case VARCHAR2:
+ DBUG_PRINT("info",("spider VARCHAR2"));
+ if (str->append(STRING_WITH_LEN("VARCHAR2 "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case VARIABLES:
+ DBUG_PRINT("info",("spider VARIABLES"));
+ if (str->append(STRING_WITH_LEN("VARIABLES "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VARYING:
+ DBUG_PRINT("info",("spider VARYING"));
+ if (str->append(STRING_WITH_LEN("VARYING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VIA_SYM:
+ DBUG_PRINT("info",("spider VIA_SYM"));
+ if (str->append(STRING_WITH_LEN("VIA "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VIEW_SYM:
+ DBUG_PRINT("info",("spider VIEW_SYM"));
+ if (str->append(STRING_WITH_LEN("VIEW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VIRTUAL_SYM:
+ DBUG_PRINT("info",("spider VIRTUAL_SYM"));
+ if (str->append(STRING_WITH_LEN("VIRTUAL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VERSIONING_SYM:
+ DBUG_PRINT("info",("spider VERSIONING_SYM"));
+ if (str->append(STRING_WITH_LEN("VERSIONING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WAIT_SYM:
+ DBUG_PRINT("info",("spider WAIT_SYM"));
+ if (str->append(STRING_WITH_LEN("WAIT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WARNINGS:
+ DBUG_PRINT("info",("spider WARNINGS"));
+ if (str->append(STRING_WITH_LEN("WARNINGS "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WEEK_SYM:
+ DBUG_PRINT("info",("spider WEEK_SYM"));
+ if (str->append(STRING_WITH_LEN("WEEK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WEIGHT_STRING_SYM:
+ DBUG_PRINT("info",("spider WEIGHT_STRING_SYM"));
+ if (str->append(STRING_WITH_LEN("WEIGHT_STRING "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WHEN_SYM:
+ DBUG_PRINT("info",("spider WHEN_SYM"));
+ if (str->append(STRING_WITH_LEN("WHEN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WHERE:
+ DBUG_PRINT("info",("spider WHERE"));
+ if (str->append(STRING_WITH_LEN("WHERE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WHILE_SYM:
+ DBUG_PRINT("info",("spider WHILE_SYM"));
+ if (str->append(STRING_WITH_LEN("WHILE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WINDOW_SYM :
+ DBUG_PRINT("info",("spider WINDOW_SYM "));
+ if (str->append(STRING_WITH_LEN("WINDOW "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WITH:
+ DBUG_PRINT("info",("spider WITH"));
+ if (str->append(STRING_WITH_LEN("WITH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case WITH_CUBE_SYM:
+ DBUG_PRINT("info",("spider WITH_CUBE_SYM"));
+ if (str->append(STRING_WITH_LEN("WITH_CUBE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WITH_ROLLUP_SYM:
+ DBUG_PRINT("info",("spider WITH_ROLLUP_SYM"));
+ if (str->append(STRING_WITH_LEN("WITH_ROLLUP "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WITH_SYSTEM_SYM:
+ DBUG_PRINT("info",("spider WITH_SYSTEM_SYM"));
+ if (str->append(STRING_WITH_LEN("WITH_SYSTEM "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case WITHIN:
+ DBUG_PRINT("info",("spider WITHIN"));
+ if (str->append(STRING_WITH_LEN("WITHIN "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WITHOUT:
+ DBUG_PRINT("info",("spider WITHOUT"));
+ if (str->append(STRING_WITH_LEN("WITHOUT "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WORK_SYM:
+ DBUG_PRINT("info",("spider WORK_SYM"));
+ if (str->append(STRING_WITH_LEN("WORK "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WRAPPER_SYM:
+ DBUG_PRINT("info",("spider WRAPPER_SYM"));
+ if (str->append(STRING_WITH_LEN("WRAPPER "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case WRITE_SYM:
+ DBUG_PRINT("info",("spider WRITE_SYM"));
+ if (str->append(STRING_WITH_LEN("WRITE "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case X509_SYM:
+ DBUG_PRINT("info",("spider X509_SYM"));
+ if (str->append(STRING_WITH_LEN("X509 "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case XOR:
+ DBUG_PRINT("info",("spider XOR"));
+ if (str->append(STRING_WITH_LEN("XOR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case XA_SYM:
+ DBUG_PRINT("info",("spider XA_SYM"));
+ if (str->append(STRING_WITH_LEN("XA "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case XML_SYM:
+ DBUG_PRINT("info",("spider XML_SYM"));
+ if (str->append(STRING_WITH_LEN("XML "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case YEAR_SYM:
+ DBUG_PRINT("info",("spider YEAR_SYM"));
+ if (str->append(STRING_WITH_LEN("YEAR "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case YEAR_MONTH_SYM:
+ DBUG_PRINT("info",("spider YEAR_MONTH_SYM"));
+ if (str->append(STRING_WITH_LEN("YEAR_MONTH "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ZEROFILL:
+ DBUG_PRINT("info",("spider ZEROFILL"));
+ if (str->append(STRING_WITH_LEN("ZEROFILL "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case OR2_SYM:
+ DBUG_PRINT("info",("spider OR2_SYM"));
+ if (str->append(STRING_WITH_LEN("|| "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+
+ /* functions */
+ case ADDDATE_SYM:
+ DBUG_PRINT("info",("spider ADDDATE_SYM"));
+ if (str->append(STRING_WITH_LEN("ADDDATE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BIT_AND:
+ DBUG_PRINT("info",("spider BIT_AND"));
+ if (str->append(STRING_WITH_LEN("BIT_AND"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BIT_OR:
+ DBUG_PRINT("info",("spider BIT_OR"));
+ if (str->append(STRING_WITH_LEN("BIT_OR"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case BIT_XOR:
+ DBUG_PRINT("info",("spider BIT_XOR"));
+ if (str->append(STRING_WITH_LEN("BIT_XOR"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CAST_SYM:
+ DBUG_PRINT("info",("spider CAST_SYM"));
+ if (str->append(STRING_WITH_LEN("CAST"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case COUNT_SYM:
+ DBUG_PRINT("info",("spider COUNT_SYM"));
+ if (str->append(STRING_WITH_LEN("COUNT"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case CUME_DIST_SYM:
+ DBUG_PRINT("info",("spider CUME_DIST_SYM"));
+ if (str->append(STRING_WITH_LEN("CUME_DIST"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATE_ADD_INTERVAL:
+ DBUG_PRINT("info",("spider DATE_ADD_INTERVAL"));
+ if (str->append(STRING_WITH_LEN("DATE_ADD"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATE_SUB_INTERVAL:
+ DBUG_PRINT("info",("spider DATE_SUB_INTERVAL"));
+ if (str->append(STRING_WITH_LEN("DATE_SUB"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DATE_FORMAT_SYM:
+ DBUG_PRINT("info",("spider DATE_FORMAT_SYM"));
+ if (str->append(STRING_WITH_LEN("DATE_FORMAT"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case DECODE_MARIADB_SYM:
+ DBUG_PRINT("info",("spider DECODE_MARIADB_SYM"));
+ if (str->append(STRING_WITH_LEN("DECODE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case DECODE_ORACLE_SYM:
+ DBUG_PRINT("info",("spider DECODE_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("DECODE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#else
+ case DECODE_SYM:
+ DBUG_PRINT("info",("spider DECODE_SYM"));
+ if (str->append(STRING_WITH_LEN("DECODE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case DENSE_RANK_SYM:
+ DBUG_PRINT("info",("spider DENSE_RANK_SYM"));
+ if (str->append(STRING_WITH_LEN("DENSE_RANK"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case EXTRACT_SYM:
+ DBUG_PRINT("info",("spider EXTRACT_SYM"));
+ if (str->append(STRING_WITH_LEN("EXTRACT"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case FIRST_VALUE_SYM:
+ DBUG_PRINT("info",("spider FIRST_VALUE_SYM"));
+ if (str->append(STRING_WITH_LEN("FIRST_VALUE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case GROUP_CONCAT_SYM:
+ DBUG_PRINT("info",("spider GROUP_CONCAT_SYM"));
+ if (str->append(STRING_WITH_LEN("GROUP_CONCAT"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LAG_SYM:
+ DBUG_PRINT("info",("spider LAG_SYM"));
+ if (str->append(STRING_WITH_LEN("LAG"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case LEAD_SYM:
+ DBUG_PRINT("info",("spider LEAD_SYM"));
+ if (str->append(STRING_WITH_LEN("LEAD"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MAX_SYM:
+ DBUG_PRINT("info",("spider MAX_SYM"));
+ if (str->append(STRING_WITH_LEN("MAX"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MEDIAN_SYM:
+ DBUG_PRINT("info",("spider MEDIAN_SYM"));
+ if (str->append(STRING_WITH_LEN("MEDIAN"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case MIN_SYM:
+ DBUG_PRINT("info",("spider MIN_SYM"));
+ if (str->append(STRING_WITH_LEN("MIN"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NTH_VALUE_SYM:
+ DBUG_PRINT("info",("spider NTH_VALUE_SYM"));
+ if (str->append(STRING_WITH_LEN("NTH_VALUE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case NTILE_SYM:
+ DBUG_PRINT("info",("spider NTILE_SYM"));
+ if (str->append(STRING_WITH_LEN("NTILE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_4
+ case PORTION_SYM:
+ DBUG_PRINT("info",("spider PORTION_SYM"));
+ if (str->append(STRING_WITH_LEN("PORTION "))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case POSITION_SYM:
+ DBUG_PRINT("info",("spider POSITION_SYM"));
+ if (str->append(STRING_WITH_LEN("POSITION"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#ifdef SPIDER_TOKEN_10_3
+ case PERCENT_ORACLE_SYM:
+ DBUG_PRINT("info",("spider PERCENT_ORACLE_SYM"));
+ if (str->append(STRING_WITH_LEN("%"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+#endif
+ case PERCENT_RANK_SYM:
+ DBUG_PRINT("info",("spider PERCENT_RANK_SYM"));
+ if (str->append(STRING_WITH_LEN("PERCENT_RANK"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PERCENTILE_CONT_SYM:
+ DBUG_PRINT("info",("spider PERCENTILE_CONT_SYM"));
+ if (str->append(STRING_WITH_LEN("PERCENTILE_CONT"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case PERCENTILE_DISC_SYM:
+ DBUG_PRINT("info",("spider PERCENTILE_DISC_SYM"));
+ if (str->append(STRING_WITH_LEN("PERCENTILE_DISC"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case RANK_SYM:
+ DBUG_PRINT("info",("spider RANK_SYM"));
+ if (str->append(STRING_WITH_LEN("RANK"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case ROW_NUMBER_SYM:
+ DBUG_PRINT("info",("spider ROW_NUMBER_SYM"));
+ if (str->append(STRING_WITH_LEN("ROW_NUMBER"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STD_SYM:
+ DBUG_PRINT("info",("spider STD_SYM"));
+ if (str->append(STRING_WITH_LEN("STD"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case STDDEV_SAMP_SYM:
+ DBUG_PRINT("info",("spider STDDEV_SAMP_SYM"));
+ if (str->append(STRING_WITH_LEN("STDDEV_SAMP"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUBDATE_SYM:
+ DBUG_PRINT("info",("spider SUBDATE_SYM"));
+ if (str->append(STRING_WITH_LEN("SUBDATE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUBSTRING:
+ DBUG_PRINT("info",("spider SUBSTRING"));
+ if (str->append(STRING_WITH_LEN("SUBSTRING"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SUM_SYM:
+ DBUG_PRINT("info",("spider SUM_SYM"));
+ if (str->append(STRING_WITH_LEN("SUM"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case SYSDATE:
+ DBUG_PRINT("info",("spider SYSDATE"));
+ if (str->append(STRING_WITH_LEN("SYSDATE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRIM:
+ DBUG_PRINT("info",("spider TRIM"));
+ if (str->append(STRING_WITH_LEN("TRIM"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case TRIM_ORACLE:
+ DBUG_PRINT("info",("spider TRIM_ORACLE"));
+ if (str->append(STRING_WITH_LEN("TRIM_ORACLE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VARIANCE_SYM:
+ DBUG_PRINT("info",("spider VARIANCE_SYM"));
+ if (str->append(STRING_WITH_LEN("VARIANCE"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+ case VAR_SAMP_SYM:
+ DBUG_PRINT("info",("spider VAR_SAMP_SYM"));
+ if (str->append(STRING_WITH_LEN("VAR_SAMP"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ break;
+
+ case UNDERSCORE_CHARSET: /* like _utf8 */
+ DBUG_PRINT("info",("spider UNDERSCORE_CHARSET"));
+ {
+ const char *name = yylval_tok->charset->name;
+ uint len = strlen(name);
+ if (str->reserve(len + 2)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(SPIDER_SQL_UNDERSCORE_STR, SPIDER_SQL_UNDERSCORE_LEN);
+ str->q_append(name, len);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ }
+ break;
+ case NCHAR_STRING: /* like n'string' */
+ DBUG_PRINT("info",("spider NCHAR_STRING"));
+ if (str->reserve(yylval_tok->lex_str.length * 2 + 3)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(STRING_WITH_LEN("n"));
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ break;
+ case IDENT_QUOTED: /* like `string` */
+ DBUG_PRINT("info",("spider IDENT_QUOTED"));
+ if (str->reserve(yylval_tok->lex_str.length + 2)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(quote_char_for_ident.str, quote_char_for_ident.length);
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(quote_char_for_ident.str, quote_char_for_ident.length);
+ break;
+ case IDENT: /* like _aaa */
+ DBUG_PRINT("info",("spider IDENT"));
+ if (str->reserve(yylval_tok->lex_str.length + 1)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case HEX_NUM: /* like x'hex number' */
+ DBUG_PRINT("info",("spider HEX_NUM"));
+ if (str->reserve(yylval_tok->lex_str.length + 3)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(STRING_WITH_LEN("0x"));
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case BIN_NUM: /* like b'bin number' */
+ DBUG_PRINT("info",("spider BIN_NUM"));
+ if (str->reserve(yylval_tok->lex_str.length + 3)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(STRING_WITH_LEN("0b"));
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case FLOAT_NUM: /* like 1e+10 */
+ DBUG_PRINT("info",("spider FLOAT_NUM"));
+ if (str->reserve(yylval_tok->lex_str.length + 1)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case NUM: /* like 10 */
+ DBUG_PRINT("info",("spider NUM"));
+ if (str->reserve(yylval_tok->lex_str.length + 1)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case LONG_NUM: /* like 100000000000 */
+ DBUG_PRINT("info",("spider LONG_NUM"));
+ if (str->reserve(yylval_tok->lex_str.length + 1)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case DECIMAL_NUM: /* like 1000000000000000000000 */
+ DBUG_PRINT("info",("spider DECIMAL_NUM"));
+ if (str->reserve(yylval_tok->lex_str.length + 1)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case ULONGLONG_NUM: /* like 18446744073709551615 */
+ DBUG_PRINT("info",("spider ULONGLONG_NUM"));
+ if (str->reserve(yylval_tok->lex_str.length + 1)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case HEX_STRING: /* like x'ab' */
+ DBUG_PRINT("info",("spider HEX_STRING"));
+ if (str->reserve(yylval_tok->lex_str.length + 3)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(STRING_WITH_LEN("x"));
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ break;
+ case TEXT_STRING: /* like 'ab' */
+ DBUG_PRINT("info",("spider TEXT_STRING"));
+ if (str->reserve(yylval_tok->lex_str.length * 2 + 2)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ break;
+ case LEX_HOSTNAME: /* like @example.com */
+ DBUG_PRINT("info",("spider LEX_HOSTNAME"));
+ if (str->reserve(yylval_tok->lex_str.length + 1)) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);}
+ str->q_append(yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ break;
+ case PARAM_MARKER:
+ DBUG_PRINT("info",("spider PARAM_MARKER"));
+ if (str->append(STRING_WITH_LEN("?"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);} break;
+ case NOT2_SYM:
+ DBUG_PRINT("info",("spider NOT2_SYM"));
+ if (str->append(STRING_WITH_LEN("!"))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);} break;
+ case SET_VAR:
+ DBUG_PRINT("info",("spider SET_VAR"));
+ if (str->append(STRING_WITH_LEN(":="))) {DBUG_RETURN(HA_ERR_OUT_OF_MEM);} break;
+ case ABORT_SYM:
+ /* syntax error */
+ DBUG_PRINT("info",("spider ABORT_SYM"));
+ /* just skip */
+ DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM);
+ case END_OF_INPUT:
+ DBUG_PRINT("info",("spider END_OF_INPUT"));
+ /* nothing to do */
+ break;
+ default:
+ DBUG_RETURN(ER_SPIDER_NOT_SUPPORTED_NUM);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_table_option_name(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ DBUG_ENTER("spider_db_sql::append_table_option_name");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_table_option_value(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ DBUG_ENTER("spider_db_sql::append_table_option_value");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_table_option_character_set()
+{
+ DBUG_ENTER("spider_db_sql::append_table_option_character_set");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_table_option_data_directory()
+{
+ DBUG_ENTER("spider_db_sql::append_table_option_data_directory");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_table_option_index_directory()
+{
+ DBUG_ENTER("spider_db_sql::append_table_option_index_directory");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_table_option_with_system_versioning()
+{
+ DBUG_ENTER("spider_db_sql::append_table_option_with_system_versioning");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_ident(
+ uint str_id,
+ LEX_CSTRING *name
+) {
+ spider_string *str = &sql_str[str_id];
+ DBUG_ENTER("spider_db_sql::append_ident");
+ DBUG_PRINT("info",("spider this=%p", this));
+ str->q_append(quote_char_for_ident.str, quote_char_for_ident.length);
+ str->q_append(name->str, name->length);
+ str->q_append(quote_char_for_ident.str, quote_char_for_ident.length);
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_table_name(
+ uint str_id,
+ LEX_CSTRING *schema_name,
+ LEX_CSTRING *table_name
+) {
+ int error_num;
+ spider_string *str = &sql_str[str_id];
+ DBUG_ENTER("spider_db_sql::append_table_name");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if ((error_num = append_ident(str_id, schema_name)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ str->q_append(SPIDER_SQL_DOT_STR, SPIDER_SQL_DOT_LEN);
+ error_num = append_ident(str_id, table_name);
+ DBUG_RETURN(error_num);
+}
+
+int spider_db_sql::append_table_name(
+ LEX_CSTRING *schema_name,
+ LEX_CSTRING *table_name
+) {
+ int error_num;
+ spider_string *str = &sql_str[0];
+ uint length = str->length();
+ DBUG_ENTER("spider_db_sql::append_table_name");
+ DBUG_PRINT("info",("spider this=%p", this));
+ str->length(table_name_pos[0]);
+ error_num = append_table_name(0, schema_name, table_name);
+ str->length(length);
+ DBUG_RETURN(error_num);
+}
+
+int spider_db_sql::append_spider_table(
+ LEX_CSTRING *table_name,
+ SPIDER_RWTBLTBL *rwtbltbl
+) {
+ int error_num;
+ spider_string *str = &sql_str[0];
+ SPIDER_RWTBLPTT *tp;
+ DBUG_ENTER("spider_db_sql::append_spider_table");
+ DBUG_PRINT("info",("spider this=%p", this));
+ str->length(sql_end_pos[0]);
+ if (!rwtbltbl->partition_method.length)
+ {
+ /* no partition definition */
+ if (str->reserve(
+ SPIDER_SQL_ENGINE_SPIDER_LEN +
+ (table_name->length + rwtbltbl->connection_str.length +
+ rwtbltbl->comment_str.length) * 2 + SPIDER_SQL_TABLE_LEN +
+ SPIDER_SQL_COMMENT_LEN + SPIDER_SQL_CONNECTION_LEN + 7
+ )) {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_ENGINE_SPIDER_STR, SPIDER_SQL_ENGINE_SPIDER_LEN);
+ str->q_append(SPIDER_SQL_CONNECTION_STR, SPIDER_SQL_CONNECTION_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->q_append(SPIDER_SQL_TABLE_STR, SPIDER_SQL_TABLE_LEN);
+ str->q_append(SPIDER_SQL_DOUBLE_QUOTE_STR, SPIDER_SQL_DOUBLE_QUOTE_LEN);
+ str->append_for_single_quote(table_name->str, table_name->length);
+ str->q_append(SPIDER_SQL_DOUBLE_QUOTE_STR, SPIDER_SQL_DOUBLE_QUOTE_LEN);
+ if (rwtbltbl->connection_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
+ str->append_for_single_quote(rwtbltbl->connection_str.str,
+ rwtbltbl->connection_str.length);
+ }
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ if (rwtbltbl->comment_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMENT_STR, SPIDER_SQL_COMMENT_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(rwtbltbl->comment_str.str,
+ rwtbltbl->comment_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ }
+ DBUG_RETURN(0);
+ }
+ if (str->reserve(
+ SPIDER_SQL_ENGINE_SPIDER_LEN +
+ (rwtbltbl->connection_str.length + rwtbltbl->comment_str.length) * 2 +
+ SPIDER_SQL_COMMENT_LEN + SPIDER_SQL_CONNECTION_LEN + 4 +
+ SPIDER_SQL_PARTITION_BY_LEN +
+ (rwtbltbl->subpartition_method.length ? SPIDER_SQL_SUBPARTITION_BY_LEN : 0) +
+ (
+ rwtbltbl->partition_method.length + rwtbltbl->partition_expression.length +
+ rwtbltbl->subpartition_method.length + rwtbltbl->subpartition_expression.length
+ ) * 2 + 5
+ )) {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_ENGINE_SPIDER_STR, SPIDER_SQL_ENGINE_SPIDER_LEN);
+ if (rwtbltbl->connection_str.length)
+ {
+ str->q_append(SPIDER_SQL_CONNECTION_STR, SPIDER_SQL_CONNECTION_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(rwtbltbl->connection_str.str,
+ rwtbltbl->connection_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ }
+ if (rwtbltbl->comment_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMENT_STR, SPIDER_SQL_COMMENT_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(rwtbltbl->comment_str.str,
+ rwtbltbl->comment_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ }
+ str->q_append(SPIDER_SQL_PARTITION_BY_STR, SPIDER_SQL_PARTITION_BY_LEN);
+ str->append_escape_string(rwtbltbl->partition_method.str,
+ rwtbltbl->partition_method.length);
+ str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
+ str->append_escape_string(rwtbltbl->partition_expression.str,
+ rwtbltbl->partition_expression.length);
+ str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
+
+ if (rwtbltbl->subpartition_method.length)
+ {
+ str->q_append(SPIDER_SQL_SUBPARTITION_BY_STR, SPIDER_SQL_SUBPARTITION_BY_LEN);
+ str->append_escape_string(rwtbltbl->subpartition_method.str,
+ rwtbltbl->subpartition_method.length);
+ str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
+ str->append_escape_string(rwtbltbl->subpartition_expression.str,
+ rwtbltbl->subpartition_expression.length);
+ str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
+ }
+
+ str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
+ tp = rwtbltbl->tp;
+ while (tp)
+ {
+ if ((error_num = append_spider_partition(table_name, rwtbltbl, tp)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ tp = tp->next;
+ if (tp)
+ {
+ str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
+ }
+ }
+ if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_spider_partition(
+ LEX_CSTRING *table_name,
+ SPIDER_RWTBLTBL *rwtbltbl,
+ SPIDER_RWTBLPTT *rwtblptt
+) {
+ int error_num;
+ spider_string *str = &sql_str[0];
+ SPIDER_RWTBLSPTT *ts;
+ DBUG_ENTER("spider_db_sql::append_spider_partition");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (!rwtblptt->ts)
+ {
+ /* no subpartition definition */
+ if (str->reserve(
+ SPIDER_SQL_PARTITION_LEN + SPIDER_SQL_VALUES_LESS_THAN_LEN + 2 +
+ (
+ table_name->length +
+ rwtblptt->partition_name.length +
+ rwtblptt->partition_description.length +
+ rwtblptt->connection_str.length + rwtblptt->comment_str.length
+ ) * 2 + SPIDER_SQL_TABLE_LEN + 3 +
+ SPIDER_SQL_COMMENT_LEN + SPIDER_SQL_CONNECTION_LEN + 5 +
+ SPIDER_SQL_COMMA_LEN
+ )) {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_PARTITION_STR, SPIDER_SQL_PARTITION_LEN);
+ str->append_escape_string(rwtblptt->partition_name.str,
+ rwtblptt->partition_name.length);
+
+ if (
+ rwtbltbl->partition_method.length >= 5 &&
+ !strncasecmp("range", rwtbltbl->partition_method.str, 5)
+ ) {
+ str->q_append(SPIDER_SQL_VALUES_LESS_THAN_STR,
+ SPIDER_SQL_VALUES_LESS_THAN_LEN);
+ if (
+ rwtblptt->partition_description.length == 8 &&
+ !strncasecmp("maxvalue", rwtblptt->partition_description.str, 8)
+ ) {
+ str->q_append(rwtblptt->partition_description.str,
+ rwtblptt->partition_description.length);
+ } else {
+ str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
+ str->append_escape_string(rwtblptt->partition_description.str,
+ rwtblptt->partition_description.length);
+ str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
+ }
+ } else if (
+ rwtbltbl->partition_method.length >= 4 &&
+ !strncasecmp("list", rwtbltbl->partition_method.str, 5)
+ ) {
+ str->q_append(SPIDER_SQL_VALUES_IN_STR, SPIDER_SQL_VALUES_IN_LEN);
+ str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
+ str->append_escape_string(rwtblptt->partition_description.str,
+ rwtblptt->partition_description.length);
+ str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
+ }
+
+ str->q_append(SPIDER_SQL_CONNECTION_STR, SPIDER_SQL_CONNECTION_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->q_append(SPIDER_SQL_TABLE_STR, SPIDER_SQL_TABLE_LEN);
+ str->q_append(SPIDER_SQL_DOUBLE_QUOTE_STR, SPIDER_SQL_DOUBLE_QUOTE_LEN);
+ str->append_for_single_quote(table_name->str, table_name->length);
+ str->q_append(SPIDER_SQL_DOUBLE_QUOTE_STR, SPIDER_SQL_DOUBLE_QUOTE_LEN);
+ if (rwtblptt->connection_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
+ str->append_for_single_quote(rwtblptt->connection_str.str,
+ rwtblptt->connection_str.length);
+ }
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ if (rwtblptt->comment_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMENT_STR, SPIDER_SQL_COMMENT_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(rwtblptt->comment_str.str,
+ rwtblptt->comment_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ }
+ DBUG_RETURN(0);
+ }
+ if (str->reserve(
+ SPIDER_SQL_PARTITION_LEN + SPIDER_SQL_VALUES_LESS_THAN_LEN + 2 +
+ (
+ rwtblptt->partition_name.length +
+ rwtblptt->partition_description.length +
+ rwtblptt->connection_str.length + rwtblptt->comment_str.length
+ ) * 2 +
+ SPIDER_SQL_COMMENT_LEN + SPIDER_SQL_CONNECTION_LEN + 5
+ )) {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_PARTITION_STR, SPIDER_SQL_PARTITION_LEN);
+ str->append_escape_string(rwtblptt->partition_name.str,
+ rwtblptt->partition_name.length);
+
+ if (
+ rwtbltbl->partition_method.length >= 5 &&
+ !strncasecmp("range", rwtbltbl->partition_method.str, 5)
+ ) {
+ str->q_append(SPIDER_SQL_VALUES_LESS_THAN_STR,
+ SPIDER_SQL_VALUES_LESS_THAN_LEN);
+ if (
+ rwtblptt->partition_description.length == 8 &&
+ !strncasecmp("maxvalue", rwtblptt->partition_description.str, 8)
+ ) {
+ str->q_append(rwtblptt->partition_description.str,
+ rwtblptt->partition_description.length);
+ } else {
+ str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
+ str->append_escape_string(rwtblptt->partition_description.str,
+ rwtblptt->partition_description.length);
+ str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
+ }
+ } else if (
+ rwtbltbl->partition_method.length >= 4 &&
+ !strncasecmp("list", rwtbltbl->partition_method.str, 5)
+ ) {
+ str->q_append(SPIDER_SQL_VALUES_IN_STR, SPIDER_SQL_VALUES_IN_LEN);
+ str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
+ str->append_escape_string(rwtblptt->partition_description.str,
+ rwtblptt->partition_description.length);
+ str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
+ }
+ if (rwtblptt->connection_str.length)
+ {
+ str->q_append(SPIDER_SQL_CONNECTION_STR, SPIDER_SQL_CONNECTION_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(rwtblptt->connection_str.str,
+ rwtblptt->connection_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ }
+ if (rwtblptt->comment_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMENT_STR, SPIDER_SQL_COMMENT_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(rwtblptt->comment_str.str,
+ rwtblptt->comment_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ }
+ str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
+ ts = rwtblptt->ts;
+ while (ts)
+ {
+ if ((error_num = append_spider_subpartition(table_name, rwtbltbl, ts)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ ts = ts->next;
+ if (ts)
+ {
+ str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
+ }
+ }
+ if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN + SPIDER_SQL_COMMA_LEN))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
+ DBUG_RETURN(0);
+}
+
+int spider_db_sql::append_spider_subpartition(
+ LEX_CSTRING *table_name,
+ SPIDER_RWTBLTBL *rwtbltbl,
+ SPIDER_RWTBLSPTT *rwtblsptt
+) {
+ spider_string *str = &sql_str[0];
+ DBUG_ENTER("spider_db_sql::append_spider_subpartition");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (str->reserve(
+ SPIDER_SQL_SUBPARTITION_LEN +
+ (
+ table_name->length +
+ rwtblsptt->subpartition_name.length +
+ rwtblsptt->subpartition_description.length +
+ rwtblsptt->connection_str.length + rwtblsptt->comment_str.length
+ ) * 2 + SPIDER_SQL_TABLE_LEN + 3 +
+ SPIDER_SQL_COMMENT_LEN + SPIDER_SQL_CONNECTION_LEN + 5 +
+ SPIDER_SQL_COMMA_LEN
+ )) {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_SUBPARTITION_STR, SPIDER_SQL_SUBPARTITION_LEN);
+ str->append_escape_string(rwtblsptt->subpartition_name.str,
+ rwtblsptt->subpartition_name.length);
+
+ str->q_append(SPIDER_SQL_CONNECTION_STR, SPIDER_SQL_CONNECTION_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->q_append(SPIDER_SQL_TABLE_STR, SPIDER_SQL_TABLE_LEN);
+ str->q_append(SPIDER_SQL_DOUBLE_QUOTE_STR, SPIDER_SQL_DOUBLE_QUOTE_LEN);
+ str->append_for_single_quote(table_name->str, table_name->length);
+ str->q_append(SPIDER_SQL_DOUBLE_QUOTE_STR, SPIDER_SQL_DOUBLE_QUOTE_LEN);
+ if (rwtblsptt->connection_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
+ str->append_for_single_quote(rwtblsptt->connection_str.str,
+ rwtblsptt->connection_str.length);
+ }
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ if (rwtblsptt->comment_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMENT_STR, SPIDER_SQL_COMMENT_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(rwtblsptt->comment_str.str,
+ rwtblsptt->comment_str.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ }
+ DBUG_RETURN(0);
+}
spider_db_result::spider_db_result(
SPIDER_DB_CONN *in_db_conn
diff --git a/storage/spider/spd_db_include.h b/storage/spider/spd_db_include.h
index 64cee006c65..abff3f3a6e6 100644
--- a/storage/spider/spd_db_include.h
+++ b/storage/spider/spd_db_include.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2008-2018 Kentoku Shiba
+/* Copyright (C) 2008-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -91,6 +92,8 @@ typedef st_spider_result SPIDER_RESULT;
#define SPIDER_SQL_SEMICOLON_LEN sizeof(SPIDER_SQL_SEMICOLON_STR) - 1
#define SPIDER_SQL_VALUE_QUOTE_STR "'"
#define SPIDER_SQL_VALUE_QUOTE_LEN (sizeof(SPIDER_SQL_VALUE_QUOTE_STR) - 1)
+#define SPIDER_SQL_DOUBLE_QUOTE_STR "\""
+#define SPIDER_SQL_DOUBLE_QUOTE_LEN (sizeof(SPIDER_SQL_DOUBLE_QUOTE_STR) - 1)
#define SPIDER_SQL_DOT_STR "."
#define SPIDER_SQL_DOT_LEN (sizeof(SPIDER_SQL_DOT_STR) - 1)
@@ -203,6 +206,24 @@ typedef st_spider_result SPIDER_RESULT;
#define SPIDER_SQL_CONNECTION_LEN (sizeof(SPIDER_SQL_CONNECTION_STR) - 1)
#define SPIDER_SQL_LCL_NAME_QUOTE_STR "`"
#define SPIDER_SQL_LCL_NAME_QUOTE_LEN (sizeof(SPIDER_SQL_LCL_NAME_QUOTE_STR) - 1)
+#define SPIDER_SQL_ENGINE_SPIDER_STR " engine spider "
+#define SPIDER_SQL_ENGINE_SPIDER_LEN (sizeof(SPIDER_SQL_ENGINE_SPIDER_STR) - 1)
+#define SPIDER_SQL_PARTITION_BY_STR " partition by "
+#define SPIDER_SQL_PARTITION_BY_LEN (sizeof(SPIDER_SQL_PARTITION_BY_STR) - 1)
+#define SPIDER_SQL_SUBPARTITION_BY_STR " subpartition by "
+#define SPIDER_SQL_SUBPARTITION_BY_LEN (sizeof(SPIDER_SQL_SUBPARTITION_BY_STR) - 1)
+#define SPIDER_SQL_VALUES_LESS_THAN_STR " values less than "
+#define SPIDER_SQL_VALUES_LESS_THAN_LEN (sizeof(SPIDER_SQL_VALUES_LESS_THAN_STR) - 1)
+#define SPIDER_SQL_VALUES_IN_STR " values in "
+#define SPIDER_SQL_VALUES_IN_LEN (sizeof(SPIDER_SQL_VALUES_IN_STR) - 1)
+#define SPIDER_SQL_DATABASE_STR "database"
+#define SPIDER_SQL_DATABASE_LEN (sizeof(SPIDER_SQL_DATABASE_STR) - 1)
+#define SPIDER_SQL_TABLE_STR "table"
+#define SPIDER_SQL_TABLE_LEN (sizeof(SPIDER_SQL_TABLE_STR) - 1)
+#define SPIDER_SQL_PARTITION_STR " partition "
+#define SPIDER_SQL_PARTITION_LEN (sizeof(SPIDER_SQL_PARTITION_STR) - 1)
+#define SPIDER_SQL_SUBPARTITION_STR " subpartition "
+#define SPIDER_SQL_SUBPARTITION_LEN (sizeof(SPIDER_SQL_SUBPARTITION_STR) - 1)
#define SPIDER_CONN_KIND_MYSQL (1 << 0)
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
@@ -223,13 +244,14 @@ typedef st_spider_result SPIDER_RESULT;
#define SPIDER_SQL_TYPE_BULK_UPDATE_SQL (1 << 4)
#define SPIDER_SQL_TYPE_TMP_SQL (1 << 5)
#define SPIDER_SQL_TYPE_DROP_TMP_TABLE_SQL (1 << 6)
-#define SPIDER_SQL_TYPE_OTHER_SQL (1 << 7)
-#define SPIDER_SQL_TYPE_HANDLER (1 << 8)
-#define SPIDER_SQL_TYPE_SELECT_HS (1 << 9)
-#define SPIDER_SQL_TYPE_INSERT_HS (1 << 10)
-#define SPIDER_SQL_TYPE_UPDATE_HS (1 << 11)
-#define SPIDER_SQL_TYPE_DELETE_HS (1 << 12)
-#define SPIDER_SQL_TYPE_OTHER_HS (1 << 13)
+#define SPIDER_SQL_TYPE_DDL_SQL (1 << 7)
+#define SPIDER_SQL_TYPE_OTHER_SQL (1 << 8)
+#define SPIDER_SQL_TYPE_HANDLER (1 << 9)
+#define SPIDER_SQL_TYPE_SELECT_HS (1 << 10)
+#define SPIDER_SQL_TYPE_INSERT_HS (1 << 11)
+#define SPIDER_SQL_TYPE_UPDATE_HS (1 << 12)
+#define SPIDER_SQL_TYPE_DELETE_HS (1 << 13)
+#define SPIDER_SQL_TYPE_OTHER_HS (1 << 14)
enum spider_bulk_upd_start {
SPD_BU_NOT_START,
@@ -911,6 +933,105 @@ public:
#endif
};
+#define SPIDER_DB_SQL_STRINGS 2
+#define SPIDER_IDENT_SPACE 64 * 4 + 2
+#define SPIDER_TABLE_NAME_SPACE SPIDER_IDENT_SPACE * 2 + 1
+
+class SPIDER_RWTBLSPTT;
+class SPIDER_RWTBLPTT;
+class SPIDER_RWTBLTBL;
+class SPIDER_RWTBL;
+
+class spider_db_sql
+{
+protected:
+ bool sql_init;
+ LEX_CSTRING quote_char_for_ident;
+public:
+ uint dbton_id;
+ uint table_name_pos[SPIDER_DB_SQL_STRINGS];
+ uint sql_end_pos[SPIDER_DB_SQL_STRINGS];
+ spider_string *sql_str;
+ spider_db_sql *next;
+ spider_db_sql(
+ uint dbton_id_arg
+ ): sql_init(FALSE), dbton_id(dbton_id_arg),
+ sql_str(NULL), next(NULL) {}
+ spider_db_sql(
+ uint dbton_id_arg,
+ LEX_CSTRING quote_char
+ ): sql_init(FALSE), quote_char_for_ident(quote_char),
+ dbton_id(dbton_id_arg), sql_str(NULL), next(NULL) {}
+ virtual ~spider_db_sql();
+ virtual int init(
+ CHARSET_INFO *charset
+ );
+ virtual void reset(
+ CHARSET_INFO *charset
+ );
+ virtual void set_quote_char_for_ident(
+ LEX_CSTRING quote_char
+ );
+ virtual int append_parsed_symbol(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ virtual int append_parsed_symbol_ex(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ virtual int append_parsed_symbol(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok,
+ spider_string *str
+ );
+ virtual int append_table_name_space();
+ virtual int append_table_name_space(uint str_id);
+ virtual void set_sql_end_pos();
+ virtual int append_create_or_replace() = 0;
+ virtual int append_create_or_replace_table() = 0;
+ virtual int append_if_not_exists() = 0;
+ virtual int append_table_option_name(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ virtual int append_table_option_value(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ virtual int append_table_option_character_set();
+ virtual int append_table_option_data_directory();
+ virtual int append_table_option_index_directory();
+ virtual int append_table_option_with_system_versioning();
+ virtual int append_ident(
+ uint str_id,
+ LEX_CSTRING *name
+ );
+ virtual int append_table_name(
+ uint str_id,
+ LEX_CSTRING *schema_name,
+ LEX_CSTRING *table_name
+ );
+ virtual int append_table_name(
+ LEX_CSTRING *schema_name,
+ LEX_CSTRING *table_name
+ );
+ virtual int append_spider_table(
+ LEX_CSTRING *table_name,
+ SPIDER_RWTBLTBL *rwtbltbl
+ );
+ virtual int append_spider_partition(
+ LEX_CSTRING *table_name,
+ SPIDER_RWTBLTBL *rwtbltbl,
+ SPIDER_RWTBLPTT *rwtblptt
+ );
+ virtual int append_spider_subpartition(
+ LEX_CSTRING *table_name,
+ SPIDER_RWTBLTBL *rwtbltbl,
+ SPIDER_RWTBLSPTT *rwtblsptt
+ );
+};
+
class spider_db_row
{
public:
@@ -1603,6 +1724,10 @@ public:
spider_db_copy_table *tgt_ct,
ulong sql_type
) = 0;
+ virtual int set_sql_for_exec(
+ spider_db_sql *db_sql,
+ int link_idx
+ ) = 0;
virtual int execute_sql(
ulong sql_type,
SPIDER_CONN *conn,
@@ -1841,10 +1966,14 @@ typedef struct st_spider_dbton
spider_db_copy_table *(*create_db_copy_table)(
spider_db_share *db_share);
SPIDER_DB_CONN *(*create_db_conn)(SPIDER_CONN *conn);
+ spider_db_sql *(*create_db_sql)();
bool (*support_direct_join)();
spider_db_util *db_util;
} SPIDER_DBTON;
+spider_db_sql *spider_mariadb_create_sql();
+spider_db_sql *spider_oracle_create_sql();
+
typedef struct st_spider_position
{
SPIDER_DB_ROW *row;
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc
index 262e47120ce..fe8793a2ec0 100644
--- a/storage/spider/spd_db_mysql.cc
+++ b/storage/spider/spd_db_mysql.cc
@@ -1,4 +1,5 @@
-/* Copyright (C) 2012-2018 Kentoku Shiba
+/* Copyright (C) 2012-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -60,6 +61,7 @@ extern const char spider_dig_upper[];
spider_db_mysql_util spider_db_mysql_utility;
spider_db_mariadb_util spider_db_mariadb_utility;
+extern LEX_CSTRING spider_ident_back_quote;
#define SPIDER_SQL_NAME_QUOTE_STR "`"
#define SPIDER_SQL_NAME_QUOTE_LEN (sizeof(SPIDER_SQL_NAME_QUOTE_STR) - 1)
static const char *name_quote_str = SPIDER_SQL_NAME_QUOTE_STR;
@@ -218,6 +220,18 @@ int spider_mariadb_deinit()
DBUG_RETURN(0);
}
+spider_db_sql *spider_mysql_create_sql()
+{
+ DBUG_ENTER("spider_mysql_create_sql");
+ DBUG_RETURN(new spider_mysql_sql());
+}
+
+spider_db_sql *spider_mariadb_create_sql()
+{
+ DBUG_ENTER("spider_mariadb_create_sql");
+ DBUG_RETURN(new spider_mariadb_sql());
+}
+
spider_db_share *spider_mysql_create_share(
SPIDER_SHARE *share
) {
@@ -302,6 +316,7 @@ SPIDER_DBTON spider_dbton_mysql = {
spider_mysql_create_handler,
spider_mysql_create_copy_table,
spider_mysql_create_conn,
+ spider_mysql_create_sql,
spider_mysql_support_direct_join,
&spider_db_mysql_utility
};
@@ -316,10 +331,168 @@ SPIDER_DBTON spider_dbton_mariadb = {
spider_mariadb_create_handler,
spider_mariadb_create_copy_table,
spider_mariadb_create_conn,
+ spider_mariadb_create_sql,
spider_mariadb_support_direct_join,
&spider_db_mariadb_utility
};
+spider_mbase_sql::spider_mbase_sql(
+ uint dbton_id_arg
+): spider_db_sql(dbton_id_arg, spider_ident_back_quote)
+{
+ DBUG_ENTER("spider_mbase_sql::spider_mbase_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+spider_mbase_sql::~spider_mbase_sql()
+{
+ DBUG_ENTER("spider_mbase_sql::~spider_mbase_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+spider_mysql_sql::spider_mysql_sql():
+ spider_mbase_sql(spider_db_mysql_utility.dbton_id)
+{
+ DBUG_ENTER("spider_mysql_sql::spider_mysql_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+spider_mariadb_sql::spider_mariadb_sql():
+ spider_mbase_sql(spider_db_mariadb_utility.dbton_id)
+{
+ DBUG_ENTER("spider_mariadb_sql::spider_mariadb_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+spider_mysql_sql::~spider_mysql_sql()
+{
+ DBUG_ENTER("spider_mysql_sql::~spider_mysql_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+spider_mariadb_sql::~spider_mariadb_sql()
+{
+ DBUG_ENTER("spider_mariadb_sql::~spider_mariadb_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+int spider_mysql_sql::append_create_or_replace()
+{
+ DBUG_ENTER("spider_mysql_sql::append_create_or_replace");
+ DBUG_PRINT("info",("spider this=%p", this));
+ /* nothing to do */
+ DBUG_RETURN(0);
+}
+
+int spider_mariadb_sql::append_create_or_replace()
+{
+ DBUG_ENTER("spider_mariadb_sql::append_create_or_replace");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (unlikely(sql_str[0].append(STRING_WITH_LEN("or replace "))))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_mysql_sql::append_create_or_replace_table()
+{
+ DBUG_ENTER("spider_mysql_sql::append_create_or_replace_table");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (unlikely(sql_str[1].append(STRING_WITH_LEN("drop table if exists "))))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(append_table_name_space(1));
+}
+
+int spider_mariadb_sql::append_create_or_replace_table()
+{
+ DBUG_ENTER("spider_mariadb_sql::append_create_or_replace_table");
+ DBUG_PRINT("info",("spider this=%p", this));
+ /* nothing to do */
+ DBUG_RETURN(0);
+}
+
+int spider_mbase_sql::append_if_not_exists()
+{
+ DBUG_ENTER("spider_mbase_sql::append_if_not_exists");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (unlikely(sql_str[0].append(STRING_WITH_LEN("if not exists "))))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_mbase_sql::append_table_option_name(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ DBUG_ENTER("spider_mbase_sql::append_table_option_name");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(append_parsed_symbol(symbol_tok, yylval_tok, &sql_str[0]));
+}
+
+int spider_mbase_sql::append_table_option_value(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ DBUG_ENTER("spider_mbase_sql::append_table_option_value");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(append_parsed_symbol(symbol_tok, yylval_tok, &sql_str[0]));
+}
+
+int spider_mbase_sql::append_table_option_character_set()
+{
+ DBUG_ENTER("spider_mbase_sql::append_table_option_character_set");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (unlikely(sql_str[0].append(STRING_WITH_LEN("charset "))))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_mbase_sql::append_table_option_data_directory()
+{
+ DBUG_ENTER("spider_mbase_sql::append_table_option_data_directory");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (unlikely(sql_str[0].append(STRING_WITH_LEN("data directory "))))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_mbase_sql::append_table_option_index_directory()
+{
+ DBUG_ENTER("spider_mbase_sql::append_table_option_index_directory");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (unlikely(sql_str[0].append(STRING_WITH_LEN("index directory "))))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_mariadb_sql::append_table_option_with_system_versioning()
+{
+ DBUG_ENTER("spider_db_sql::append_table_option_with_system_versioning");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (unlikely(sql_str[0].append(STRING_WITH_LEN("with system versioning "))))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(0);
+}
+
spider_db_mbase_row::spider_db_mbase_row(
uint dbton_id
) : spider_db_row(dbton_id),
@@ -6811,6 +6984,8 @@ int spider_mbase_handler::init()
__func__, __FILE__, __LINE__, MYF(MY_WME | MY_ZEROFILL),
&link_for_hash,
sizeof(SPIDER_LINK_FOR_HASH) * share->link_count,
+ &query,
+ sizeof(spider_string *) * share->link_count,
&minimum_select_bitmap,
table ? sizeof(uchar) * no_bytes_in_map(table->read_set) : 0,
NullS))
@@ -11965,6 +12140,45 @@ int spider_mbase_handler::set_sql_for_exec(
DBUG_RETURN(0);
}
+int spider_mbase_handler::set_sql_for_exec(
+ spider_db_sql *db_sql,
+ int link_idx
+) {
+ uint tmp_pos;
+ SPIDER_RESULT_LIST *result_list = &spider->result_list;
+ spider_string *str;
+ DBUG_ENTER("spider_mbase_handler::set_sql_for_exec");
+ DBUG_PRINT("info",("spider this=%p", this));
+ query[link_idx] = &result_list->sqls[link_idx];
+ str = query[link_idx];
+ if (str->reserve(db_sql->sql_end_pos[0] + db_sql->sql_end_pos[1] +
+ SPIDER_SQL_SEMICOLON_LEN))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ if (db_sql->sql_end_pos[1])
+ {
+ str->copy(db_sql->sql_str[1]);
+ str->length(db_sql->table_name_pos[1]);
+ append_table_name_with_adjusting(str, link_idx, SPIDER_SQL_TYPE_DDL_SQL);
+ str->length(db_sql->sql_end_pos[1]);
+ str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN);
+ str->q_append(db_sql->sql_str[0].ptr(), db_sql->sql_end_pos[0]);
+ tmp_pos = str->length();
+ str->length(str->length() - db_sql->sql_end_pos[0] +
+ db_sql->table_name_pos[0]);
+ append_table_name_with_adjusting(str, link_idx, SPIDER_SQL_TYPE_DDL_SQL);
+ str->length(tmp_pos);
+ } else {
+ str->copy(db_sql->sql_str[0]);
+ str->length(db_sql->table_name_pos[0]);
+ append_table_name_with_adjusting(str, link_idx, SPIDER_SQL_TYPE_DDL_SQL);
+ str->length(db_sql->sql_end_pos[0]);
+ }
+ DBUG_PRINT("info",("spider str=%s", str->c_ptr_safe()));
+ DBUG_RETURN(0);
+}
+
int spider_mbase_handler::execute_sql(
ulong sql_type,
SPIDER_CONN *conn,
@@ -12013,6 +12227,11 @@ int spider_mbase_handler::execute_sql(
tgt_sql = exec_ha_sql;
tgt_length = tgt_sql->length();
break;
+ case SPIDER_SQL_TYPE_DDL_SQL:
+ DBUG_PRINT("info",("spider SPIDER_SQL_TYPE_DDL_SQL"));
+ tgt_sql = query[conn->link_idx];
+ tgt_length = tgt_sql->length();
+ break;
default:
/* nothing to do */
DBUG_PRINT("info",("spider default"));
diff --git a/storage/spider/spd_db_mysql.h b/storage/spider/spd_db_mysql.h
index 3448cea06cc..968e2f37848 100644
--- a/storage/spider/spd_db_mysql.h
+++ b/storage/spider/spd_db_mysql.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2012-2018 Kentoku Shiba
+/* Copyright (C) 2012-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -188,6 +189,48 @@ public:
~spider_db_mariadb_util();
};
+class spider_mbase_sql: public spider_db_sql
+{
+public:
+ spider_mbase_sql(
+ uint dbton_id_arg
+ );
+ virtual ~spider_mbase_sql();
+ virtual int append_create_or_replace() = 0;
+ virtual int append_create_or_replace_table() = 0;
+ int append_if_not_exists();
+ int append_table_option_name(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_table_option_value(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_table_option_character_set();
+ int append_table_option_data_directory();
+ int append_table_option_index_directory();
+};
+
+class spider_mysql_sql: public spider_mbase_sql
+{
+public:
+ spider_mysql_sql();
+ ~spider_mysql_sql();
+ int append_create_or_replace();
+ int append_create_or_replace_table();
+};
+
+class spider_mariadb_sql: public spider_mbase_sql
+{
+public:
+ spider_mariadb_sql();
+ ~spider_mariadb_sql();
+ int append_create_or_replace();
+ int append_create_or_replace_table();
+ int append_table_option_with_system_versioning();
+};
+
class spider_db_mbase_row: public spider_db_row
{
public:
@@ -729,6 +772,7 @@ protected:
int tmp_sql_pos4; /* insert val pos at tmp_table_join */
int tmp_sql_pos5; /* end of drop tbl at tmp_table_join */
spider_string dup_update_sql;
+ spider_string **query;
spider_string *exec_sql;
spider_string *exec_insert_sql;
spider_string *exec_update_sql;
@@ -1417,6 +1461,10 @@ public:
spider_db_copy_table *tgt_ct,
ulong sql_type
);
+ int set_sql_for_exec(
+ spider_db_sql *db_sql,
+ int link_idx
+ );
int execute_sql(
ulong sql_type,
SPIDER_CONN *conn,
diff --git a/storage/spider/spd_db_oracle.cc b/storage/spider/spd_db_oracle.cc
index eae749f6867..63e8a10634e 100644
--- a/storage/spider/spd_db_oracle.cc
+++ b/storage/spider/spd_db_oracle.cc
@@ -1,4 +1,5 @@
-/* Copyright (C) 2012-2018 Kentoku Shiba
+/* Copyright (C) 2012-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -30,6 +31,12 @@
#endif
#endif
+#include "spd_db_include.h"
+#include "spd_db_oracle.h"
+
+#define SPIDER_DB_WRAPPER_ORACLE "oracle"
+extern LEX_CSTRING spider_ident_double_quote;
+
#ifdef HAVE_ORACLE_OCI
#if (defined(WIN32) || defined(_WIN32) || defined(WINDOWS) || defined(_WINDOWS))
#include <Shlwapi.h>
@@ -38,9 +45,7 @@
#include <oci.h>
#include "spd_err.h"
#include "spd_param.h"
-#include "spd_db_include.h"
#include "spd_include.h"
-#include "spd_db_oracle.h"
#include "ha_spider.h"
#include "spd_conn.h"
#include "spd_db_conn.h"
@@ -57,8 +62,6 @@ extern HASH spider_ipport_conns;
extern SPIDER_DBTON spider_dbton[SPIDER_DBTON_SIZE];
extern const char spider_dig_upper[];
-#define SPIDER_DB_WRAPPER_ORACLE "oracle"
-
#define SPIDER_SQL_NAME_QUOTE_STR "\""
#define SPIDER_SQL_NAME_QUOTE_LEN (sizeof(SPIDER_SQL_NAME_QUOTE_STR) - 1)
static const char *name_quote_str = SPIDER_SQL_NAME_QUOTE_STR;
@@ -334,10 +337,76 @@ SPIDER_DBTON spider_dbton_oracle = {
spider_oracle_create_handler,
spider_oracle_create_copy_table,
spider_oracle_create_conn,
+ spider_oracle_create_sql,
spider_oracle_support_direct_join,
&spider_db_oracle_utility
};
+#else
+SPIDER_DBTON spider_dbton_oracle = {
+ 0,
+ SPIDER_DB_WRAPPER_ORACLE,
+ SPIDER_DB_ACCESS_TYPE_SQL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ spider_oracle_create_sql,
+ NULL,
+ NULL
+};
+#endif
+
+spider_db_sql *spider_oracle_create_sql()
+{
+ DBUG_ENTER("spider_oracle_create_sql");
+ DBUG_RETURN(new spider_oracle_sql());
+}
+
+spider_oracle_sql::spider_oracle_sql():
+ spider_db_sql(spider_dbton_oracle.dbton_id, spider_ident_double_quote)
+{
+ DBUG_ENTER("spider_oracle_sql::spider_oracle_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+spider_oracle_sql::~spider_oracle_sql()
+{
+ DBUG_ENTER("spider_oracle_sql::~spider_oracle_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+int spider_oracle_sql::append_create_or_replace()
+{
+ DBUG_ENTER("spider_oracle_sql::append_create_or_replace");
+ DBUG_PRINT("info",("spider this=%p", this));
+ /* nothing to do */
+ DBUG_RETURN(0);
+}
+int spider_oracle_sql::append_create_or_replace_table()
+{
+ DBUG_ENTER("spider_oracle_sql::append_create_or_replace_table");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (unlikely(sql_str[1].append(STRING_WITH_LEN("drop table "))))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ DBUG_RETURN(append_table_name_space(1));
+}
+
+int spider_oracle_sql::append_if_not_exists()
+{
+ DBUG_ENTER("spider_oracle_sql::append_if_not_exists");
+ DBUG_PRINT("info",("spider this=%p", this));
+ /* nothing to do */
+ DBUG_RETURN(0);
+}
+
+#ifdef HAVE_ORACLE_OCI
spider_db_oracle_row::spider_db_oracle_row() :
spider_db_row(spider_dbton_oracle.dbton_id),
db_conn(NULL), result(NULL),
@@ -5391,6 +5460,8 @@ int spider_oracle_handler::init()
__func__, __FILE__, __LINE__, MYF(MY_WME | MY_ZEROFILL),
&link_for_hash,
sizeof(SPIDER_LINK_FOR_HASH) * share->link_count,
+ &query,
+ sizeof(spider_string *) * share->link_count,
&minimum_select_bitmap,
table ? sizeof(uchar) * no_bytes_in_map(table->read_set) : 0,
NullS))
@@ -10882,6 +10953,45 @@ int spider_oracle_handler::set_sql_for_exec(
DBUG_RETURN(0);
}
+int spider_oracle_handler::set_sql_for_exec(
+ spider_db_sql *db_sql,
+ int link_idx
+) {
+ uint tmp_pos;
+ SPIDER_RESULT_LIST *result_list = &spider->result_list;
+ spider_string *str;
+ DBUG_ENTER("spider_oracle_handler::set_sql_for_exec");
+ DBUG_PRINT("info",("spider this=%p", this));
+ query[link_idx] = &result_list->sqls[link_idx];
+ str = query[link_idx];
+ if (str->reserve(db_sql->sql_end_pos[0] + db_sql->sql_end_pos[1] +
+ SPIDER_SQL_SEMICOLON_LEN))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ if (db_sql->sql_end_pos[1])
+ {
+ str->copy(db_sql->sql_str[1]);
+ str->length(db_sql->table_name_pos[1]);
+ append_table_name_with_adjusting(str, link_idx, SPIDER_SQL_TYPE_DDL_SQL);
+ str->length(db_sql->sql_end_pos[1]);
+ str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN);
+ str->q_append(db_sql->sql_str[0].ptr(), db_sql->sql_end_pos[0]);
+ tmp_pos = str->length();
+ str->length(str->length() - db_sql->sql_end_pos[0] +
+ db_sql->table_name_pos[0]);
+ append_table_name_with_adjusting(str, link_idx, SPIDER_SQL_TYPE_DDL_SQL);
+ str->length(tmp_pos);
+ } else {
+ str->copy(db_sql->sql_str[0]);
+ str->length(db_sql->table_name_pos[0]);
+ append_table_name_with_adjusting(str, link_idx, SPIDER_SQL_TYPE_DDL_SQL);
+ str->length(db_sql->sql_end_pos[0]);
+ }
+ DBUG_PRINT("info",("spider query=%s", str->c_ptr_safe()));
+ DBUG_RETURN(0);
+}
+
int spider_oracle_handler::execute_sql(
ulong sql_type,
SPIDER_CONN *conn,
@@ -10938,6 +11048,11 @@ int spider_oracle_handler::execute_sql(
tgt_sql = exec_ha_sql;
tgt_length = tgt_sql->length();
break;
+ case SPIDER_SQL_TYPE_DDL_SQL:
+ DBUG_PRINT("info",("spider SPIDER_SQL_TYPE_DDL_SQL"));
+ tgt_sql = query[conn->link_idx];
+ tgt_length = tgt_sql->length();
+ break;
default:
/* nothing to do */
DBUG_PRINT("info",("spider default"));
diff --git a/storage/spider/spd_db_oracle.h b/storage/spider/spd_db_oracle.h
index d0bd1757418..7f8c17b1325 100644
--- a/storage/spider/spd_db_oracle.h
+++ b/storage/spider/spd_db_oracle.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2012-2018 Kentoku Shiba
+/* Copyright (C) 2012-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -13,6 +14,17 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+class spider_oracle_sql: public spider_db_sql
+{
+public:
+ spider_oracle_sql();
+ ~spider_oracle_sql();
+ int append_create_or_replace();
+ int append_create_or_replace_table();
+ int append_if_not_exists();
+};
+
+#ifdef HAVE_ORACLE_OCI
class spider_db_oracle;
class spider_db_oracle_result;
@@ -647,6 +659,7 @@ private:
int tmp_sql_pos4; /* insert val pos at tmp_table_join */
int tmp_sql_pos5; /* end of drop tbl at tmp_table_join */
spider_string dup_update_sql;
+ spider_string **query;
spider_string *exec_sql;
spider_string *exec_insert_sql;
spider_string *exec_update_sql;
@@ -1338,6 +1351,10 @@ public:
spider_db_copy_table *tgt_ct,
ulong sql_type
);
+ int set_sql_for_exec(
+ spider_db_sql *db_sql,
+ int link_idx
+ );
int execute_sql(
ulong sql_type,
SPIDER_CONN *conn,
@@ -1606,3 +1623,4 @@ public:
spider_db_copy_table *source_ct
);
};
+#endif
diff --git a/storage/spider/spd_environ.h b/storage/spider/spd_environ.h
index 5e66a912582..1f4cf4ceae3 100644
--- a/storage/spider/spd_environ.h
+++ b/storage/spider/spd_environ.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2008-2018 Kentoku Shiba & 2017 MariaDB corp
+/* Copyright (C) 2008-2018 Kentoku Shiba
+ Copyright (C) 2017-2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,6 +19,7 @@
*/
#ifndef SPD_ENVIRON_INCLUDED
+#define SPD_ENVIRON_INCLUDED
#if (defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100000)
#define SPIDER_HANDLER_START_BULK_INSERT_HAS_FLAGS
@@ -40,6 +42,8 @@
#if defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100300
#define SPIDER_UPDATE_ROW_HAS_CONST_NEW_DATA
+#define SPIDER_PARTITION_HAS_CONNECTION_STRING
+#define SPIDER_TOKEN_10_3
#endif
#if defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100309
@@ -49,5 +53,7 @@
#if defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100400
#define SPIDER_USE_CONST_ITEM_FOR_STRING_INT_REAL_DECIMAL_DATE_ITEM
#define SPIDER_SQL_CACHE_IS_IN_LEX
+#define SPIDER_REWRITE_AVAILABLE
+#define SPIDER_TOKEN_10_4
#endif
#endif /* SPD_ENVIRON_INCLUDED */
diff --git a/storage/spider/spd_err.h b/storage/spider/spd_err.h
index 1523df21cf1..591fd301365 100644
--- a/storage/spider/spd_err.h
+++ b/storage/spider/spd_err.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2008-2017 Kentoku Shiba
+/* Copyright (C) 2008-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -124,8 +125,17 @@
#define ER_SPIDER_CON_COUNT_ERROR_STR "Too many connections between spider and remote"
#define ER_SPIDER_TABLE_OPEN_TIMEOUT_NUM 12714
#define ER_SPIDER_TABLE_OPEN_TIMEOUT_STR "Table %s.%s open timeout"
+#define ER_SPIDER_NOT_SUPPORTED_NUM 12715
+#define ER_SPIDER_NOT_SUPPORTED_STR "%s is not supported by %s"
+#define ER_SPIDER_INVALID_VALUE_NUM 12716
+#define ER_SPIDER_INVALID_VALUE_STR "Invalid value %s in %s.%s"
+#define ER_SPIDER_SYNTAX_NUM 12717
+#define ER_SPIDER_SYNTAX_STR "%s detected a syntax error near '%-.80s' at line %d"
+#define ER_SPIDER_TOO_LONG_NUM 12718
+#define ER_SPIDER_TOO_LONG_STR "%s is too long"
#define ER_SPIDER_COND_SKIP_NUM 12801
#define ER_SPIDER_UNKNOWN_NUM 12500
#define ER_SPIDER_UNKNOWN_STR "unknown"
#define ER_SPIDER_UNKNOWN_LEN (sizeof(ER_SPIDER_UNKNOWN_STR) - 1)
+#define ER_SPIDER_UNKNOWN_STR2 "unknown error %d is occured by %s"
diff --git a/storage/spider/spd_include.h b/storage/spider/spd_include.h
index 37ec2d8c608..c4fdffe28ac 100644
--- a/storage/spider/spd_include.h
+++ b/storage/spider/spd_include.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2008-2018 Kentoku Shiba
+/* Copyright (C) 2008-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -13,8 +14,13 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+#ifdef SPIDER_REWRITE_AVAILABLE
+#define SPIDER_DETAIL_VERSION "3.4.1"
+#define SPIDER_HEX_VERSION 0x0304
+#else
#define SPIDER_DETAIL_VERSION "3.3.14"
#define SPIDER_HEX_VERSION 0x0303
+#endif
#if MYSQL_VERSION_ID < 50500
#define spider_my_free(A,B) my_free(A,B)
@@ -260,7 +266,7 @@ const char SPIDER_empty_string = "";
#define SPIDER_TMP_SHARE_LONG_COUNT 19
#define SPIDER_TMP_SHARE_LONGLONG_COUNT 3
-#define SPIDER_MEM_CALC_LIST_NUM 257
+#define SPIDER_MEM_CALC_LIST_NUM 264
#define SPIDER_CONN_META_BUF_LEN 64
#define SPIDER_BACKUP_DASTATUS \
@@ -1405,6 +1411,52 @@ public:
ulong sort;
};
+class SPIDER_RWTBLSPTT
+{
+public:
+ ulonglong subpartition_ordinal_position;
+ LEX_CSTRING subpartition_name;
+ LEX_CSTRING subpartition_description;
+ LEX_CSTRING connection_str;
+ LEX_CSTRING comment_str;
+ SPIDER_RWTBLSPTT *next;
+};
+
+class SPIDER_RWTBLPTT
+{
+public:
+ ulonglong partition_ordinal_position;
+ LEX_CSTRING partition_name;
+ LEX_CSTRING partition_description;
+ LEX_CSTRING connection_str;
+ LEX_CSTRING comment_str;
+ SPIDER_RWTBLSPTT *ts;
+ SPIDER_RWTBLPTT *next;
+};
+
+class SPIDER_RWTBLTBL
+{
+public:
+ ulonglong partition_id;
+ LEX_CSTRING partition_method;
+ LEX_CSTRING partition_expression;
+ LEX_CSTRING subpartition_method;
+ LEX_CSTRING subpartition_expression;
+ LEX_CSTRING connection_str;
+ LEX_CSTRING comment_str;
+ SPIDER_RWTBLPTT *tp;
+ SPIDER_RWTBLTBL *next;
+};
+
+class SPIDER_RWTBL: public SPIDER_SORT
+{
+public:
+ ulonglong table_id;
+ LEX_CSTRING db_name;
+ LEX_CSTRING table_name;
+ SPIDER_RWTBLTBL *tt;
+};
+
typedef struct st_spider_trx_ha
{
char *table_name;
diff --git a/storage/spider/spd_param.cc b/storage/spider/spd_param.cc
index 6b237bbfff8..fd88a2c2348 100644
--- a/storage/spider/spd_param.cc
+++ b/storage/spider/spd_param.cc
@@ -1,4 +1,5 @@
-/* Copyright (C) 2008-2018 Kentoku Shiba
+/* Copyright (C) 2008-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -38,6 +39,12 @@ extern struct st_mysql_plugin spider_i_s_alloc_mem;
#ifdef MARIADB_BASE_VERSION
extern struct st_maria_plugin spider_i_s_alloc_mem_maria;
#endif
+#ifdef SPIDER_REWRITE_AVAILABLE
+extern struct st_mysql_plugin spider_audit_rewrite;
+#ifdef MARIADB_BASE_VERSION
+extern struct st_maria_plugin spider_audit_rewrite_maria;
+#endif
+#endif
extern volatile ulonglong spider_mon_table_cache_version;
extern volatile ulonglong spider_mon_table_cache_version_req;
@@ -3526,6 +3533,9 @@ mysql_declare_plugin(spider)
0,
#endif
},
+#ifdef SPIDER_REWRITE_AVAILABLE
+spider_audit_rewrite,
+#endif
spider_i_s_alloc_mem
mysql_declare_plugin_end;
@@ -3546,6 +3556,9 @@ maria_declare_plugin(spider)
SPIDER_DETAIL_VERSION,
MariaDB_PLUGIN_MATURITY_STABLE
},
+#ifdef SPIDER_REWRITE_AVAILABLE
+spider_audit_rewrite_maria,
+#endif
spider_i_s_alloc_mem_maria
maria_declare_plugin_end;
#endif
diff --git a/storage/spider/spd_parse.cc b/storage/spider/spd_parse.cc
new file mode 100644
index 00000000000..500a8507e7f
--- /dev/null
+++ b/storage/spider/spd_parse.cc
@@ -0,0 +1,1058 @@
+/* Copyright (C) 2018-2019 Kentoku Shiba
+ Copyright (C) 2018-2019 MariaDB corp
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#define MYSQL_SERVER 1
+#define MYSQL_LEX 1
+#include <my_global.h>
+#include "mysql_version.h"
+#include "spd_environ.h"
+#if MYSQL_VERSION_ID >= 50500
+#include "sql_priv.h"
+#include "probes_mysql.h"
+#include "sql_class.h"
+#include "sql_partition.h"
+#include "spd_err.h"
+#include "spd_db_include.h"
+#include "spd_include.h"
+#include "ha_spider.h"
+#include "spd_trx.h"
+#include "spd_db_conn.h"
+#include "spd_table.h"
+#include "spd_conn.h"
+#include "spd_malloc.h"
+#include "spd_parse.h"
+
+extern SPIDER_DBTON spider_dbton[SPIDER_DBTON_SIZE];
+#ifdef SPIDER_HAS_HASH_VALUE_TYPE
+extern HASH spider_open_tables;
+#endif
+
+LEX_CSTRING spider_ident_back_quote = {STRING_WITH_LEN("`")};
+LEX_CSTRING spider_ident_double_quote = {STRING_WITH_LEN("\"")};
+
+spider_parse_sql::spider_parse_sql() :
+ flags(0), found_semicolon(NULL), parser_state_backup(NULL), work_str(NULL),
+ spider(NULL), spider_last(NULL), trx(NULL), field(NULL), zero_bitmap(NULL)
+{
+ DBUG_ENTER("spider_parse_sql::spider_parse_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_VOID_RETURN;
+}
+
+spider_parse_sql::~spider_parse_sql()
+{
+ spider_db_sql *db_sql_tmp;
+ DBUG_ENTER("spider_parse_sql::~spider_parse_sql");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (flags & SPIDER_PARSE_PARSER_STATE_BACKUPED)
+ {
+ thd->m_parser_state = parser_state_backup;
+ }
+ if (spider)
+ {
+ ha_spider *tmp = spider;
+ do {
+ ha_spider *next = tmp->next;
+ SPIDER_SHARE *share = tmp->share;
+ spider_free_spider_object_for_share_with_sql_string(&tmp);
+ spider_free_share_resource_only(share);
+ tmp = next;
+ } while (tmp);
+ }
+ if (trx)
+ {
+ trx->thd = NULL;
+ spider_free_trx(trx, TRUE);
+ }
+ if (work_str)
+ {
+ delete [] work_str;
+ }
+ while ((db_sql_tmp = db_sql))
+ {
+ db_sql = db_sql->next;
+ delete db_sql_tmp;
+ }
+ if (zero_bitmap)
+ {
+ my_bitmap_free(zero_bitmap);
+ }
+ DBUG_VOID_RETURN;
+}
+
+int spider_parse_sql::init(
+ THD *thd_arg,
+ char *query_arg,
+ uint query_length,
+ const struct charset_info_st *query_charset,
+ ulonglong query_id
+) {
+ int error_num, roop_count;
+ cs = query_charset;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::init");
+ DBUG_PRINT("info",("spider this=%p", this));
+ thd = thd_arg;
+ query = query_arg;
+ query_len = query_length;
+ parser_state_backup = thd->m_parser_state;
+ flags = SPIDER_PARSE_PARSER_STATE_BACKUPED;
+ thd->m_parser_state = &parser_state;
+ if (parser_state.init(thd, query, query_length))
+ {
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ parser_state.m_digest_psi = NULL;
+ parser_state.m_lip.m_digest = NULL;
+ if (thd->variables.sql_mode & MODE_ORACLE)
+ {
+ DBlex = ORAlex;
+ if (unlikely(!(db_sql = spider_oracle_create_sql())))
+ {
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ } else {
+ DBlex = MYSQLlex;
+ if (unlikely(!(db_sql = spider_mariadb_create_sql())))
+ {
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ }
+ if (unlikely((error_num = db_sql->init(cs))))
+ {
+ goto error;
+ }
+ if (thd->variables.sql_mode & MODE_ANSI_QUOTES)
+ {
+ db_sql->set_quote_char_for_ident(spider_ident_double_quote);
+ } else {
+ db_sql->set_quote_char_for_ident(spider_ident_back_quote);
+ }
+ tmp = db_sql;
+ for (roop_count = 0; roop_count < (int) SPIDER_DBTON_SIZE; ++roop_count)
+ {
+ if (!spider_dbton[roop_count].db_util)
+ {
+ break;
+ }
+ if (spider_dbton[roop_count].db_access_type ==
+ SPIDER_DB_ACCESS_TYPE_NOSQL)
+ {
+ continue;
+ }
+ if (unlikely(!(tmp->next = (spider_db_sql *) spider_dbton[roop_count].
+ create_db_sql())))
+ {
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ tmp = tmp->next;
+ if (unlikely((error_num = tmp->init(cs))))
+ {
+ goto error;
+ }
+ db_sql_by_id[roop_count] = tmp;
+ }
+ table_share.path.str = "";
+ table_share.path.length = 0;
+ table_share.normalized_path.str = "";
+ table_share.normalized_path.length = 0;
+ table_share.partition_info_str = (char *) "";
+ table_share.table_charset = NULL;
+ table_share.fields = 0;
+ table_share.keys = 0;
+ table_share.field = &field;
+ table_share.key_info = NULL;
+ table_share.tmp_table = INTERNAL_TMP_TABLE;
+#ifdef SPIDER_HAS_HASH_VALUE_TYPE
+ hash_value = my_calc_hash(&spider_open_tables, (uchar*) "", 0);
+#endif
+ if (
+ part_info.partitions.push_back(&part_p_elem) ||
+ sub_part_info.partitions.push_back(&sub_part_p_elem) ||
+ sub_part_p_elem.subpartitions.push_back(&sub_part_sub_p_elem)
+ ) {
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ if (unlikely(!(work_str = new spider_string[2])))
+ {
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ for (roop_count = 0; roop_count < 2; ++roop_count)
+ {
+ work_str[roop_count].init_calc_mem(263);
+ work_str[roop_count].set_charset(cs);
+ }
+ zero_bitmap = &table_share.all_set;
+ if (my_bitmap_init(zero_bitmap, NULL, 0, FALSE))
+ {
+ zero_bitmap = NULL;
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ bitmap_set_all(zero_bitmap);
+ DBUG_RETURN(0);
+
+error:
+ if (work_str)
+ {
+ delete [] work_str;
+ work_str = NULL;
+ }
+ while ((tmp = db_sql))
+ {
+ db_sql = db_sql->next;
+ delete tmp;
+ }
+ thd->m_parser_state = parser_state_backup;
+ flags &= ~SPIDER_PARSE_PARSER_STATE_BACKUPED;
+ DBUG_RETURN(error_num);
+}
+
+void spider_parse_sql::reset(
+ char *query_arg,
+ uint query_length,
+ const struct charset_info_st *query_charset,
+ ulonglong query_id
+) {
+ cs = query_charset;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::reset");
+ DBUG_PRINT("info",("spider this=%p", this));
+ query = query_arg;
+ query_len = query_length;
+ parser_state_backup = thd->m_parser_state;
+ flags = SPIDER_PARSE_PARSER_STATE_BACKUPED;
+ thd->m_parser_state = &parser_state;
+ parser_state.reset(query, query_len);
+ parser_state.m_digest_psi = NULL;
+ parser_state.m_lip.m_digest = NULL;
+ table_share.table_charset = NULL;
+ if (thd->variables.sql_mode & MODE_ORACLE)
+ {
+ DBlex = ORAlex;
+ } else {
+ DBlex = MYSQLlex;
+ }
+ db_sql->reset(cs);
+ if (thd->variables.sql_mode & MODE_ANSI_QUOTES)
+ {
+ db_sql->set_quote_char_for_ident(spider_ident_double_quote);
+ } else {
+ db_sql->set_quote_char_for_ident(spider_ident_back_quote);
+ }
+ tmp = db_sql->next;
+ while (tmp)
+ {
+ tmp->reset(cs);
+ tmp = tmp->next;
+ }
+ if (spider)
+ {
+ ha_spider *tmp_spider = spider;
+ do {
+ ha_spider *next = tmp_spider->next;
+ SPIDER_SHARE *share = tmp_spider->share;
+ spider_free_spider_object_for_share_with_sql_string(&tmp_spider);
+ spider_free_share_resource_only(share);
+ tmp_spider = next;
+ } while (tmp_spider);
+ spider = NULL;
+ spider_last = NULL;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void spider_parse_sql::end_parse()
+{
+ DBUG_ENTER("spider_parse_sql::end_parse");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (flags & SPIDER_PARSE_PARSER_STATE_BACKUPED)
+ {
+ spider_db_sql *tmp = db_sql;
+ do {
+ tmp->set_sql_end_pos();
+ } while ((tmp = tmp->next));
+ found_semicolon = parser_state.m_lip.found_semicolon;
+ thd->m_parser_state = parser_state_backup;
+ flags &= ~SPIDER_PARSE_PARSER_STATE_BACKUPED;
+ }
+ DBUG_VOID_RETURN;
+}
+
+const char *spider_parse_sql::get_found_semicolon()
+{
+ DBUG_ENTER("spider_parse_sql::get_found_semicolon");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(found_semicolon);
+}
+
+int spider_parse_sql::get_next(
+ union YYSTYPE *yylval
+) {
+ DBUG_ENTER("spider_parse_sql::get_next");
+ DBUG_PRINT("info",("spider this=%p", this));
+ get_next_val = DBlex(yylval, thd);
+ DBUG_PRINT("info",("spider get_next_val=%d", get_next_val));
+ if (unlikely(get_next_val <= 0))
+ {
+ get_next_val = END_OF_INPUT;
+ }
+ DBUG_RETURN(get_next_val);
+}
+
+void spider_parse_sql::push_syntax_error(
+ const char *near_by
+) {
+ DBUG_ENTER("spider_parse_sql::push_syntax_error");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_PRINT("info",("spider get_next_val=%d", get_next_val));
+ Lex_input_stream *lip= &parser_state.m_lip;
+ if (!near_by && !(near_by = lip->get_tok_start()))
+ {
+ near_by = "";
+ }
+ ErrConvString ecs(near_by, strlen(near_by),
+ thd->variables.character_set_client);
+ my_printf_error(ER_SPIDER_SYNTAX_NUM, ER_SPIDER_SYNTAX_STR, MYF(0),
+ "Spider Rewrite Plugin", ecs.ptr(), lip->yylineno);
+#ifndef DBUG_OFF
+ union YYSTYPE yylval;
+ get_next(&yylval);
+#endif
+ DBUG_VOID_RETURN;
+}
+
+void spider_parse_sql::push_error(
+ int error_num
+) {
+ DBUG_ENTER("spider_parse_sql::push_error");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (thd->is_error())
+ {
+ /* nothing to do */
+ DBUG_VOID_RETURN;
+ }
+ switch (error_num)
+ {
+ case HA_ERR_OUT_OF_MEM:
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ break;
+ case ER_SPIDER_TOO_LONG_NUM:
+ my_printf_error(ER_SPIDER_TOO_LONG_NUM, ER_SPIDER_TOO_LONG_STR, MYF(0),
+ error_str_piece);
+ break;
+ default:
+ my_printf_error(ER_SPIDER_UNKNOWN_NUM, ER_SPIDER_UNKNOWN_STR2, MYF(0),
+ error_num, "Spider Rewrite Plugin");
+ break;
+ }
+ DBUG_VOID_RETURN;
+}
+
+int spider_parse_sql::append_parsed_symbol(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_parsed_symbol");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ do {
+ if ((error_num = tmp->append_parsed_symbol(symbol_tok, yylval_tok)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ } while ((tmp = tmp->next));
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_parsed_symbol_for_data_nodes(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_parsed_symbol_for_data_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ while ((tmp = tmp->next))
+ {
+ if ((error_num = tmp->append_parsed_symbol(symbol_tok, yylval_tok)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_parsed_symbol_for_spider_nodes(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ DBUG_ENTER("spider_parse_sql::append_parsed_symbol_for_spider_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(db_sql->append_parsed_symbol(symbol_tok, yylval_tok));
+}
+
+int spider_parse_sql::append_parsed_symbol_for_spider_nodes_ex(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ DBUG_ENTER("spider_parse_sql::append_parsed_symbol_for_spider_nodes_ex");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(db_sql->append_parsed_symbol_ex(symbol_tok, yylval_tok));
+}
+
+char *spider_parse_sql::get_query_for_spider_node(
+ uint *query_length
+) {
+ DBUG_ENTER("spider_parse_sql::get_query_for_spider_node");
+ DBUG_PRINT("info",("spider this=%p", this));
+ *query_length = db_sql->sql_str[0].length();
+ DBUG_RETURN((char *) db_sql->sql_str[0].c_ptr_safe());
+}
+
+void spider_parse_sql::set_query_id(
+ ulonglong query_id_arg
+) {
+ DBUG_ENTER("spider_parse_sql::set_query_id");
+ DBUG_PRINT("info",("spider this=%p", this));
+ query_id = query_id_arg;
+ DBUG_VOID_RETURN;
+}
+
+ulonglong spider_parse_sql::get_query_id()
+{
+ DBUG_ENTER("spider_parse_sql::get_query_id");
+ DBUG_PRINT("info",("spider this=%p", this));
+ DBUG_RETURN(query_id);
+}
+
+void spider_parse_sql::set_schema_name(
+ LEX_CSTRING &name
+) {
+ DBUG_ENTER("spider_parse_sql::set_schema_name");
+ DBUG_PRINT("info",("spider this=%p", this));
+ schema_name = name;
+ table_share.db = name;
+ DBUG_VOID_RETURN;
+}
+
+void spider_parse_sql::set_table_name(
+ LEX_CSTRING &name
+) {
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::set_table_name");
+ DBUG_PRINT("info",("spider this=%p", this));
+ table_name = name;
+ table_share.table_name = name;
+ tmp = db_sql;
+ do {
+ tmp->append_table_name_space();
+ } while ((tmp = tmp->next));
+ DBUG_VOID_RETURN;
+}
+
+int spider_parse_sql::set_create_or_replace()
+{
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::set_create_or_replace");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ do {
+ if ((error_num = tmp->append_create_or_replace()))
+ {
+ DBUG_RETURN(error_num);
+ }
+ } while ((tmp = tmp->next));
+ flags |= SPIDER_PARSE_CREATE_OR_REPLACE;
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_create_or_replace_table()
+{
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_create_or_replace_table");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (flags & SPIDER_PARSE_CREATE_OR_REPLACE)
+ {
+ tmp = db_sql;
+ while ((tmp = tmp->next))
+ {
+ if ((error_num = tmp->append_create_or_replace_table()))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_if_not_exists()
+{
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_if_not_exists");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ do {
+ if ((error_num = tmp->append_if_not_exists()))
+ {
+ DBUG_RETURN(error_num);
+ }
+ } while ((tmp = tmp->next));
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_table_option_name_for_data_nodes(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_table_option_name_for_data_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ while ((tmp = tmp->next))
+ {
+ if ((error_num = tmp->append_table_option_name(symbol_tok, yylval_tok)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_table_option_name(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_table_option_name");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ do {
+ if ((error_num = tmp->append_table_option_name(symbol_tok, yylval_tok)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ } while ((tmp = tmp->next));
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_table_option_value_for_data_nodes(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_table_option_value_for_data_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ while ((tmp = tmp->next))
+ {
+ if ((error_num = tmp->append_table_option_value(symbol_tok, yylval_tok)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_table_option_value(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+) {
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_table_option_value");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ do {
+ if ((error_num = tmp->append_table_option_value(symbol_tok, yylval_tok)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ } while ((tmp = tmp->next));
+ if (flags & SPIDER_PARSE_CHARSET_NOTICE)
+ {
+ char csname[MY_CS_NAME_SIZE + 1];
+ DBUG_ASSERT(MY_CS_NAME_SIZE >= yylval_tok->lex_str.length);
+ memcpy(csname, yylval_tok->lex_str.str, yylval_tok->lex_str.length);
+ csname[yylval_tok->lex_str.length] = '\0';
+ table_share.table_charset = get_charset_by_csname(
+ csname, MY_CS_PRIMARY, MYF(MY_WME));
+ flags &= ~SPIDER_PARSE_CHARSET_NOTICE;
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_table_option_character_set()
+{
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_table_option_character_set");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ do {
+ if ((error_num = tmp->append_table_option_character_set()))
+ {
+ DBUG_RETURN(error_num);
+ }
+ } while ((tmp = tmp->next));
+ flags |= SPIDER_PARSE_CHARSET_NOTICE;
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_table_option_data_directory_for_data_nodes()
+{
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_table_option_data_directory_for_data_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ while ((tmp = tmp->next))
+ {
+ if ((error_num = tmp->append_table_option_data_directory()))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_table_option_index_directory_for_data_nodes()
+{
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_table_option_index_directory_for_data_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ while ((tmp = tmp->next))
+ {
+ if ((error_num = tmp->append_table_option_index_directory()))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_table_option_with_system_versioning_for_data_nodes()
+{
+ int error_num;
+ spider_db_sql *tmp;
+ DBUG_ENTER("spider_parse_sql::append_table_option_with_system_versioning_for_data_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = db_sql;
+ while ((tmp = tmp->next))
+ {
+ if ((error_num = tmp->append_table_option_with_system_versioning()))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::append_spider_table_for_spider_nodes(
+ SPIDER_RWTBLTBL *rwtbltbl
+) {
+ int error_num;
+ DBUG_ENTER("spider_parse_sql::append_spider_table_for_spider_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if ((error_num = db_sql->append_table_name(&schema_name, &table_name)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ DBUG_RETURN(db_sql->append_spider_table(&table_name, rwtbltbl));
+}
+
+int spider_parse_sql::create_share_from_table(
+ SPIDER_RWTBLTBL *rwtbltbl
+) {
+ int error_num;
+ SPIDER_RWTBLPTT *tp;
+ SPIDER_SHARE *share;
+ DBUG_ENTER("spider_parse_sql::create_share_from_table");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (!trx && !(trx = spider_get_trx(NULL, FALSE, &error_num)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ trx->thd = thd;
+ table_share.comment = rwtbltbl->comment_str;
+ if (!rwtbltbl->partition_method.length)
+ {
+ /* no partition definition */
+ spider_string *str = &work_str[1];
+ str->length(0);
+ if (str->reserve(rwtbltbl->connection_str.length + table_name.length * 2 +
+ SPIDER_SQL_TABLE_LEN + 4))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_TABLE_STR, SPIDER_SQL_TABLE_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(table_name.str, table_name.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ if (rwtbltbl->connection_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
+ str->q_append(rwtbltbl->connection_str.str,
+ rwtbltbl->connection_str.length);
+ }
+ table_share.connect_string.str = str->c_ptr_safe();
+ table_share.connect_string.length = str->length();
+ if (!(share = spider_create_share("", &table_share,
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ NULL,
+#endif
+#ifdef SPIDER_HAS_HASH_VALUE_TYPE
+ hash_value,
+#endif
+ &error_num)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ ha_spider *tmp_spider = NULL;
+ if ((error_num = spider_create_spider_object_for_share_with_sql_string(
+ trx, share, &tmp_spider)))
+ {
+ spider_free_share_resource_only(share);
+ DBUG_RETURN(error_num);
+ }
+ if (spider_last)
+ {
+ spider_last->next = tmp_spider;
+ } else {
+ spider = tmp_spider;
+ }
+ spider_last = tmp_spider;
+ spider_last->next = NULL;
+ DBUG_PRINT("info",("spider tmp_spider->share=%p", tmp_spider->share));
+ DBUG_RETURN(0);
+ }
+ table_share.connect_string = rwtbltbl->connection_str;
+ tp = rwtbltbl->tp;
+ while (tp)
+ {
+ if ((error_num = create_share_from_partition(rwtbltbl, tp)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ tp = tp->next;
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::create_share_from_partition(
+ SPIDER_RWTBLTBL *rwtbltbl,
+ SPIDER_RWTBLPTT *rwtblptt
+) {
+ int error_num;
+ SPIDER_SHARE *share;
+ SPIDER_RWTBLSPTT *ts;
+ DBUG_ENTER("spider_parse_sql::create_share_from_partition");
+ DBUG_PRINT("info",("spider this=%p", this));
+ if (!rwtblptt->ts)
+ {
+ /* no subpartition definition */
+ char tmp_name[FN_REFLEN + 1];
+ part_p_elem.part_comment = rwtblptt->comment_str.str;
+#ifdef SPIDER_PARTITION_HAS_CONNECTION_STRING
+ spider_string *str = &work_str[1];
+ str->length(0);
+ if (str->reserve(rwtblptt->connection_str.length + table_name.length * 2 +
+ SPIDER_SQL_TABLE_LEN + 4))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_TABLE_STR, SPIDER_SQL_TABLE_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(table_name.str, table_name.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ if (rwtblptt->connection_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
+ str->q_append(rwtblptt->connection_str.str,
+ rwtblptt->connection_str.length);
+ }
+ part_p_elem.connect_string.str = str->c_ptr_safe();
+ part_p_elem.connect_string.length = str->length();
+#endif
+ part_p_elem.partition_name = rwtblptt->partition_name.str;
+ if ((error_num = SPIDER_create_partition_name(
+ tmp_name, FN_REFLEN + 1, table_share.path.str,
+ part_p_elem.partition_name, NORMAL_PART_NAME, TRUE)))
+ {
+ if (error_num == HA_WRONG_CREATE_OPTION)
+ {
+ error_num = ER_SPIDER_TOO_LONG_NUM;
+ error_str_piece = "Table name + partition name";
+ }
+ DBUG_RETURN(error_num);
+ }
+ if (!(share = spider_create_share(tmp_name, &table_share,
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ &part_info,
+#endif
+#ifdef SPIDER_HAS_HASH_VALUE_TYPE
+ hash_value,
+#endif
+ &error_num)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ ha_spider *tmp_spider = NULL;
+ if ((error_num = spider_create_spider_object_for_share_with_sql_string(
+ trx, share, &tmp_spider)))
+ {
+ spider_free_share_resource_only(share);
+ DBUG_RETURN(error_num);
+ }
+ if (spider_last)
+ {
+ spider_last->next = tmp_spider;
+ } else {
+ spider = tmp_spider;
+ }
+ spider_last = tmp_spider;
+ spider_last->next = NULL;
+ DBUG_PRINT("info",("spider tmp_spider->share=%p", tmp_spider->share));
+ DBUG_RETURN(0);
+ }
+ sub_part_p_elem.part_comment = rwtblptt->comment_str.str;
+#ifdef SPIDER_PARTITION_HAS_CONNECTION_STRING
+ sub_part_p_elem.connect_string = rwtblptt->connection_str;
+#endif
+ sub_part_p_elem.partition_name = rwtblptt->partition_name.str;
+ ts = rwtblptt->ts;
+ while (ts)
+ {
+ if ((error_num = create_share_from_subpartition(rwtbltbl, ts)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ ts = ts->next;
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::create_share_from_subpartition(
+ SPIDER_RWTBLTBL *rwtbltbl,
+ SPIDER_RWTBLSPTT *rwtblsptt
+) {
+ int error_num;
+ char tmp_name[FN_REFLEN + 1];
+ SPIDER_SHARE *share;
+ DBUG_ENTER("spider_parse_sql::create_share_from_subpartition");
+ DBUG_PRINT("info",("spider this=%p", this));
+ sub_part_sub_p_elem.part_comment = rwtblsptt->comment_str.str;
+#ifdef SPIDER_PARTITION_HAS_CONNECTION_STRING
+ spider_string *str = &work_str[1];
+ str->length(0);
+ if (str->reserve(rwtblsptt->connection_str.length + table_name.length * 2 +
+ SPIDER_SQL_TABLE_LEN + 4))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ str->q_append(SPIDER_SQL_TABLE_STR, SPIDER_SQL_TABLE_LEN);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ str->append_for_single_quote(table_name.str, table_name.length);
+ str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
+ if (rwtblsptt->connection_str.length)
+ {
+ str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
+ str->q_append(rwtblsptt->connection_str.str,
+ rwtblsptt->connection_str.length);
+ }
+ sub_part_sub_p_elem.connect_string.str = str->c_ptr_safe();
+ sub_part_sub_p_elem.connect_string.length = str->length();
+#endif
+ sub_part_sub_p_elem.partition_name = rwtblsptt->subpartition_name.str;
+ if ((error_num = SPIDER_create_subpartition_name(
+ tmp_name, FN_REFLEN + 1, table_share.path.str,
+ sub_part_p_elem.partition_name, sub_part_sub_p_elem.partition_name,
+ NORMAL_PART_NAME)))
+ {
+ if (error_num == HA_WRONG_CREATE_OPTION)
+ {
+ error_num = ER_SPIDER_TOO_LONG_NUM;
+ error_str_piece = "Table name + partition name + subpartition name";
+ }
+ DBUG_RETURN(error_num);
+ }
+ if (!(share = spider_create_share(tmp_name, &table_share,
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ &sub_part_info,
+#endif
+#ifdef SPIDER_HAS_HASH_VALUE_TYPE
+ hash_value,
+#endif
+ &error_num)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ ha_spider *tmp_spider = NULL;
+ if ((error_num = spider_create_spider_object_for_share_with_sql_string(
+ trx, share, &tmp_spider)))
+ {
+ spider_free_share_resource_only(share);
+ DBUG_RETURN(error_num);
+ }
+ if (spider_last)
+ {
+ spider_last->next = tmp_spider;
+ } else {
+ spider = tmp_spider;
+ }
+ spider_last = tmp_spider;
+ spider_last->next = NULL;
+ DBUG_PRINT("info",("spider tmp_spider->share=%p", tmp_spider->share));
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::get_conn()
+{
+ int error_num;
+ ha_spider *tmp;
+ DBUG_ENTER("spider_parse_sql::get_conn");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = spider;
+ do {
+ uint roop_count;
+ SPIDER_SHARE *share = tmp->share;
+ for (roop_count = 0; roop_count < share->all_link_count; ++roop_count)
+ {
+ if (!spider_get_conn(share, roop_count, share->conn_keys[roop_count],
+ trx, tmp, FALSE, FALSE, SPIDER_CONN_KIND_MYSQL, &error_num))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ } while ((tmp = tmp->next));
+ DBUG_RETURN(0);
+}
+
+int spider_parse_sql::send_sql_to_data_nodes()
+{
+ int error_num;
+ ha_spider *tmp;
+ DBUG_ENTER("spider_parse_sql::send_sql_to_data_nodes");
+ DBUG_PRINT("info",("spider this=%p", this));
+ tmp = spider;
+ do {
+ uint roop_count;
+ SPIDER_SHARE *share = tmp->share;
+#ifndef WITHOUT_SPIDER_BG_SEARCH
+ if ((error_num = spider_set_conn_bg_param(tmp)))
+ goto end;
+#endif
+ for (roop_count = 0; roop_count < share->all_link_count; ++roop_count)
+ {
+ SPIDER_CONN *conn = tmp->conns[roop_count];
+ spider_db_handler *dbton_hdl = tmp->dbton_handler[conn->dbton_id];
+ if ((error_num =
+ dbton_hdl->set_sql_for_exec(db_sql_by_id[conn->dbton_id], roop_count)))
+ {
+ goto end;
+ }
+#ifndef WITHOUT_SPIDER_BG_SEARCH
+ if (tmp->result_list.bgs_phase > 0)
+ {
+ if ((error_num = spider_check_and_init_casual_read(thd, tmp,
+ roop_count)))
+ {
+ goto end;
+ }
+ conn = tmp->conns[roop_count];
+ pthread_mutex_lock(&conn->bg_conn_mutex);
+ conn->bg_target = tmp;
+ conn->bg_error_num = &tmp->need_mons[roop_count];
+ conn->bg_sql_type = SPIDER_SQL_TYPE_DDL_SQL;
+ conn->link_idx = roop_count;
+ conn->bg_exec_sql = TRUE;
+ conn->bg_caller_sync_wait = TRUE;
+ pthread_mutex_lock(&conn->bg_conn_sync_mutex);
+ pthread_cond_signal(&conn->bg_conn_cond);
+ pthread_mutex_unlock(&conn->bg_conn_mutex);
+ pthread_cond_wait(&conn->bg_conn_sync_cond, &conn->bg_conn_sync_mutex);
+ pthread_mutex_unlock(&conn->bg_conn_sync_mutex);
+ conn->bg_caller_sync_wait = FALSE;
+ } else {
+#endif
+ pthread_mutex_lock(&conn->mta_conn_mutex);
+ SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
+ conn->need_mon = &tmp->need_mons[roop_count];
+ conn->mta_conn_mutex_lock_already = TRUE;
+ conn->mta_conn_mutex_unlock_later = TRUE;
+ conn->link_idx = roop_count;
+ error_num = spider_db_query_with_set_names(
+ SPIDER_SQL_TYPE_DDL_SQL, tmp, conn, roop_count);
+ conn->mta_conn_mutex_lock_already = FALSE;
+ conn->mta_conn_mutex_unlock_later = FALSE;
+ SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
+ pthread_mutex_unlock(&conn->mta_conn_mutex);
+ if (error_num)
+ {
+ goto end;
+ }
+#ifndef WITHOUT_SPIDER_BG_SEARCH
+ }
+#endif
+ }
+ } while ((tmp = tmp->next));
+
+end:
+#ifndef WITHOUT_SPIDER_BG_SEARCH
+ tmp = spider;
+ do {
+ if (tmp->result_list.bgs_phase > 0)
+ {
+ uint roop_count;
+ SPIDER_SHARE *share = tmp->share;
+ for (roop_count = 0; roop_count < share->all_link_count; ++roop_count)
+ {
+ SPIDER_CONN *conn = tmp->conns[roop_count];
+ if (conn->bg_exec_sql)
+ {
+ /* wait */
+ pthread_mutex_lock(&conn->bg_conn_mutex);
+ pthread_mutex_unlock(&conn->bg_conn_mutex);
+ }
+ if (tmp->need_mons[roop_count])
+ {
+ error_num = tmp->need_mons[roop_count];
+ }
+ }
+ tmp->result_list.bgs_phase = 0;
+ }
+ } while ((tmp = tmp->next));
+#endif
+ DBUG_RETURN(error_num);
+}
+#endif
diff --git a/storage/spider/spd_parse.h b/storage/spider/spd_parse.h
new file mode 100644
index 00000000000..ff57dc5d24f
--- /dev/null
+++ b/storage/spider/spd_parse.h
@@ -0,0 +1,145 @@
+/* Copyright (C) 2018-2019 Kentoku Shiba
+ Copyright (C) 2018-2019 MariaDB corp
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#define SPIDER_PARSE_PARSER_STATE_BACKUPED (1 << 0)
+#define SPIDER_PARSE_CREATE_OR_REPLACE (1 << 1)
+#define SPIDER_PARSE_CHARSET_NOTICE (1 << 2)
+
+class spider_parse_sql
+{
+public:
+ uint flags, query_len;
+ int get_next_val;
+ char *query;
+ const char *found_semicolon;
+ const char *error_str_piece;
+ Parser_state parser_state;
+ Parser_state *parser_state_backup;
+ THD *thd;
+ spider_db_sql *db_sql;
+ spider_db_sql *db_sql_by_id[SPIDER_DBTON_SIZE];
+ ulonglong query_id;
+ LEX_CSTRING schema_name;
+ LEX_CSTRING table_name;
+ const struct charset_info_st *cs;
+ spider_string *work_str;
+ int (*DBlex)(union YYSTYPE *yylval, THD *thd);
+
+ ha_spider *spider, *spider_last;
+ SPIDER_TRX *trx;
+ TABLE_SHARE table_share;
+ Field *field;
+ partition_info part_info, sub_part_info;
+ partition_element part_p_elem, sub_part_p_elem, sub_part_sub_p_elem;
+ MY_BITMAP *zero_bitmap;
+#ifdef SPIDER_HAS_HASH_VALUE_TYPE
+ my_hash_value_type hash_value;
+#endif
+ spider_parse_sql();
+ ~spider_parse_sql();
+ int init(
+ THD *thd_arg,
+ char *query_arg,
+ uint query_length,
+ const struct charset_info_st *query_charset,
+ ulonglong query_id
+ );
+ void reset(
+ char *query_arg,
+ uint query_length,
+ const struct charset_info_st *query_charset,
+ ulonglong query_id
+ );
+ void end_parse();
+ const char *get_found_semicolon();
+ int get_next(
+ union YYSTYPE *yylval
+ );
+ void push_syntax_error(
+ const char *near_by
+ );
+ void push_error(
+ int error_num
+ );
+ int append_parsed_symbol(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_parsed_symbol_for_data_nodes(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_parsed_symbol_for_spider_nodes(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_parsed_symbol_for_spider_nodes_ex(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ char *get_query_for_spider_node(
+ uint *query_length
+ );
+ void set_query_id(
+ ulonglong query_id_arg
+ );
+ ulonglong get_query_id();
+ void set_schema_name(
+ LEX_CSTRING &name
+ );
+ void set_table_name(
+ LEX_CSTRING &name
+ );
+ int set_create_or_replace();
+ int append_create_or_replace_table();
+ int append_if_not_exists();
+ int append_table_option_name_for_data_nodes(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_table_option_name(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_table_option_value_for_data_nodes(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_table_option_value(
+ int symbol_tok,
+ union YYSTYPE *yylval_tok
+ );
+ int append_table_option_character_set();
+ int append_table_option_data_directory_for_data_nodes();
+ int append_table_option_index_directory_for_data_nodes();
+ int append_table_option_with_system_versioning_for_data_nodes();
+ int append_spider_table_for_spider_nodes(
+ SPIDER_RWTBLTBL *rwtbltbl
+ );
+ int create_share_from_table(
+ SPIDER_RWTBLTBL *rwtbltbl
+ );
+ int create_share_from_partition(
+ SPIDER_RWTBLTBL *rwtbltbl,
+ SPIDER_RWTBLPTT *rwtblptt
+ );
+ int create_share_from_subpartition(
+ SPIDER_RWTBLTBL *rwtbltbl,
+ SPIDER_RWTBLSPTT *rwtblsptt
+ );
+ int get_conn();
+ int send_sql_to_data_nodes();
+};
diff --git a/storage/spider/spd_rewrite.cc b/storage/spider/spd_rewrite.cc
new file mode 100644
index 00000000000..8d175d9d6f6
--- /dev/null
+++ b/storage/spider/spd_rewrite.cc
@@ -0,0 +1,2074 @@
+/* Copyright (C) 2018-2019 Kentoku Shiba
+ Copyright (C) 2018-2019 MariaDB corp
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#define MYSQL_SERVER 1
+#define MYSQL_LEX 1
+#include <my_global.h>
+#include "mysql_version.h"
+#include "spd_environ.h"
+#include "sql_priv.h"
+#include "probes_mysql.h"
+#include "sql_class.h"
+#include "sql_partition.h"
+#include "sql_acl.h"
+#include "spd_err.h"
+#ifdef SPIDER_REWRITE_AVAILABLE
+#include "spd_db_include.h"
+#include "spd_include.h"
+#include "spd_sys_table.h"
+#include "spd_table.h"
+#include "spd_malloc.h"
+#include "spd_parse.h"
+#include "spd_rewrite.h"
+
+extern handlerton *spider_hton_ptr;
+
+static pthread_key(spider_parse_sql *, SPIDER_PARSE_SQL);
+static bool audit_rewrite_initialized = FALSE, rw_table_mem_root = TRUE,
+ rewrite_cache_initialized = FALSE;
+static MEM_ROOT rw_table_mem_root1, rw_table_mem_root2;
+
+static DYNAMIC_ARRAY spider_rw_table_cache1;
+static uint spider_rw_table_cache1_id;
+static const char *spider_rw_table_cache1_func_name;
+static const char *spider_rw_table_cache1_file_name;
+static ulong spider_rw_table_cache1_line_no;
+static DYNAMIC_ARRAY spider_rw_table_cache2;
+static uint spider_rw_table_cache2_id;
+static const char *spider_rw_table_cache2_func_name;
+static const char *spider_rw_table_cache2_file_name;
+static ulong spider_rw_table_cache2_line_no;
+static DYNAMIC_ARRAY *spider_rw_table_cache;
+static DYNAMIC_ARRAY *spider_rw_table_cache_tmp;
+
+void spider_free_rewrite_table_subpartitions(
+ SPIDER_RWTBLSPTT *info
+) {
+ DBUG_ENTER("spider_free_rewrite_table_subpartitions");
+ while (info)
+ {
+ if (info->subpartition_name.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->subpartition_name.str, MYF(0));
+ }
+ if (info->subpartition_description.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->subpartition_description.str, MYF(0));
+ }
+ if (info->connection_str.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->connection_str.str, MYF(0));
+ }
+ if (info->comment_str.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->comment_str.str, MYF(0));
+ }
+ info = info->next;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void spider_free_rewrite_table_partitions(
+ SPIDER_RWTBLPTT *info
+) {
+ DBUG_ENTER("spider_free_rewrite_table_partitions");
+ while (info)
+ {
+ if (info->partition_name.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->partition_name.str, MYF(0));
+ }
+ if (info->partition_description.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->partition_description.str, MYF(0));
+ }
+ if (info->connection_str.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->connection_str.str, MYF(0));
+ }
+ if (info->comment_str.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->comment_str.str, MYF(0));
+ }
+ spider_free_rewrite_table_subpartitions(info->ts);
+ info = info->next;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void spider_free_rewrite_table_tables(
+ SPIDER_RWTBLTBL *info
+) {
+ DBUG_ENTER("spider_free_rewrite_table_tables");
+ while (info)
+ {
+ if (info->partition_method.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->partition_method.str, MYF(0));
+ }
+ if (info->partition_expression.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->partition_expression.str, MYF(0));
+ }
+ if (info->subpartition_method.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->subpartition_method.str, MYF(0));
+ }
+ if (info->subpartition_expression.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->subpartition_expression.str, MYF(0));
+ }
+ if (info->connection_str.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->connection_str.str, MYF(0));
+ }
+ if (info->comment_str.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->comment_str.str, MYF(0));
+ }
+ spider_free_rewrite_table_partitions(info->tp);
+ info = info->next;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void spider_free_rewrite_tables(
+ SPIDER_RWTBL *info
+) {
+ DBUG_ENTER("spider_free_rewrite_tables");
+ if (!info)
+ {
+ DBUG_VOID_RETURN;
+ }
+ if (info->db_name.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->db_name.str, MYF(0));
+ }
+ if (info->table_name.str != NullS)
+ {
+ spider_free(spider_current_trx,
+ (void *) info->table_name.str, MYF(0));
+ }
+ spider_free_rewrite_table_tables(info->tt);
+ DBUG_VOID_RETURN;
+}
+
+void spider_free_rewrite_cache(
+ DYNAMIC_ARRAY *rw_table_cache
+) {
+ uint roop_count;
+ SPIDER_RWTBL *info;
+ DBUG_ENTER("spider_free_rewrite_cache");
+ for (roop_count = 0; roop_count < rw_table_cache->elements;
+ ++roop_count)
+ {
+ info = dynamic_element(rw_table_cache, roop_count,
+ SPIDER_RWTBL *);
+ spider_free_rewrite_tables(info);
+ }
+ rw_table_cache->elements = 0;
+ DBUG_VOID_RETURN;
+}
+
+bool spider_load_rewrite_table_subpartitions(
+ THD *thd,
+ MEM_ROOT *mem_root,
+ TABLE_LIST *tables,
+ SPIDER_RWTBLPTT *rwtblptt
+) {
+ int error_num;
+ TABLE *table;
+ char table_key[MAX_KEY_LENGTH];
+ SPIDER_RWTBLSPTT *current = NULL;
+ DBUG_ENTER("spider_load_rewrite_table_subpartitions");
+ DBUG_PRINT("info",("spider table_name=%s",
+ SPIDER_TABLE_LIST_table_name_str(tables)));
+ table = tables->table;
+ if ((error_num = spider_get_sys_table_by_idx(table, table_key,
+ table->s->primary_key, 3)))
+ {
+ if (error_num != HA_ERR_KEY_NOT_FOUND && error_num != HA_ERR_END_OF_FILE)
+ {
+ table->file->print_error(error_num, MYF(0));
+ goto error_get_sys_table_by_idx;
+ }
+ rwtblptt->ts = NULL;
+ DBUG_RETURN(FALSE);
+ }
+ while (!error_num)
+ {
+ SPIDER_RWTBLSPTT *info;
+ if (!(info = (SPIDER_RWTBLSPTT *) alloc_root(mem_root, sizeof(SPIDER_RWTBLSPTT))))
+ {
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ goto error_alloc_info;
+ }
+ if (!current)
+ {
+ rwtblptt->ts = info;
+ } else {
+ current->next = info;
+ }
+ current = info;
+ if (spider_get_sys_rewrite_table_subpartitions(table, info, mem_root))
+ {
+ goto error_get_sys_rewrite_table_subpartitions;
+ }
+
+ if ((error_num = spider_sys_index_next_same(table, table_key)))
+ {
+ if (
+ error_num != HA_ERR_KEY_NOT_FOUND &&
+ error_num != HA_ERR_END_OF_FILE
+ ) {
+ table->file->print_error(error_num, MYF(0));
+ goto error_sys_index_next_same;
+ }
+ }
+ }
+ spider_sys_index_end(table);
+ if (current)
+ {
+ current->next = NULL;
+ }
+ DBUG_RETURN(FALSE);
+
+error_sys_index_next_same:
+error_get_sys_rewrite_table_subpartitions:
+error_alloc_info:
+ spider_sys_index_end(table);
+error_get_sys_table_by_idx:
+ DBUG_RETURN(TRUE);
+}
+
+bool spider_load_rewrite_table_partitions(
+ THD *thd,
+ MEM_ROOT *mem_root,
+ TABLE_LIST *tables,
+ SPIDER_RWTBLTBL *rwtbltbl
+) {
+ int error_num;
+ TABLE *table;
+ TABLE_LIST *tables_next = tables->next_global;
+ char table_key[MAX_KEY_LENGTH];
+ SPIDER_RWTBLPTT *current = NULL;
+ DBUG_ENTER("spider_load_rewrite_table_partitions");
+ DBUG_PRINT("info",("spider table_name=%s",
+ SPIDER_TABLE_LIST_table_name_str(tables)));
+ table = tables->table;
+ if ((error_num = spider_get_sys_table_by_idx(table, table_key,
+ table->s->primary_key, 2)))
+ {
+ if (error_num != HA_ERR_KEY_NOT_FOUND && error_num != HA_ERR_END_OF_FILE)
+ {
+ table->file->print_error(error_num, MYF(0));
+ goto error_get_sys_table_by_idx;
+ }
+ rwtbltbl->tp = NULL;
+ DBUG_RETURN(FALSE);
+ }
+ while (!error_num)
+ {
+ SPIDER_RWTBLPTT *info;
+ if (!(info = (SPIDER_RWTBLPTT *) alloc_root(mem_root, sizeof(SPIDER_RWTBLPTT))))
+ {
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ goto error_alloc_info;
+ }
+ if (!current)
+ {
+ rwtbltbl->tp = info;
+ } else {
+ current->next = info;
+ }
+ current = info;
+ if (spider_get_sys_rewrite_table_partitions(table, info, mem_root))
+ {
+ goto error_get_sys_rewrite_table_partitions;
+ }
+ if (
+ spider_copy_sys_rewrite_columns(table, tables_next->table, 3) ||
+ spider_load_rewrite_table_subpartitions(thd, mem_root, tables_next, info)
+ ) {
+ goto error_load_rewrite_table_subpartitions;
+ }
+
+ if ((error_num = spider_sys_index_next_same(table, table_key)))
+ {
+ if (
+ error_num != HA_ERR_KEY_NOT_FOUND &&
+ error_num != HA_ERR_END_OF_FILE
+ ) {
+ table->file->print_error(error_num, MYF(0));
+ goto error_sys_index_next_same;
+ }
+ }
+ }
+ spider_sys_index_end(table);
+ if (current)
+ {
+ current->next = NULL;
+ }
+ DBUG_RETURN(FALSE);
+
+error_sys_index_next_same:
+error_load_rewrite_table_subpartitions:
+error_get_sys_rewrite_table_partitions:
+error_alloc_info:
+ spider_sys_index_end(table);
+error_get_sys_table_by_idx:
+ DBUG_RETURN(TRUE);
+}
+
+bool spider_load_rewrite_table_tables(
+ THD *thd,
+ MEM_ROOT *mem_root,
+ TABLE_LIST *tables,
+ SPIDER_RWTBL *rwtbl
+) {
+ int error_num;
+ TABLE *table;
+ TABLE_LIST *tables_next = tables->next_global;
+ char table_key[MAX_KEY_LENGTH];
+ SPIDER_RWTBLTBL *current = NULL;
+ DBUG_ENTER("spider_load_rewrite_table_tables");
+ DBUG_PRINT("info",("spider table_name=%s",
+ SPIDER_TABLE_LIST_table_name_str(tables)));
+ table = tables->table;
+ if ((error_num = spider_get_sys_table_by_idx(table, table_key,
+ table->s->primary_key, 1)))
+ {
+ if (error_num != HA_ERR_KEY_NOT_FOUND && error_num != HA_ERR_END_OF_FILE)
+ {
+ table->file->print_error(error_num, MYF(0));
+ goto error_get_sys_table_by_idx;
+ }
+ rwtbl->tt = NULL;
+ DBUG_RETURN(FALSE);
+ }
+ while (!error_num)
+ {
+ SPIDER_RWTBLTBL *info;
+ if (!(info = (SPIDER_RWTBLTBL *) alloc_root(mem_root, sizeof(SPIDER_RWTBLTBL))))
+ {
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ goto error_alloc_info;
+ }
+ if (!current)
+ {
+ rwtbl->tt = info;
+ } else {
+ current->next = info;
+ }
+ current = info;
+ if (spider_get_sys_rewrite_table_tables(table, info, mem_root))
+ {
+ goto error_get_sys_rewrite_table_tables;
+ }
+ if (
+ spider_copy_sys_rewrite_columns(table, tables_next->table, 2) ||
+ spider_load_rewrite_table_partitions(thd, mem_root, tables_next, info)
+ ) {
+ goto error_load_rewrite_table_partitions;
+ }
+
+ if ((error_num = spider_sys_index_next_same(table, table_key)))
+ {
+ if (
+ error_num != HA_ERR_KEY_NOT_FOUND &&
+ error_num != HA_ERR_END_OF_FILE
+ ) {
+ table->file->print_error(error_num, MYF(0));
+ goto error_sys_index_next_same;
+ }
+ }
+ }
+ spider_sys_index_end(table);
+ if (current)
+ {
+ current->next = NULL;
+ }
+ DBUG_RETURN(FALSE);
+
+error_sys_index_next_same:
+error_load_rewrite_table_partitions:
+error_get_sys_rewrite_table_tables:
+error_alloc_info:
+ spider_sys_index_end(table);
+error_get_sys_table_by_idx:
+ DBUG_RETURN(TRUE);
+}
+
+bool spider_init_rewrite_cache(
+ THD *thd
+) {
+ int error_num;
+ TABLE_LIST rw_tbls, rw_tbl_tbls, rw_tbl_ptts, rw_tbl_sptts, *tables;
+ TABLE *table;
+ MEM_ROOT *mem_root;
+ MDL_request mdl_request, mdl_request_cache;
+ uint counter, roop_count;
+ MYSQL_LOCK *lock;
+ TABLE *tbl[4];
+ Open_tables_backup open_tables_backup;
+ bool no_record = FALSE;
+ DBUG_ENTER("spider_init_rewrite_cache");
+ mdl_request.init(MDL_key::USER_LOCK, "spider", "rw_table_mem_root",
+ MDL_EXCLUSIVE, MDL_EXPLICIT);
+ while (TRUE)
+ {
+ if (thd->mdl_context.acquire_lock(&mdl_request, 10))
+ {
+ if (spider_stmt_da_sql_errno(thd) == ER_LOCK_WAIT_TIMEOUT)
+ {
+ thd->clear_error();
+ continue;
+ } else {
+ DBUG_RETURN(TRUE);
+ }
+ }
+ break;
+ }
+ if (rw_table_mem_root)
+ {
+ mem_root = &rw_table_mem_root1;
+ spider_rw_table_cache_tmp = &spider_rw_table_cache1;
+ } else {
+ mem_root = &rw_table_mem_root2;
+ spider_rw_table_cache_tmp = &spider_rw_table_cache2;
+ }
+ /* reset */
+ spider_free_rewrite_cache(spider_rw_table_cache_tmp);
+ free_root(mem_root, MYF(MY_MARK_BLOCKS_FREE));
+ tables = &rw_tbls;
+ spider_sys_init_one_table(
+ &rw_tbls,
+ SPIDER_SYS_DB_NAME_STR, SPIDER_SYS_DB_NAME_LEN,
+ SPIDER_SYS_RW_TBLS_TABLE_NAME_STR,
+ SPIDER_SYS_RW_TBLS_TABLE_NAME_LEN,
+ TL_READ
+ );
+ rw_tbls.next_global = &rw_tbl_tbls;
+ spider_sys_init_one_table(
+ &rw_tbl_tbls,
+ SPIDER_SYS_DB_NAME_STR, SPIDER_SYS_DB_NAME_LEN,
+ SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR,
+ SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_LEN,
+ TL_READ
+ );
+ rw_tbl_tbls.next_global = &rw_tbl_ptts;
+ spider_sys_init_one_table(
+ &rw_tbl_ptts,
+ SPIDER_SYS_DB_NAME_STR, SPIDER_SYS_DB_NAME_LEN,
+ SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR,
+ SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_LEN,
+ TL_READ
+ );
+ rw_tbl_ptts.next_global = &rw_tbl_sptts;
+ spider_sys_init_one_table(
+ &rw_tbl_sptts,
+ SPIDER_SYS_DB_NAME_STR, SPIDER_SYS_DB_NAME_LEN,
+ SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR,
+ SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_LEN,
+ TL_READ
+ );
+ if (spider_sys_open_tables(thd, &tables, &counter, &open_tables_backup))
+ {
+ goto error_open_tables;
+ }
+ DBUG_PRINT("info",("spider table_name_list_start"));
+ roop_count = 0;
+ while (tables)
+ {
+ DBUG_PRINT("info",("spider table_name=%s",
+ SPIDER_TABLE_LIST_table_name_str(tables)));
+ tbl[roop_count] = tables->table;
+ DBUG_ASSERT(tables->table->reginfo.lock_type == TL_READ);
+ tables = tables->next_global;
+ ++roop_count;
+ }
+ DBUG_PRINT("info",("spider table_name_list_end"));
+ DBUG_ASSERT(counter == roop_count);
+ if (!(lock = spider_sys_lock_tables(thd, tbl, counter)))
+ {
+ goto error_lock_tables;
+ }
+ rw_tbls.table->use_all_columns();
+ rw_tbl_tbls.table->use_all_columns();
+ rw_tbl_ptts.table->use_all_columns();
+ rw_tbl_sptts.table->use_all_columns();
+ DBUG_PRINT("info",("spider table_name=%s",
+ SPIDER_TABLE_LIST_table_name_str(&rw_tbls)));
+ table = rw_tbls.table;
+ if ((error_num = spider_sys_index_first(table, table->s->primary_key)))
+ {
+ if (error_num != HA_ERR_KEY_NOT_FOUND && error_num != HA_ERR_END_OF_FILE)
+ {
+ table->file->print_error(error_num, MYF(0));
+ goto error_sys_index_first;
+ }
+ no_record = TRUE;
+ }
+ while (!error_num)
+ {
+ SPIDER_RWTBL *info;
+ if (!(info = (SPIDER_RWTBL *) alloc_root(mem_root, sizeof(SPIDER_RWTBL))))
+ {
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ goto error_alloc_info;
+ }
+ if (spider_get_sys_rewrite_tables(table, info, mem_root))
+ {
+ goto error_get_sys_rewrite_tables;
+ }
+ if (
+ spider_copy_sys_rewrite_columns(table, rw_tbl_tbls.table, 1) ||
+ spider_load_rewrite_table_tables(thd, mem_root, &rw_tbl_tbls, info)
+ ) {
+ goto error_load_rewrite_table_tables;
+ }
+ info->sort = spider_calc_for_sort(2, info->db_name.str,
+ info->table_name.str);
+ if (push_dynamic(spider_rw_table_cache_tmp, (uchar *) info))
+ {
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ goto error_push_dynamic;
+ }
+
+ if ((error_num = spider_sys_index_next(table)))
+ {
+ if (
+ error_num != HA_ERR_KEY_NOT_FOUND &&
+ error_num != HA_ERR_END_OF_FILE
+ ) {
+ table->file->print_error(error_num, MYF(0));
+ goto error_sys_index_next;
+ }
+ }
+ }
+ if (!no_record)
+ {
+ spider_sys_index_end(table);
+ my_qsort(
+ (uchar *) dynamic_element(spider_rw_table_cache_tmp, 0, SPIDER_RWTBL *),
+ spider_rw_table_cache_tmp->elements, sizeof(SPIDER_RWTBL),
+ (qsort_cmp) spider_compare_for_sort);
+ {
+ uint old_elements = spider_rw_table_cache_tmp->max_element;
+ freeze_size(spider_rw_table_cache_tmp);
+ if (spider_rw_table_cache_tmp->max_element != old_elements)
+ {
+ if (rw_table_mem_root)
+ {
+ spider_free_mem_calc(spider_current_trx,
+ spider_rw_table_cache1_id,
+ old_elements *
+ spider_rw_table_cache_tmp->size_of_element);
+ spider_alloc_calc_mem(spider_current_trx,
+ spider_rw_table_cache1,
+ spider_rw_table_cache_tmp->max_element *
+ spider_rw_table_cache_tmp->size_of_element);
+ } else {
+ spider_free_mem_calc(spider_current_trx,
+ spider_rw_table_cache2_id,
+ old_elements *
+ spider_rw_table_cache_tmp->size_of_element);
+ spider_alloc_calc_mem(spider_current_trx,
+ spider_rw_table_cache2,
+ spider_rw_table_cache_tmp->max_element *
+ spider_rw_table_cache_tmp->size_of_element);
+ }
+ }
+ }
+ }
+
+ spider_sys_unlock_tables(thd, lock);
+ if ((error_num = ha_commit_trans(thd, FALSE)))
+ {
+ my_error(error_num, MYF(0));
+ goto error_commit;
+ }
+ spider_sys_close_table(thd, &open_tables_backup);
+ mdl_request_cache.init(MDL_key::USER_LOCK, "spider", "rw_table_cache",
+ MDL_EXCLUSIVE, MDL_EXPLICIT);
+ while (TRUE)
+ {
+ if (thd->mdl_context.acquire_lock(&mdl_request_cache, 10))
+ {
+ if (spider_stmt_da_sql_errno(thd) == ER_LOCK_WAIT_TIMEOUT)
+ {
+ thd->clear_error();
+ continue;
+ } else {
+ thd->mdl_context.release_lock(mdl_request.ticket);
+ DBUG_RETURN(TRUE);
+ }
+ }
+ break;
+ }
+ spider_rw_table_cache = spider_rw_table_cache_tmp;
+ thd->mdl_context.release_lock(mdl_request_cache.ticket);
+ if (rw_table_mem_root)
+ {
+ rw_table_mem_root = FALSE;
+ } else {
+ rw_table_mem_root = TRUE;
+ }
+ rewrite_cache_initialized = TRUE;
+ thd->mdl_context.release_lock(mdl_request.ticket);
+ DBUG_RETURN(FALSE);
+
+error_push_dynamic:
+error_load_rewrite_table_tables:
+error_get_sys_rewrite_tables:
+error_sys_index_next:
+error_alloc_info:
+ spider_sys_index_end(table);
+error_sys_index_first:
+ spider_sys_unlock_tables(thd, lock);
+error_commit:
+error_lock_tables:
+ (void) ha_rollback_trans(thd, FALSE);
+ spider_sys_close_table(thd, &open_tables_backup);
+error_open_tables:
+ thd->mdl_context.release_lock(mdl_request.ticket);
+ DBUG_RETURN(TRUE);
+}
+
+long long spider_flush_rewrite_cache_body(
+ char *error
+) {
+ DBUG_ENTER("spider_flush_rewrite_cache_body");
+ if (!audit_rewrite_initialized)
+ {
+ /* nothing to do */
+ DBUG_RETURN(0);
+ }
+ if (spider_init_rewrite_cache(current_thd))
+ {
+ *error = 1;
+ DBUG_RETURN(0);
+ }
+ DBUG_RETURN(1);
+}
+
+SPIDER_RWTBL *spider_rewrite_table_cache_compare(
+ const LEX_CSTRING *db_name,
+ const LEX_CSTRING *table_name,
+ const struct charset_info_st *cs
+) {
+ uint32 roop_count;
+ SPIDER_RWTBL *info;
+ char db_buf[MAX_FIELD_WIDTH];
+ char table_buf[MAX_FIELD_WIDTH];
+ const char *db, *table;
+ DBUG_ENTER("spider_rewrite_table_cache_compare");
+ spider_string db_str(db_buf, MAX_FIELD_WIDTH, system_charset_info);
+ spider_string table_str(table_buf, MAX_FIELD_WIDTH, system_charset_info);
+ db_str.init_calc_mem(260);
+ table_str.init_calc_mem(261);
+ db_str.length(0);
+ table_str.length(0);
+ if (
+ db_str.append(db_name->str, db_name->length, cs) ||
+ table_str.append(table_name->str, table_name->length, cs)
+ ) {
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ DBUG_RETURN(NULL);
+ }
+
+ db = db_str.c_ptr_safe();
+ table = table_str.c_ptr_safe();
+ DBUG_PRINT("info", ("spider db_name=%s", db));
+ DBUG_PRINT("info", ("spider table_name=%s", table));
+
+ for (roop_count = 0; roop_count < spider_rw_table_cache->elements;
+ ++roop_count)
+ {
+ info = dynamic_element(spider_rw_table_cache, roop_count,
+ SPIDER_RWTBL *);
+ DBUG_PRINT("info", ("spider roop_count=%d", roop_count));
+ DBUG_PRINT("info", ("spider info.db_name=%s", info->db_name.str));
+ DBUG_PRINT("info", ("spider info.table_name=%s", info->table_name.str));
+ if (
+ !wild_case_compare(system_charset_info, db, info->db_name.str) &&
+ !wild_case_compare(system_charset_info, table, info->table_name.str)
+ ) {
+ DBUG_PRINT("info", ("spider found"));
+ DBUG_RETURN(info);
+ }
+ }
+ DBUG_PRINT("info", ("spider not found"));
+ DBUG_RETURN(NULL);
+}
+
+int spider_rewrite_insert_rewritten_tables(
+ THD *thd,
+ LEX_CSTRING *schema_name,
+ LEX_CSTRING *table_name,
+ const struct charset_info_st *cs,
+ SPIDER_RWTBL *rwtbl
+) {
+ int error_num;
+ Open_tables_backup open_tables_backup;
+ TABLE *table;
+ SPIDER_RWTBLTBL *info = rwtbl->tt;
+ DBUG_ENTER("spider_rewrite_insert_rewritten_tables");
+ if (
+ !(table = spider_open_sys_table(
+ thd, SPIDER_SYS_RWN_TBLS_TABLE_NAME_STR, SPIDER_SYS_RWN_TBLS_TABLE_NAME_LEN,
+ TRUE, &open_tables_backup, TRUE, &error_num))
+ ) {
+ DBUG_RETURN(error_num);
+ }
+ table->use_all_columns();
+ empty_record(table);
+ spider_store_rewritten_table_name(table, schema_name, table_name, cs);
+ spider_store_rewritten_table_id(table, rwtbl);
+ do {
+ if ((error_num = spider_insert_rewritten_table(table, info)))
+ {
+ break;
+ }
+ } while ((info = info->next));
+ spider_close_sys_table(thd, table, &open_tables_backup, TRUE);
+ DBUG_RETURN(error_num);
+}
+
+int spider_rewrite_parse(
+ THD *thd,
+ mysql_event_query_rewrite *ev,
+ spider_parse_sql **parse_sql_p
+) {
+ int error_num;
+ spider_parse_sql *parse_sql;
+ DBUG_ENTER("spider_rewrite_parse");
+ if (ev->query_length > 0)
+ {
+ switch (ev->query[0])
+ {
+ case 'c':
+ case 'C':
+ if (spider_rw_table_cache->elements)
+ {
+ break;
+ }
+ default:
+ *parse_sql_p = NULL;
+ DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM);
+ }
+ parse_sql = *parse_sql_p;
+ if (!parse_sql)
+ {
+ if (!(parse_sql = new spider_parse_sql()))
+ {
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ if ((error_num = parse_sql->init(
+ thd, ev->query, ev->query_length, ev->query_charset, ev->query_id)))
+ {
+ parse_sql->push_error(error_num);
+ delete parse_sql;
+ DBUG_RETURN(error_num);
+ }
+ my_pthread_setspecific_ptr(SPIDER_PARSE_SQL, parse_sql);
+ *parse_sql_p = parse_sql;
+ } else {
+ parse_sql->reset(
+ ev->query, ev->query_length, ev->query_charset, ev->query_id);
+ }
+ int retval;
+ union YYSTYPE yylval;
+ retval = parse_sql->get_next(&yylval);
+ switch (retval)
+ {
+ case CREATE:
+ if (
+ (error_num = parse_sql->append_parsed_symbol(retval, &yylval))
+ ) {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ if (
+ (error_num = spider_rewrite_parse_create(parse_sql))
+ ) {
+ DBUG_RETURN(error_num);
+ }
+ break;
+ default:
+ DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM);
+ }
+ DBUG_RETURN(0);
+ }
+ DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM);
+}
+
+int spider_rewrite_parse_create(
+ spider_parse_sql *parse_sql
+) {
+ int retval, error_num;
+ YYSTYPE yylval;
+ DBUG_ENTER("spider_rewrite_parse_create");
+ retval = parse_sql->get_next(&yylval);
+ /* checking "or replace" */
+ switch (retval)
+ {
+ case OR_SYM:
+ retval = parse_sql->get_next(&yylval);
+ if (retval != REPLACE)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if (unlikely((error_num = parse_sql->set_create_or_replace())))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ default:
+ break;
+ }
+ /* checking "temporary" */
+ switch (retval)
+ {
+ case TEMPORARY:
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ default:
+ break;
+ }
+ switch (retval)
+ {
+ case TABLE_SYM:
+ if (
+ (error_num = parse_sql->append_create_or_replace_table()) ||
+ (error_num = parse_sql->append_parsed_symbol(retval, &yylval))
+ ) {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ if (
+ (error_num = spider_rewrite_parse_create_table(parse_sql))
+ ) {
+ DBUG_RETURN(error_num);
+ }
+ break;
+ default:
+ DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_create_table(
+ spider_parse_sql *parse_sql
+) {
+ int retval, retval2, error_num;
+ YYSTYPE yylval, yylval2;
+ DBUG_ENTER("spider_rewrite_parse_create_table");
+ retval = parse_sql->get_next(&yylval);
+ /* checking "if not exists" */
+ switch (retval)
+ {
+ case IF_SYM:
+ retval = parse_sql->get_next(&yylval);
+ if (retval != NOT_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != EXISTS)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num = parse_sql->append_if_not_exists()))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ default:
+ break;
+ }
+ if (retval != IDENT_QUOTED && retval != IDENT && retval != ID_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ retval2 = parse_sql->get_next(&yylval2);
+ if (retval2 == (int) '.')
+ {
+ /* yylval is a database name */
+ retval2 = parse_sql->get_next(&yylval2);
+ if (retval2 != IDENT_QUOTED && retval2 != IDENT && retval2 != ID_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ parse_sql->set_schema_name(yylval.lex_str);
+ parse_sql->set_table_name(yylval2.lex_str);
+ retval2 = parse_sql->get_next(&yylval2);
+ } else {
+ /* yylval is a table name */
+ parse_sql->set_schema_name(parse_sql->thd->db);
+ parse_sql->set_table_name(yylval.lex_str);
+ }
+ switch (retval2)
+ {
+ case '(':
+ if ((error_num = parse_sql->append_parsed_symbol(retval2, &yylval2)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case IGNORE_SYM:
+ case REPLACE:
+ case AS:
+ case SELECT_SYM:
+ case LIKE:
+ default:
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "This SQL", "Spider Rewrite Plugin");
+ DBUG_RETURN(ER_SPIDER_NOT_SUPPORTED_NUM);
+ }
+ retval = parse_sql->get_next(&yylval);
+ switch (retval)
+ {
+ case IDENT:
+ case IDENT_QUOTED:
+ case ID_SYM:
+ case PERIOD_SYM:
+ case CHECK_SYM:
+ case INDEX_SYM:
+ case KEY_SYM:
+ case FULLTEXT_SYM:
+ case SPATIAL_SYM:
+ case CONSTRAINT:
+ case PRIMARY_SYM:
+ case UNIQUE_SYM:
+ break;
+ case FOREIGN:
+ case LIKE:
+ case ')':
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "This SQL", "Spider Rewrite Plugin");
+ DBUG_RETURN(ER_SPIDER_NOT_SUPPORTED_NUM);
+ default:
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ /* column definition */
+ do {
+ switch (retval)
+ {
+ case IDENT:
+ case IDENT_QUOTED:
+ case ID_SYM:
+ if ((error_num = spider_rewrite_parse_column_definition(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case PERIOD_SYM:
+ if ((error_num = spider_rewrite_parse_period_definition(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case CHECK_SYM:
+ if ((error_num = spider_rewrite_parse_check_definition(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case INDEX_SYM:
+ case KEY_SYM:
+ case FULLTEXT_SYM:
+ case SPATIAL_SYM:
+ case CONSTRAINT:
+ case PRIMARY_SYM:
+ case UNIQUE_SYM:
+ if ((error_num = spider_rewrite_parse_index_definition(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case FOREIGN:
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "This SQL", "Spider Rewrite Plugin");
+ DBUG_RETURN(ER_SPIDER_NOT_SUPPORTED_NUM);
+ default:
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if (retval == ')')
+ {
+ break;
+ }
+ if (retval != ',')
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ retval = parse_sql->get_next(&yylval);
+ } while (TRUE);
+ retval = parse_sql->get_next(&yylval);
+ do {
+ switch (retval)
+ {
+ case IGNORE_SYM:
+ case REPLACE:
+ case AS:
+ case SELECT_SYM:
+ /* select statement */
+ DBUG_RETURN(spider_rewrite_parse_create_table_select_statement(
+ parse_sql, retval, yylval));
+ case ';':
+ case END_OF_INPUT:
+ /* end of ddl */
+ DBUG_RETURN(0);
+ case PARTITION_SYM:
+ if ((error_num = spider_rewrite_parse_create_table_partition(
+ parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ /* this function returns after get_next */
+ break;
+ default:
+ if ((error_num = spider_rewrite_parse_create_table_table_option(
+ parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ }
+ } while (TRUE);
+}
+
+int spider_rewrite_parse_nest_of_paren(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_nest_of_paren");
+ do {
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval == '(')
+ {
+ if ((error_num = spider_rewrite_parse_nest_of_paren(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ } while (retval != ')');
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_nest_of_paren_for_data_nodes(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_nest_of_paren_for_data_nodes");
+ do {
+ if ((error_num = parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval == '(')
+ {
+ if ((error_num = spider_rewrite_parse_nest_of_paren_for_data_nodes(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ } while (retval != ')');
+ if ((error_num = parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_column_definition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_column_definition");
+ do {
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval == '(')
+ {
+ if ((error_num = spider_rewrite_parse_nest_of_paren(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ } while (retval != ',' && retval != ')');
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_index_definition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_index_definition");
+ do {
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval == FOREIGN)
+ {
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "This SQL", "Spider Rewrite Plugin");
+ DBUG_RETURN(ER_SPIDER_NOT_SUPPORTED_NUM);
+ }
+ if (retval == '(')
+ {
+ if ((error_num = spider_rewrite_parse_nest_of_paren(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ } while (retval != ',' && retval != ')');
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_period_definition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_period_definition");
+ do {
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval == '(')
+ {
+ if ((error_num = spider_rewrite_parse_nest_of_paren(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ } while (retval != ',' && retval != ')');
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_check_definition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_check_definition");
+ do {
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval == '(')
+ {
+ if ((error_num = spider_rewrite_parse_nest_of_paren(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ } while (retval != ',' && retval != ')');
+ if ((error_num = parse_sql->append_parsed_symbol(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_create_table_select_statement(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_create_table_select_statement");
+ do {
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_spider_nodes_ex(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ } while (retval != ';' && retval != END_OF_INPUT);
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_interval(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_interval");
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ switch (retval)
+ {
+ case '+':
+ case '-':
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ default:
+ break;
+ }
+ switch (retval)
+ {
+ case NUM:
+ case TEXT_STRING:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ break;
+ default:
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ retval = parse_sql->get_next(&yylval);
+ switch (retval)
+ {
+ case MICROSECOND_SYM:
+ case SECOND_SYM:
+ case MINUTE_SYM:
+ case HOUR_SYM:
+ case DAY_SYM:
+ case WEEK_SYM:
+ case MONTH_SYM:
+ case QUARTER_SYM:
+ case YEAR_SYM:
+ case SECOND_MICROSECOND_SYM:
+ case MINUTE_MICROSECOND_SYM:
+ case MINUTE_SECOND_SYM:
+ case HOUR_MICROSECOND_SYM:
+ case HOUR_SECOND_SYM:
+ case HOUR_MINUTE_SYM:
+ case DAY_MICROSECOND_SYM:
+ case DAY_SECOND_SYM:
+ case DAY_MINUTE_SYM:
+ case DAY_HOUR_SYM:
+ case YEAR_MONTH_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ break;
+ default:
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ DBUG_RETURN(0);
+}
+
+int spider_rewrite_parse_create_table_table_option(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ bool all_nodes = FALSE;
+ DBUG_ENTER("spider_rewrite_parse_create_table_table_option");
+ switch (retval)
+ {
+ case STORAGE_SYM:
+ retval = parse_sql->get_next(&yylval);
+ if (retval != ENGINE_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_table_option_name_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case DEFAULT:
+ retval = parse_sql->get_next(&yylval);
+ if (retval == CHAR_SYM)
+ {
+ retval = parse_sql->get_next(&yylval);
+ if (retval != SET)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_table_option_character_set()))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ all_nodes = TRUE;
+ break;
+ }
+ if (retval == CHARSET)
+ {
+ if ((error_num =
+ parse_sql->append_table_option_character_set()))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ all_nodes = TRUE;
+ break;
+ }
+ if (retval != COLLATE_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_table_option_name(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ all_nodes = TRUE;
+ break;
+ case CHAR_SYM:
+ retval = parse_sql->get_next(&yylval);
+ if (retval != SET)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_table_option_character_set()))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ all_nodes = TRUE;
+ break;
+ case CHARSET:
+ retval = parse_sql->get_next(&yylval);
+ if ((error_num =
+ parse_sql->append_table_option_character_set()))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ all_nodes = TRUE;
+ break;
+ case DATA_SYM:
+ retval = parse_sql->get_next(&yylval);
+ if (retval != DIRECTORY_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_table_option_data_directory_for_data_nodes()))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case INDEX_SYM:
+ retval = parse_sql->get_next(&yylval);
+ if (retval != DIRECTORY_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_table_option_index_directory_for_data_nodes()))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case WITH:
+ retval = parse_sql->get_next(&yylval);
+ if (retval != SYSTEM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != VERSIONING_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_table_option_with_system_versioning_for_data_nodes())
+ ) {
+ parse_sql->push_error(error_num);
+ }
+ DBUG_RETURN(error_num);
+ default:
+ if ((error_num =
+ parse_sql->append_table_option_name_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ break;
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval == '=')
+ {
+ /* skip */
+ retval = parse_sql->get_next(&yylval);
+ }
+ if (all_nodes)
+ {
+ if ((error_num = parse_sql->append_table_option_value(
+ retval, &yylval))
+ ) {
+ parse_sql->push_error(error_num);
+ }
+ } else {
+ if ((error_num = parse_sql->append_table_option_value_for_data_nodes(
+ retval, &yylval))
+ ) {
+ parse_sql->push_error(error_num);
+ }
+ }
+ DBUG_RETURN(error_num);
+}
+
+int spider_rewrite_parse_create_table_partition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+) {
+ int error_num;
+ DBUG_ENTER("spider_rewrite_parse_create_table_partition");
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != BY)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ switch (retval)
+ {
+ case LINEAR_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != HASH_SYM && retval != KEY_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ /* fall through */
+ case HASH_SYM:
+ case KEY_SYM:
+ case RANGE_SYM:
+ case LIST_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != '(')
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num = spider_rewrite_parse_nest_of_paren_for_data_nodes(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ break;
+ case SYSTEM_TIME_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval == INTERVAL_SYM)
+ {
+ if ((error_num =
+ spider_rewrite_parse_interval(parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ }
+ break;
+ default:
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ switch (retval)
+ {
+ case LIMIT:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != NUM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ default:
+ break;
+ }
+ switch (retval)
+ {
+ case PARTITIONS_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != NUM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ default:
+ break;
+ }
+ switch (retval)
+ {
+ case SUBPARTITION_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != BY)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ switch (retval)
+ {
+ case LINEAR_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != HASH_SYM && retval != KEY_SYM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ /* fall through */
+ case HASH_SYM:
+ case KEY_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != '(')
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num = spider_rewrite_parse_nest_of_paren_for_data_nodes(
+ parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ default:
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ switch (retval)
+ {
+ case SUBPARTITIONS_SYM:
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ if (retval != NUM)
+ {
+ parse_sql->push_syntax_error(yylval.simple_string);
+ DBUG_RETURN(ER_SPIDER_SYNTAX_NUM);
+ }
+ if ((error_num =
+ parse_sql->append_parsed_symbol_for_data_nodes(retval, &yylval)))
+ {
+ parse_sql->push_error(error_num);
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ if (retval == '(')
+ {
+ if ((error_num = spider_rewrite_parse_nest_of_paren_for_data_nodes(
+ parse_sql, retval, yylval)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ retval = parse_sql->get_next(&yylval);
+ }
+ /* remains the last parsed part */
+ DBUG_RETURN(0);
+}
+
+static int spider_audit_rewrite_init(
+ void *p
+) {
+ int error_num;
+ THD *thd = current_thd;
+ DBUG_ENTER("spider_audit_rewrite_init");
+ if (pthread_key_create(&SPIDER_PARSE_SQL, NULL))
+ {
+ error_num = HA_ERR_OUT_OF_MEM;
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ goto error_pthread_key_create;
+ }
+ if(
+ SPD_INIT_DYNAMIC_ARRAY2(&spider_rw_table_cache1, sizeof(SPIDER_RWTBL),
+ NULL, 64, 64, MYF(MY_WME))
+ ) {
+ error_num = HA_ERR_OUT_OF_MEM;
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ goto error_rw_table_cache1_array_init;
+ }
+ spider_alloc_calc_mem_init(spider_rw_table_cache1, 258);
+ spider_alloc_calc_mem(NULL,
+ spider_rw_table_cache1,
+ spider_rw_table_cache1.max_element *
+ spider_rw_table_cache1.size_of_element);
+ if(
+ SPD_INIT_DYNAMIC_ARRAY2(&spider_rw_table_cache2, sizeof(SPIDER_RWTBL),
+ NULL, 64, 64, MYF(MY_WME))
+ ) {
+ error_num = HA_ERR_OUT_OF_MEM;
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
+ goto error_rw_table_cache2_array_init;
+ }
+ spider_alloc_calc_mem_init(spider_rw_table_cache2, 259);
+ spider_alloc_calc_mem(NULL,
+ spider_rw_table_cache2,
+ spider_rw_table_cache2.max_element *
+ spider_rw_table_cache2.size_of_element);
+ SPD_INIT_ALLOC_ROOT(&rw_table_mem_root1, 1024, 0, MYF(MY_WME));
+ SPD_INIT_ALLOC_ROOT(&rw_table_mem_root2, 1024, 0, MYF(MY_WME));
+ if (thd)
+ {
+ if (spider_init_rewrite_cache(thd))
+ {
+ error_num = spider_stmt_da_sql_errno(thd);
+ goto error_init_rewrite_cache;
+ }
+ }
+ audit_rewrite_initialized = TRUE;
+ DBUG_RETURN(0);
+
+error_init_rewrite_cache:
+ free_root(&rw_table_mem_root2, MYF(0));
+ free_root(&rw_table_mem_root1, MYF(0));
+ spider_free_rewrite_cache(&spider_rw_table_cache2);
+ spider_free_mem_calc(NULL,
+ spider_rw_table_cache2_id,
+ spider_rw_table_cache2.max_element *
+ spider_rw_table_cache2.size_of_element);
+ delete_dynamic(&spider_rw_table_cache2);
+error_rw_table_cache2_array_init:
+ spider_free_rewrite_cache(&spider_rw_table_cache1);
+ spider_free_mem_calc(NULL,
+ spider_rw_table_cache1_id,
+ spider_rw_table_cache1.max_element *
+ spider_rw_table_cache1.size_of_element);
+ delete_dynamic(&spider_rw_table_cache1);
+error_rw_table_cache1_array_init:
+ pthread_key_delete(SPIDER_PARSE_SQL);
+error_pthread_key_create:
+ DBUG_RETURN(error_num);
+}
+
+static int spider_audit_rewrite_deinit(
+ void *p
+) {
+ DBUG_ENTER("spider_audit_rewrite_deinit");
+ if (audit_rewrite_initialized)
+ {
+ spider_free_rewrite_cache(&spider_rw_table_cache2);
+ spider_free_mem_calc(NULL,
+ spider_rw_table_cache2_id,
+ spider_rw_table_cache2.max_element *
+ spider_rw_table_cache2.size_of_element);
+ delete_dynamic(&spider_rw_table_cache2);
+ spider_free_rewrite_cache(&spider_rw_table_cache1);
+ spider_free_mem_calc(NULL,
+ spider_rw_table_cache1_id,
+ spider_rw_table_cache1.max_element *
+ spider_rw_table_cache1.size_of_element);
+ delete_dynamic(&spider_rw_table_cache1);
+ pthread_key_delete(SPIDER_PARSE_SQL);
+ free_root(&rw_table_mem_root1, MYF(0));
+ free_root(&rw_table_mem_root2, MYF(0));
+ audit_rewrite_initialized = FALSE;
+ }
+ DBUG_RETURN(0);
+}
+
+static void spider_audit_rewrite_release_thd(
+ MYSQL_THD thd
+) {
+ spider_parse_sql *parse_sql = my_pthread_getspecific_ptr(
+ spider_parse_sql *, SPIDER_PARSE_SQL);
+ DBUG_ENTER("spider_audit_rewrite_release_thd");
+ if (parse_sql)
+ {
+ delete parse_sql;
+ my_pthread_setspecific_ptr(SPIDER_PARSE_SQL, NULL);
+ }
+ DBUG_VOID_RETURN;
+}
+
+static void spider_audit_rewrite_event_notify(
+ MYSQL_THD thd,
+ unsigned int event_class,
+ const void *event
+) {
+ int error_num;
+ mysql_event_query_rewrite *ev = (mysql_event_query_rewrite *) event;
+ spider_parse_sql *parse_sql = my_pthread_getspecific_ptr(
+ spider_parse_sql *, SPIDER_PARSE_SQL);
+ MDL_request mdl_request_cache;
+ SPIDER_RWTBL *rwtbl;
+ DBUG_ENTER("spider_audit_rewrite_event_notify");
+ switch (ev->event_subclass)
+ {
+ case MYSQL_AUDIT_QUERY_REWRITE_QUERY:
+ error_num = spider_rewrite_parse(thd, ev, &parse_sql);
+ if (likely(!parse_sql))
+ {
+ DBUG_VOID_RETURN;
+ }
+ parse_sql->end_parse();
+ if (error_num)
+ {
+ DBUG_VOID_RETURN;
+ }
+ if (!rewrite_cache_initialized)
+ {
+ if (spider_init_rewrite_cache(thd))
+ {
+ DBUG_VOID_RETURN;
+ }
+ }
+ /* get lock */
+ mdl_request_cache.init(MDL_key::USER_LOCK, "spider", "rw_table_cache",
+ MDL_SHARED, MDL_EXPLICIT);
+ while (TRUE)
+ {
+ if (thd->mdl_context.acquire_lock(&mdl_request_cache, 10))
+ {
+ if (spider_stmt_da_sql_errno(thd) == ER_LOCK_WAIT_TIMEOUT)
+ {
+ thd->clear_error();
+ continue;
+ } else {
+ DBUG_VOID_RETURN;
+ }
+ }
+ break;
+ }
+ if (!(rwtbl = spider_rewrite_table_cache_compare(
+ &parse_sql->schema_name, &parse_sql->table_name, parse_sql->cs)))
+ {
+ thd->mdl_context.release_lock(mdl_request_cache.ticket);
+ DBUG_VOID_RETURN;
+ }
+ if ((error_num = parse_sql->append_spider_table_for_spider_nodes(
+ rwtbl->tt)))
+ {
+ parse_sql->push_error(error_num);
+ thd->mdl_context.release_lock(mdl_request_cache.ticket);
+ DBUG_VOID_RETURN;
+ }
+ if ((error_num = parse_sql->create_share_from_table(
+ rwtbl->tt)))
+ {
+ parse_sql->push_error(error_num);
+ thd->mdl_context.release_lock(mdl_request_cache.ticket);
+ DBUG_VOID_RETURN;
+ }
+ if ((error_num = parse_sql->get_conn()))
+ {
+ parse_sql->push_error(error_num);
+ thd->mdl_context.release_lock(mdl_request_cache.ticket);
+ DBUG_VOID_RETURN;
+ }
+ if ((error_num = parse_sql->send_sql_to_data_nodes()))
+ {
+ parse_sql->push_error(error_num);
+ thd->mdl_context.release_lock(mdl_request_cache.ticket);
+ DBUG_VOID_RETURN;
+ }
+ if (spider_rewrite_insert_rewritten_tables(
+ thd, &parse_sql->schema_name, &parse_sql->table_name, parse_sql->cs,
+ rwtbl))
+ {
+ thd->mdl_context.release_lock(mdl_request_cache.ticket);
+ DBUG_VOID_RETURN;
+ }
+ thd->mdl_context.release_lock(mdl_request_cache.ticket);
+ ev->flags = MYSQL_AUDIT_QUERY_REWRITE_FOR_EXECUTE | MYSQL_AUDIT_QUERY_REWRITE_FOR_GENERAL_LOG;
+ ev->rewritten_query = parse_sql->get_query_for_spider_node(
+ &ev->rewritten_query_length);
+ ev->found_semicolon = parse_sql->get_found_semicolon();
+ break;
+ case MYSQL_AUDIT_QUERY_REWRITE_SLOW:
+ if (unlikely(parse_sql && parse_sql->get_query_id() == ev->query_id))
+ {
+ ev->flags = MYSQL_AUDIT_QUERY_REWRITE_FOR_SLOW_LOG;
+ ev->rewritten_query = parse_sql->get_query_for_spider_node(
+ &ev->rewritten_query_length);
+ }
+ break;
+ case MYSQL_AUDIT_QUERY_REWRITE_BINLOG:
+ /* nothing to do */
+ break;
+ default:
+ /* unknown event class */
+ DBUG_ASSERT(FALSE);
+ break;
+ }
+ DBUG_VOID_RETURN;
+}
+
+static struct st_mysql_audit spider_audit_rewrite_descriptor =
+{
+ MYSQL_AUDIT_INTERFACE_VERSION,
+ spider_audit_rewrite_release_thd,
+ spider_audit_rewrite_event_notify,
+ { MYSQL_AUDIT_QUERY_REWRITE_CLASSMASK }
+};
+
+struct st_mysql_plugin spider_audit_rewrite =
+{
+ MYSQL_AUDIT_PLUGIN,
+ &spider_audit_rewrite_descriptor,
+ "SPIDER_REWRITE",
+ "Kentoku Shiba & MariaDB corp",
+ "Spider query rewrite",
+ PLUGIN_LICENSE_GPL,
+ spider_audit_rewrite_init,
+ spider_audit_rewrite_deinit,
+ 0x0001,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+};
+
+#ifdef MARIADB_BASE_VERSION
+struct st_maria_plugin spider_audit_rewrite_maria =
+{
+ MYSQL_AUDIT_PLUGIN,
+ &spider_audit_rewrite_descriptor,
+ "SPIDER_REWRITE",
+ "Kentoku Shiba & MariaDB corp",
+ "Spider query rewrite",
+ PLUGIN_LICENSE_GPL,
+ spider_audit_rewrite_init,
+ spider_audit_rewrite_deinit,
+ 0x0001,
+ NULL,
+ NULL,
+ "0.1.1",
+ MariaDB_PLUGIN_MATURITY_BETA,
+};
+#endif
+#else
+long long spider_flush_rewrite_cache_body(
+ char *error
+) {
+ DBUG_ENTER("spider_flush_rewrite_cache_body");
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "This function", "this version");
+ *error = 1;
+ DBUG_RETURN(0);
+}
+#endif
diff --git a/storage/spider/spd_rewrite.h b/storage/spider/spd_rewrite.h
new file mode 100644
index 00000000000..048607ed5af
--- /dev/null
+++ b/storage/spider/spd_rewrite.h
@@ -0,0 +1,148 @@
+/* Copyright (C) 2018-2019 Kentoku Shiba
+ Copyright (C) 2018-2019 MariaDB corp
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+void spider_free_rewrite_table_subpartitions(
+ SPIDER_RWTBLSPTT *info
+);
+
+void spider_free_rewrite_table_partitions(
+ SPIDER_RWTBLPTT *info
+);
+
+void spider_free_rewrite_table_tables(
+ SPIDER_RWTBLTBL *info
+);
+
+void spider_free_rewrite_tables(
+ SPIDER_RWTBL *info
+);
+
+void spider_free_rewrite_cache(
+ DYNAMIC_ARRAY *rw_table_cache
+);
+
+bool spider_load_rewrite_table_subpartitions(
+ THD *thd,
+ MEM_ROOT *mem_root,
+ TABLE_LIST *tables,
+ SPIDER_RWTBLPTT *rwtblptt
+);
+
+bool spider_load_rewrite_table_partitions(
+ THD *thd,
+ MEM_ROOT *mem_root,
+ TABLE_LIST *tables,
+ SPIDER_RWTBLTBL *rwtbltbl
+);
+
+bool spider_load_rewrite_table_tables(
+ THD *thd,
+ MEM_ROOT *mem_root,
+ TABLE_LIST *tables,
+ SPIDER_RWTBL *rwtbl
+);
+
+bool spider_init_rewrite_cache(
+ THD *thd
+);
+
+SPIDER_RWTBL *spider_rewrite_table_cache_compare(
+ const LEX_CSTRING *db_name,
+ const LEX_CSTRING *table_name,
+ const struct charset_info_st *cs
+);
+
+int spider_rewrite_insert_rewritten_tables(
+ THD *thd,
+ LEX_CSTRING *schema_name,
+ LEX_CSTRING *table_name,
+ const struct charset_info_st *cs,
+ SPIDER_RWTBL *rwtbl
+);
+
+int spider_rewrite_parse(
+ THD *thd,
+ mysql_event_query_rewrite *ev,
+ spider_parse_sql **parse_sql_p
+);
+
+int spider_rewrite_parse_create(
+ spider_parse_sql *parse_sql
+);
+
+int spider_rewrite_parse_create_table(
+ spider_parse_sql *parse_sql
+);
+
+int spider_rewrite_parse_nest_of_paren(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_nest_of_paren_for_data_nodes(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_column_definition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_index_definition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_period_definition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_check_definition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_create_table_select_statement(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_interval(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_create_table_table_option(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
+
+int spider_rewrite_parse_create_table_partition(
+ spider_parse_sql *parse_sql,
+ int &retval,
+ union YYSTYPE &yylval
+);
diff --git a/storage/spider/spd_sys_table.cc b/storage/spider/spd_sys_table.cc
index 8f8605b85bd..fc1a01de5b3 100644
--- a/storage/spider/spd_sys_table.cc
+++ b/storage/spider/spd_sys_table.cc
@@ -1,4 +1,5 @@
-/* Copyright (C) 2008-2018 Kentoku Shiba
+/* Copyright (C) 2008-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -27,6 +28,7 @@
#include "key.h"
#include "sql_base.h"
#include "tztime.h"
+#include "lock.h"
#endif
#include "sql_select.h"
#include "spd_err.h"
@@ -39,6 +41,34 @@
extern handlerton *spider_hton_ptr;
extern Time_zone *spd_tz_system;
+void spider_sys_init_one_table(
+ TABLE_LIST *table_list,
+ const char *db_nm,
+ uint db_nm_len,
+ const char *table_nm,
+ uint table_nm_len,
+ enum thr_lock_type lock_type
+) {
+ DBUG_ENTER("spider_sys_init_one_table");
+#ifdef SPIDER_use_LEX_CSTRING_for_database_tablename_alias
+ LEX_CSTRING db_name =
+ {
+ db_nm,
+ db_nm_len
+ };
+ LEX_CSTRING tbl_name =
+ {
+ table_nm,
+ table_nm_len
+ };
+ table_list->init_one_table(&db_name, &tbl_name, NULL, lock_type);
+#else
+ table_list->init_one_table(db_nm, db_nm_len,
+ table_nm, table_nm_len, table_nm, lock_type);
+#endif
+ DBUG_VOID_RETURN;
+}
+
/**
Insert a Spider system table row.
@@ -204,6 +234,7 @@ TABLE *spider_open_sys_table(
if (!(table = (TABLE*) spider_malloc(spider_current_trx, 12,
sizeof(*table), MYF(MY_WME))))
{
+ my_error(HA_ERR_OUT_OF_MEM, MYF(0));
*error_num = HA_ERR_OUT_OF_MEM;
goto error_malloc;
}
@@ -359,13 +390,13 @@ void spider_close_sys_table(
bool spider_sys_open_tables(
THD *thd,
TABLE_LIST **tables,
+ uint *counter,
Open_tables_backup *open_tables_backup
) {
- uint counter;
ulonglong utime_after_lock_backup = thd->utime_after_lock;
DBUG_ENTER("spider_sys_open_tables");
thd->reset_n_backup_open_tables_state(open_tables_backup);
- if (open_tables(thd, tables, &counter,
+ if (open_tables(thd, tables, counter,
MYSQL_OPEN_IGNORE_GLOBAL_READ_LOCK | MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY |
MYSQL_OPEN_IGNORE_FLUSH | MYSQL_LOCK_IGNORE_TIMEOUT | MYSQL_LOCK_LOG_TABLE
)) {
@@ -377,6 +408,17 @@ bool spider_sys_open_tables(
DBUG_RETURN(FALSE);
}
+bool spider_sys_open_tables(
+ THD *thd,
+ TABLE_LIST **tables,
+ Open_tables_backup *open_tables_backup
+) {
+ uint counter;
+ DBUG_ENTER("spider_sys_open_tables");
+ DBUG_RETURN(spider_sys_open_tables(thd, tables, &counter,
+ open_tables_backup));
+}
+
TABLE *spider_sys_open_table(
THD *thd,
TABLE_LIST *tables,
@@ -408,6 +450,24 @@ void spider_sys_close_table(
thd->restore_backup_open_tables_state(open_tables_backup);
DBUG_VOID_RETURN;
}
+
+MYSQL_LOCK *spider_sys_lock_tables(
+ THD *thd,
+ TABLE **table,
+ uint counter
+) {
+ DBUG_ENTER("spider_sys_lock_tables");
+ DBUG_RETURN(mysql_lock_tables(thd, table, counter, 0));
+}
+
+void spider_sys_unlock_tables(
+ THD *thd,
+ MYSQL_LOCK *lock
+) {
+ DBUG_ENTER("spider_sys_unlock_tables");
+ mysql_unlock_tables(thd, lock);
+ DBUG_VOID_RETURN;
+}
#endif
int spider_sys_index_init(
@@ -3284,6 +3344,546 @@ error:
DBUG_RETURN(error_num);
}
+#ifdef SPIDER_REWRITE_AVAILABLE
+bool spider_copy_sys_rewrite_columns(
+ TABLE *table_from,
+ TABLE *table_to,
+ uint columns
+) {
+ DBUG_ENTER("spider_copy_sys_rewrite_columns");
+ do {
+ --columns;
+ if (table_to->field[columns]->store_field(table_from->field[columns]))
+ {
+ DBUG_RETURN(TRUE);
+ }
+ } while (columns);
+ DBUG_RETURN(FALSE);
+}
+
+int spider_get_sys_rewrite_tables(
+ TABLE *table,
+ SPIDER_RWTBL *info,
+ MEM_ROOT *mem_root
+) {
+ char *ptr;
+ int error_num = 0;
+ DBUG_ENTER("spider_get_sys_rewrite_tables");
+ if ((ptr = get_field(mem_root, table->field[0])))
+ {
+ info->table_id =
+ (ulonglong) my_strtoll10(ptr, (char**) NULL, &error_num);
+ if (error_num)
+ {
+ error_num = ER_SPIDER_INVALID_VALUE_NUM;
+ my_printf_error(ER_SPIDER_INVALID_VALUE_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ ptr, SPIDER_SYS_RW_TBLS_TABLE_NAME_STR,
+ "table_id");
+ goto error;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "table_id=null",
+ SPIDER_SYS_RW_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider db_name is %s",
+ table->field[1]->is_null() ? "null" : "not null"));
+ if (!table->field[1]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[1])))
+ {
+ info->db_name.length = strlen(ptr);
+ info->db_name.str =
+ spider_create_string(ptr, info->db_name.length);
+ } else {
+ info->db_name.length = 0;
+ info->db_name.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "db_name=null",
+ SPIDER_SYS_RW_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider table_name is %s",
+ table->field[2]->is_null() ? "null" : "not null"));
+ if (!table->field[2]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[2])))
+ {
+ info->table_name.length = strlen(ptr);
+ info->table_name.str =
+ spider_create_string(ptr, info->table_name.length);
+ } else {
+ info->table_name.length = 0;
+ info->table_name.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "table_name=null",
+ SPIDER_SYS_RW_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+error:
+ DBUG_RETURN(error_num);
+}
+
+int spider_get_sys_rewrite_table_tables(
+ TABLE *table,
+ SPIDER_RWTBLTBL *info,
+ MEM_ROOT *mem_root
+) {
+ char *ptr;
+ int error_num = 0;
+ DBUG_ENTER("spider_get_sys_rewrite_table_tables");
+ if ((ptr = get_field(mem_root, table->field[1])))
+ {
+ info->partition_id =
+ (ulonglong) my_strtoll10(ptr, (char**) NULL, &error_num);
+ if (error_num)
+ {
+ error_num = ER_SPIDER_INVALID_VALUE_NUM;
+ my_printf_error(ER_SPIDER_INVALID_VALUE_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ ptr, SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR,
+ "partition_id");
+ goto error;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "partition_id=null",
+ SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider partition_method is %s",
+ table->field[2]->is_null() ? "null" : "not null"));
+ if (!table->field[2]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[2])))
+ {
+ info->partition_method.length = strlen(ptr);
+ info->partition_method.str =
+ spider_create_string(ptr, info->partition_method.length);
+ } else {
+ info->partition_method.length = 0;
+ info->partition_method.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "partition_method=null",
+ SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider partition_expression is %s",
+ table->field[3]->is_null() ? "null" : "not null"));
+ if (!table->field[3]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[3])))
+ {
+ info->partition_expression.length = strlen(ptr);
+ info->partition_expression.str =
+ spider_create_string(ptr, info->partition_expression.length);
+ } else {
+ info->partition_expression.length = 0;
+ info->partition_expression.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "partition_expression=null",
+ SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider subpartition_method is %s",
+ table->field[4]->is_null() ? "null" : "not null"));
+ if (!table->field[4]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[4])))
+ {
+ info->subpartition_method.length = strlen(ptr);
+ info->subpartition_method.str =
+ spider_create_string(ptr, info->subpartition_method.length);
+ } else {
+ info->subpartition_method.length = 0;
+ info->subpartition_method.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "subpartition_method=null",
+ SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider subpartition_expression is %s",
+ table->field[5]->is_null() ? "null" : "not null"));
+ if (!table->field[5]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[5])))
+ {
+ info->subpartition_expression.length = strlen(ptr);
+ info->subpartition_expression.str =
+ spider_create_string(ptr, info->subpartition_expression.length);
+ } else {
+ info->subpartition_expression.length = 0;
+ info->subpartition_expression.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "subpartition_expression=null",
+ SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider connection_str is %s",
+ table->field[6]->is_null() ? "null" : "not null"));
+ if (!table->field[6]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[6])))
+ {
+ info->connection_str.length = strlen(ptr);
+ info->connection_str.str =
+ spider_create_string(ptr, info->connection_str.length);
+ } else {
+ info->connection_str.length = 0;
+ info->connection_str.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "connection_str=null",
+ SPIDER_SYS_RW_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider comment_str is %s",
+ table->field[7]->is_null() ? "null" : "not null"));
+ if (!table->field[7]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[7])))
+ {
+ info->comment_str.length = strlen(ptr);
+ info->comment_str.str =
+ spider_create_string(ptr, info->comment_str.length);
+ } else {
+ info->comment_str.length = 0;
+ info->comment_str.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "comment_str=null",
+ SPIDER_SYS_RW_TBLS_TABLE_NAME_STR);
+ goto error;
+ }
+error:
+ DBUG_RETURN(error_num);
+}
+
+int spider_get_sys_rewrite_table_partitions(
+ TABLE *table,
+ SPIDER_RWTBLPTT *info,
+ MEM_ROOT *mem_root
+) {
+ char *ptr;
+ int error_num = 0;
+ DBUG_ENTER("spider_get_sys_rewrite_table_partitions");
+ if ((ptr = get_field(mem_root, table->field[2])))
+ {
+ info->partition_ordinal_position =
+ (ulonglong) my_strtoll10(ptr, (char**) NULL, &error_num);
+ if (error_num)
+ {
+ error_num = ER_SPIDER_INVALID_VALUE_NUM;
+ my_printf_error(ER_SPIDER_INVALID_VALUE_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ ptr, SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR,
+ "partition_ordinal_position");
+ goto error;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "partition_ordinal_position=null",
+ SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider partition_name is %s",
+ table->field[3]->is_null() ? "null" : "not null"));
+ if (!table->field[3]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[3])))
+ {
+ info->partition_name.length = strlen(ptr);
+ info->partition_name.str =
+ spider_create_string(ptr, info->partition_name.length);
+ } else {
+ info->partition_name.length = 0;
+ info->partition_name.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "partition_name=null",
+ SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider partition_description is %s",
+ table->field[4]->is_null() ? "null" : "not null"));
+ if (!table->field[4]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[4])))
+ {
+ info->partition_description.length = strlen(ptr);
+ info->partition_description.str =
+ spider_create_string(ptr, info->partition_description.length);
+ } else {
+ info->partition_description.length = 0;
+ info->partition_description.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "partition_description=null",
+ SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider connection_str is %s",
+ table->field[5]->is_null() ? "null" : "not null"));
+ if (!table->field[5]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[5])))
+ {
+ info->connection_str.length = strlen(ptr);
+ info->connection_str.str =
+ spider_create_string(ptr, info->connection_str.length);
+ } else {
+ info->connection_str.length = 0;
+ info->connection_str.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "connection_str=null",
+ SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider comment_str is %s",
+ table->field[6]->is_null() ? "null" : "not null"));
+ if (!table->field[6]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[6])))
+ {
+ info->comment_str.length = strlen(ptr);
+ info->comment_str.str =
+ spider_create_string(ptr, info->comment_str.length);
+ } else {
+ info->comment_str.length = 0;
+ info->comment_str.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "comment_str=null",
+ SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR);
+ goto error;
+ }
+error:
+ DBUG_RETURN(error_num);
+}
+
+int spider_get_sys_rewrite_table_subpartitions(
+ TABLE *table,
+ SPIDER_RWTBLSPTT *info,
+ MEM_ROOT *mem_root
+) {
+ char *ptr;
+ int error_num = 0;
+ DBUG_ENTER("spider_get_sys_rewrite_table_subpartitions");
+ if ((ptr = get_field(mem_root, table->field[3])))
+ {
+ info->subpartition_ordinal_position =
+ (ulonglong) my_strtoll10(ptr, (char**) NULL, &error_num);
+ if (error_num)
+ {
+ error_num = ER_SPIDER_INVALID_VALUE_NUM;
+ my_printf_error(ER_SPIDER_INVALID_VALUE_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ ptr, SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR,
+ "subpartition_ordinal_position");
+ goto error;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "subpartition_ordinal_position=null",
+ SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider subpartition_name is %s",
+ table->field[4]->is_null() ? "null" : "not null"));
+ if (!table->field[4]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[4])))
+ {
+ info->subpartition_name.length = strlen(ptr);
+ info->subpartition_name.str =
+ spider_create_string(ptr, info->subpartition_name.length);
+ } else {
+ info->subpartition_name.length = 0;
+ info->subpartition_name.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "subpartition_name=null",
+ SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider subpartition_description is %s",
+ table->field[5]->is_null() ? "null" : "not null"));
+ if (!table->field[5]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[5])))
+ {
+ info->subpartition_description.length = strlen(ptr);
+ info->subpartition_description.str =
+ spider_create_string(ptr, info->subpartition_description.length);
+ } else {
+ info->subpartition_description.length = 0;
+ info->subpartition_description.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "subpartition_description=null",
+ SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider connection_str is %s",
+ table->field[6]->is_null() ? "null" : "not null"));
+ if (!table->field[6]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[6])))
+ {
+ info->connection_str.length = strlen(ptr);
+ info->connection_str.str =
+ spider_create_string(ptr, info->connection_str.length);
+ } else {
+ info->connection_str.length = 0;
+ info->connection_str.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "connection_str=null",
+ SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR);
+ goto error;
+ }
+ DBUG_PRINT("info", ("spider comment_str is %s",
+ table->field[7]->is_null() ? "null" : "not null"));
+ if (!table->field[7]->is_null())
+ {
+ if ((ptr = get_field(mem_root, table->field[7])))
+ {
+ info->comment_str.length = strlen(ptr);
+ info->comment_str.str =
+ spider_create_string(ptr, info->comment_str.length);
+ } else {
+ info->comment_str.length = 0;
+ info->comment_str.str = NullS;
+ }
+ } else {
+ error_num = ER_SPIDER_NOT_SUPPORTED_NUM;
+ my_printf_error(ER_SPIDER_NOT_SUPPORTED_NUM,
+ ER_SPIDER_NOT_SUPPORTED_STR, MYF(0),
+ "comment_str=null",
+ SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR);
+ goto error;
+ }
+error:
+ DBUG_RETURN(error_num);
+}
+
+void spider_store_rewritten_table_name(
+ TABLE *table,
+ LEX_CSTRING *schema_name,
+ LEX_CSTRING *table_name,
+ const struct charset_info_st *cs
+) {
+ DBUG_ENTER("spider_store_rewritten_table_name");
+ table->field[0]->store(schema_name->str, schema_name->length, cs);
+ table->field[1]->store(table_name->str, table_name->length, cs);
+ DBUG_VOID_RETURN;
+}
+
+void spider_store_rewritten_table_id(
+ TABLE *table,
+ SPIDER_RWTBL *info
+) {
+ DBUG_ENTER("spider_store_rewritten_table_id");
+ table->field[2]->store(info->table_id);
+ DBUG_VOID_RETURN;
+}
+
+void spider_store_rewritten_partition_id(
+ TABLE *table,
+ SPIDER_RWTBLTBL *info
+) {
+ DBUG_ENTER("spider_store_rewritten_partition_id");
+ table->field[3]->store(info->partition_id);
+ DBUG_VOID_RETURN;
+}
+
+int spider_insert_rewritten_table(
+ TABLE *table,
+ SPIDER_RWTBLTBL *info
+) {
+ int error_num;
+ char table_key[MAX_KEY_LENGTH];
+ DBUG_ENTER("spider_insert_rewritten_table");
+ spider_store_rewritten_partition_id(table, info);
+
+ if ((error_num = spider_check_sys_table(table, table_key)))
+ {
+ if (error_num != HA_ERR_KEY_NOT_FOUND && error_num != HA_ERR_END_OF_FILE)
+ {
+ table->file->print_error(error_num, MYF(0));
+ DBUG_RETURN(error_num);
+ }
+ if ((error_num = spider_write_sys_table_row(table)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ }
+ DBUG_RETURN(0);
+}
+#endif
+
#ifdef SPIDER_use_LEX_CSTRING_for_Field_blob_constructor
TABLE *spider_mk_sys_tmp_table(
THD *thd,
diff --git a/storage/spider/spd_sys_table.h b/storage/spider/spd_sys_table.h
index 0fdb8cde6a2..b48f785a703 100644
--- a/storage/spider/spd_sys_table.h
+++ b/storage/spider/spd_sys_table.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2008-2018 Kentoku Shiba
+/* Copyright (C) 2008-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -13,6 +14,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+#define SPIDER_SYS_DB_NAME_STR "mysql"
+#define SPIDER_SYS_DB_NAME_LEN (sizeof(SPIDER_SYS_DB_NAME_STR) - 1)
#define SPIDER_SYS_XA_TABLE_NAME_STR "spider_xa"
#define SPIDER_SYS_XA_TABLE_NAME_LEN (sizeof(SPIDER_SYS_XA_TABLE_NAME_STR) - 1)
#define SPIDER_SYS_XA_MEMBER_TABLE_NAME_STR "spider_xa_member"
@@ -31,6 +34,16 @@
#define SPIDER_SYS_TABLE_STS_TABLE_NAME_LEN (sizeof(SPIDER_SYS_TABLE_STS_TABLE_NAME_STR) - 1)
#define SPIDER_SYS_TABLE_CRD_TABLE_NAME_STR "spider_table_crd"
#define SPIDER_SYS_TABLE_CRD_TABLE_NAME_LEN (sizeof(SPIDER_SYS_TABLE_CRD_TABLE_NAME_STR) - 1)
+#define SPIDER_SYS_RW_TBLS_TABLE_NAME_STR "spider_rewrite_tables"
+#define SPIDER_SYS_RW_TBLS_TABLE_NAME_LEN (sizeof(SPIDER_SYS_RW_TBLS_TABLE_NAME_STR) - 1)
+#define SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR "spider_rewrite_table_tables"
+#define SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_LEN (sizeof(SPIDER_SYS_RW_TBL_TBLS_TABLE_NAME_STR) - 1)
+#define SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR "spider_rewrite_table_partitions"
+#define SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_LEN (sizeof(SPIDER_SYS_RW_TBL_PTTS_TABLE_NAME_STR) - 1)
+#define SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR "spider_rewrite_table_subpartitions"
+#define SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_LEN (sizeof(SPIDER_SYS_RW_TBL_SPTTS_TABLE_NAME_STR) - 1)
+#define SPIDER_SYS_RWN_TBLS_TABLE_NAME_STR "spider_rewritten_tables"
+#define SPIDER_SYS_RWN_TBLS_TABLE_NAME_LEN (sizeof(SPIDER_SYS_RWN_TBLS_TABLE_NAME_STR) - 1)
#define SPIDER_SYS_XA_PREPARED_STR "PREPARED"
#define SPIDER_SYS_XA_NOT_YET_STR "NOT YET"
@@ -68,6 +81,15 @@ public:
uint link_id_length;
};
+void spider_sys_init_one_table(
+ TABLE_LIST *table_list,
+ const char *db_nm,
+ uint db_nm_len,
+ const char *table_nm,
+ uint table_nm_len,
+ enum thr_lock_type lock_type
+);
+
#if MYSQL_VERSION_ID < 50500
TABLE *spider_open_sys_table(
THD *thd,
@@ -106,6 +128,13 @@ void spider_close_sys_table(
bool spider_sys_open_tables(
THD *thd,
TABLE_LIST **tables,
+ uint *counter,
+ Open_tables_backup *open_tables_backup
+);
+
+bool spider_sys_open_tables(
+ THD *thd,
+ TABLE_LIST **tables,
Open_tables_backup *open_tables_backup
);
@@ -119,6 +148,17 @@ void spider_sys_close_table(
THD *thd,
Open_tables_backup *open_tables_backup
);
+
+MYSQL_LOCK *spider_sys_lock_tables(
+ THD *thd,
+ TABLE **table,
+ uint counter
+);
+
+void spider_sys_unlock_tables(
+ THD *thd,
+ MYSQL_LOCK *lock
+);
#endif
int spider_sys_index_init(
@@ -627,6 +667,60 @@ int spider_sys_replace(
bool *modified_non_trans_table
);
+#ifdef SPIDER_REWRITE_AVAILABLE
+bool spider_copy_sys_rewrite_columns(
+ TABLE *table_from,
+ TABLE *table_to,
+ uint columns
+);
+
+int spider_get_sys_rewrite_tables(
+ TABLE *table,
+ SPIDER_RWTBL *info,
+ MEM_ROOT *mem_root
+);
+
+int spider_get_sys_rewrite_table_tables(
+ TABLE *table,
+ SPIDER_RWTBLTBL *info,
+ MEM_ROOT *mem_root
+);
+
+int spider_get_sys_rewrite_table_partitions(
+ TABLE *table,
+ SPIDER_RWTBLPTT *info,
+ MEM_ROOT *mem_root
+);
+
+int spider_get_sys_rewrite_table_subpartitions(
+ TABLE *table,
+ SPIDER_RWTBLSPTT *info,
+ MEM_ROOT *mem_root
+);
+
+void spider_store_rewritten_table_name(
+ TABLE *table,
+ LEX_CSTRING *schema_name,
+ LEX_CSTRING *table_name,
+ const struct charset_info_st *cs
+);
+
+void spider_store_rewritten_table_id(
+ TABLE *table,
+ SPIDER_RWTBL *info
+);
+
+void spider_store_rewritten_partition_id(
+ TABLE *table,
+ SPIDER_RWTBLTBL *info
+);
+
+int spider_insert_rewritten_table(
+ TABLE *table,
+ SPIDER_RWTBLTBL *info
+);
+#endif
+
#ifdef SPIDER_use_LEX_CSTRING_for_Field_blob_constructor
TABLE *spider_mk_sys_tmp_table(
THD *thd,
diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc
index 0e706219432..f48db0f03c1 100644
--- a/storage/spider/spd_table.cc
+++ b/storage/spider/spd_table.cc
@@ -1,4 +1,5 @@
-/* Copyright (C) 2008-2018 Kentoku Shiba
+/* Copyright (C) 2008-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -2091,7 +2092,11 @@ int spider_parse_connect_info(
}
#ifdef WITH_PARTITION_STORAGE_ENGINE
+#ifdef SPIDER_PARTITION_HAS_CONNECTION_STRING
+ for (roop_count = 6; roop_count > 0; roop_count--)
+#else
for (roop_count = 4; roop_count > 0; roop_count--)
+#endif
#else
for (roop_count = 2; roop_count > 0; roop_count--)
#endif
@@ -2104,7 +2109,25 @@ int spider_parse_connect_info(
switch (roop_count)
{
#ifdef WITH_PARTITION_STORAGE_ENGINE
+#ifdef SPIDER_PARTITION_HAS_CONNECTION_STRING
+ case 6:
+ if (!sub_elem || sub_elem->connect_string.length == 0)
+ continue;
+ DBUG_PRINT("info",("spider create sub connect string"));
+ if (
+ !(connect_string = spider_create_string(
+ sub_elem->connect_string.str,
+ sub_elem->connect_string.length))
+ ) {
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error_alloc_conn_string;
+ }
+ DBUG_PRINT("info",("spider connect_string=%s", connect_string));
+ break;
+ case 5:
+#else
case 4:
+#endif
if (!sub_elem || !sub_elem->part_comment)
continue;
DBUG_PRINT("info",("spider create sub comment string"));
@@ -2118,6 +2141,22 @@ int spider_parse_connect_info(
}
DBUG_PRINT("info",("spider sub comment string=%s", connect_string));
break;
+#ifdef SPIDER_PARTITION_HAS_CONNECTION_STRING
+ case 4:
+ if (!part_elem || part_elem->connect_string.length == 0)
+ continue;
+ DBUG_PRINT("info",("spider create part connect string"));
+ if (
+ !(connect_string = spider_create_string(
+ part_elem->connect_string.str,
+ part_elem->connect_string.length))
+ ) {
+ error_num = HA_ERR_OUT_OF_MEM;
+ goto error_alloc_conn_string;
+ }
+ DBUG_PRINT("info",("spider connect_string=%s", connect_string));
+ break;
+#endif
case 3:
if (!part_elem || !part_elem->part_comment)
continue;
@@ -2134,32 +2173,32 @@ int spider_parse_connect_info(
break;
#endif
case 2:
- if (table_share->comment.length == 0)
+ if (table_share->connect_string.length == 0)
continue;
- DBUG_PRINT("info",("spider create comment string"));
+ DBUG_PRINT("info",("spider create connect_string string"));
if (
!(connect_string = spider_create_string(
- table_share->comment.str,
- table_share->comment.length))
+ table_share->connect_string.str,
+ table_share->connect_string.length))
) {
error_num = HA_ERR_OUT_OF_MEM;
goto error_alloc_conn_string;
}
- DBUG_PRINT("info",("spider comment string=%s", connect_string));
+ DBUG_PRINT("info",("spider connect_string=%s", connect_string));
break;
default:
- if (table_share->connect_string.length == 0)
+ if (table_share->comment.length == 0)
continue;
- DBUG_PRINT("info",("spider create connect_string string"));
+ DBUG_PRINT("info",("spider create comment string"));
if (
!(connect_string = spider_create_string(
- table_share->connect_string.str,
- table_share->connect_string.length))
+ table_share->comment.str,
+ table_share->comment.length))
) {
error_num = HA_ERR_OUT_OF_MEM;
goto error_alloc_conn_string;
}
- DBUG_PRINT("info",("spider connect_string=%s", connect_string));
+ DBUG_PRINT("info",("spider comment string=%s", connect_string));
break;
}
@@ -5736,6 +5775,7 @@ void spider_free_share_resource_only(
pthread_mutex_destroy(&share->crd_mutex);
pthread_mutex_destroy(&share->sts_mutex);
pthread_mutex_destroy(&share->mutex);
+ free_root(&share->mem_root, MYF(0));
spider_free(spider_current_trx, share, MYF(0));
DBUG_VOID_RETURN;
}
@@ -6848,7 +6888,7 @@ int spider_db_done(
spider_destroy_thd(thd);
/*
-DBUG_ASSERT(0);
+assert(0);
*/
DBUG_RETURN(0);
}
@@ -9734,6 +9774,40 @@ void spider_free_spider_object_for_share(
DBUG_VOID_RETURN;
}
+int spider_create_spider_object_for_share_with_sql_string(
+ SPIDER_TRX *trx,
+ SPIDER_SHARE *share,
+ ha_spider **spider
+) {
+ int error_num;
+ uint roop_count;
+ DBUG_ENTER("spider_create_spider_object_for_share_with_sql_string");
+ if ((error_num = spider_create_spider_object_for_share(trx, share, spider)))
+ {
+ DBUG_RETURN(error_num);
+ }
+ if (!((*spider)->result_list.sqls = new spider_string[share->all_link_count]))
+ {
+ spider_free_spider_object_for_share(spider);
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ for (roop_count = 0; roop_count < share->all_link_count; ++roop_count)
+ {
+ (*spider)->result_list.sqls[roop_count].init_calc_mem(262);
+ (*spider)->result_list.sqls[roop_count].set_charset(share->access_charset);
+ }
+ DBUG_RETURN(0);
+}
+
+void spider_free_spider_object_for_share_with_sql_string(
+ ha_spider **spider
+) {
+ DBUG_ENTER("spider_free_spider_object_for_share_with_sql_string");
+ delete [] (*spider)->result_list.sqls;
+ spider_free_spider_object_for_share(spider);
+ DBUG_VOID_RETURN;
+}
+
int spider_create_sts_threads(
SPIDER_THREAD *spider_thread
) {
diff --git a/storage/spider/spd_table.h b/storage/spider/spd_table.h
index 43958ca6e78..925a6f2671a 100644
--- a/storage/spider/spd_table.h
+++ b/storage/spider/spd_table.h
@@ -687,6 +687,16 @@ void spider_free_spider_object_for_share(
ha_spider **spider
);
+int spider_create_spider_object_for_share_with_sql_string(
+ SPIDER_TRX *trx,
+ SPIDER_SHARE *share,
+ ha_spider **spider
+);
+
+void spider_free_spider_object_for_share_with_sql_string(
+ ha_spider **spider
+);
+
int spider_create_sts_threads(
SPIDER_THREAD *spider_thread
);
diff --git a/storage/spider/spd_udf.cc b/storage/spider/spd_udf.cc
index 17498fbd8de..908d88cc798 100644
--- a/storage/spider/spd_udf.cc
+++ b/storage/spider/spd_udf.cc
@@ -1,4 +1,5 @@
-/* Copyright (C) 2009-2014 Kentoku Shiba
+/* Copyright (C) 2009-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -152,4 +153,26 @@ void spider_copy_tables_deinit(
) {
spider_copy_tables_deinit_body(initid);
}
+
+long long spider_flush_rewrite_cache(
+ UDF_INIT *initid,
+ UDF_ARGS *args,
+ char *is_null,
+ char *error
+) {
+ return spider_flush_rewrite_cache_body(error);
+}
+
+my_bool spider_flush_rewrite_cache_init(
+ UDF_INIT *initid,
+ UDF_ARGS *args,
+ char *message
+) {
+ return FALSE;
+}
+
+void spider_flush_rewrite_cache_deinit(
+ UDF_INIT *initid
+) {
+}
}
diff --git a/storage/spider/spd_udf.def b/storage/spider/spd_udf.def
index d0d7d53e3fe..b4469f7a940 100644
--- a/storage/spider/spd_udf.def
+++ b/storage/spider/spd_udf.def
@@ -18,3 +18,6 @@ EXPORTS
spider_copy_tables
spider_copy_tables_init
spider_copy_tables_deinit
+ spider_flush_rewrite_cache
+ spider_flush_rewrite_cache_init
+ spider_flush_rewrite_cache_deinit
diff --git a/storage/spider/spd_udf.h b/storage/spider/spd_udf.h
index 0b20a10393e..84afed35fdf 100644
--- a/storage/spider/spd_udf.h
+++ b/storage/spider/spd_udf.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2009-2014 Kentoku Shiba
+/* Copyright (C) 2009-2019 Kentoku Shiba
+ Copyright (C) 2019 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -77,3 +78,7 @@ my_bool spider_copy_tables_init_body(
void spider_copy_tables_deinit_body(
UDF_INIT *initid
);
+
+long long spider_flush_rewrite_cache_body(
+ char *error
+);