Commit 12615706 authored by Yuchen Pei's avatar Yuchen Pei

MDEV-28856 Add remaining Spider table options

MDEV-27106 added REMOTE_TABLE, REMOTE_DATABASE, REMOTE_SERVER spider
table options. In this commit, we add all remaining options for table
params that are not marked to be deprecated.

All these options are parsed as strings from sql statements and have
string values at the sql level, so that we can determine whether it is
specified by checking its nullness.

The string values are further parsed by Spider into their actual types
in the SPIDER_SHARE, including string list, bounded nonnegative int,
bounded nonnegative int list, nonnegative longlong, boolean, and key
hints. Except for string lists, all other types are validated during
this parsing process.

Most of the options are backward compatible, i.e. they accept any
values that is accepted by there corresponding param parser. The only
exception is the index hint IDX which corresponds to the idxNNN param
name. For example,

'idx000 "f PRIMARY", idx001 "u k1"'

translates to

IDX="f PRIMARY u k1".

We include a test with all options specified, and tests involving
spider table options of all actual types.

Any table options, if present, will cause comments to be ignored with
a warning. The warning can be disabled by setting a new spider
global/session system variable spider_suppress_comment_ignored_warning
to 1.

Another global/session variable introduced is spider_ignore_comments,
which if set to 1, will cause COMMENT and CONNECTION strings to be
ignored unconditionally, whether or not table options are specified.
parent c507678b
......@@ -1333,6 +1333,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
ident
label_ident
sp_decl_ident
ident_options
ident_or_empty
ident_table_alias
ident_sysvar_name
......@@ -1363,6 +1364,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
keyword_cast_type
keyword_ident
keyword_label
keyword_options
keyword_set_special_case
keyword_set_usual_case
keyword_sp_block_section
......@@ -5646,32 +5648,49 @@ create_table_option:
;
engine_defined_option:
IDENT_sys equal TEXT_STRING_sys
ident_options equal TEXT_STRING_sys
{
if (unlikely($3.length > ENGINE_OPTION_MAX_LENGTH))
my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), $1.str));
$$= new (thd->mem_root) engine_option_value($1, $3, true);
MYSQL_YYABORT_UNLESS($$);
}
| IDENT_sys equal ident
| ident_options equal ident
{
if (unlikely($3.length > ENGINE_OPTION_MAX_LENGTH))
my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), $1.str));
$$= new (thd->mem_root) engine_option_value($1, $3, false);
MYSQL_YYABORT_UNLESS($$);
}
| IDENT_sys equal real_ulonglong_num
| ident_options equal real_ulonglong_num
{
$$= new (thd->mem_root) engine_option_value($1, $3, thd->mem_root);
MYSQL_YYABORT_UNLESS($$);
}
| IDENT_sys equal DEFAULT
| ident_options equal DEFAULT
{
$$= new (thd->mem_root) engine_option_value($1);
MYSQL_YYABORT_UNLESS($$);
}
;
ident_options:
IDENT_sys
| keyword_options
{
if (unlikely($$.copy_keyword(thd, &$1)))
MYSQL_YYABORT;
}
;
/*
These keywords are fine for option names.
*/
keyword_options:
READ_ONLY_SYM
| WRAPPER_SYM
;
opt_versioning_option:
/* empty */
| versioning_option
......
#
# MDEV-32486 Assertion `!trx->alloc_line_no[id] || trx->alloc_line_no[id] == line_no' failed in spider_alloc_mem_calc
#
for master_1
for child2
for child3
CREATE TABLE t (c INT) ENGINE=Spider REMOTE_PORT="1";
DROP TABLE t;
CREATE TABLE t (c INT) ENGINE=Spider COMMENT="WRAPPER 'mysql', SERVER 's',MONITORING_KIND '1'";
ERROR HY000: The foreign server name you are trying to reference does not exist. Data source error: s
CREATE TABLE t (c INT) ENGINE=Spider COMMENT="WRAPPER 'mysql',SRV 's',MONITORING_KIND '2'";
ERROR HY000: The foreign server name you are trying to reference does not exist. Data source error: s
CREATE TABLE t (c INT) ENGINE=Spider REMOTE_PORT="1";
drop table t;
for master_1
for child2
for child3
#
# end of test mdev_32486
#
MDEV-31524 Spider variables that double as table params overriding mechanism is buggy
Testing spider sysvar and table params / options, including default values and overriding mechanisms
for master_1
for child2
for child3
SET @old_spider_read_only_mode = @@session.spider_read_only_mode;
CREATE SERVER $srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
CREATE SERVER srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
# Cases where table params/options are not set
set session spider_read_only_mode = default;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv_mdev_31524",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
/* 1 */ insert into t1 values (42);
drop table t1, t2;
set session spider_read_only_mode = 1;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv_mdev_31524",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
/* 2 */ insert into t1 values (42);
ERROR HY000: Table 'test.t1' is read only
drop table t1, t2;
......@@ -21,30 +22,72 @@ set session spider_read_only_mode = -1;
Warnings:
Warning 138 The option value -1 (fallback to default) is deprecated and will be removed in a future release
create table t2 (c int);
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv_mdev_31524",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
/* 3 */ insert into t1 values (42);
drop table t1, t2;
# Cases where table params are set
SET session spider_read_only_mode = default;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "1", WRAPPER "mysql", srv "srv_mdev_31524",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "1", WRAPPER "mysql", srv "srv",TABLE "t2"';
/* 4 */ insert into t1 values (42);
ERROR HY000: Table 'test.t1' is read only
drop table t1, t2;
set session spider_read_only_mode = 1;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "0", WRAPPER "mysql", srv "srv_mdev_31524",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "0", WRAPPER "mysql", srv "srv",TABLE "t2"';
/* 5 */ insert into t1 values (42);
drop table t1, t2;
SET session spider_read_only_mode = -1;
Warnings:
Warning 138 The option value -1 (fallback to default) is deprecated and will be removed in a future release
create table t2 (c int);
create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "1", WRAPPER "mysql", srv "srv_mdev_31524",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "1", WRAPPER "mysql", srv "",TABLE "t2"';
/* 6 */ insert into t1 values (42);
ERROR HY000: Table 'test.t1' is read only
drop table t1, t2;
drop server srv_mdev_31524;
# Cases where table options are set
SET session spider_read_only_mode = default;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider REMOTE_SERVER=srv REMOTE_TABLE=t2 READ_ONLY=1 WRAPPER=mysql;
/* 7 */ insert into t1 values (42);
ERROR HY000: Table 'test.t1' is read only
drop table t1, t2;
set session spider_read_only_mode = 1;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider READ_ONLY=0 REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
/* 8 */ insert into t1 values (42);
drop table t1, t2;
SET session spider_read_only_mode = -1;
Warnings:
Warning 138 The option value -1 (fallback to default) is deprecated and will be removed in a future release
create table t2 (c int);
create table t1 (c int) ENGINE=Spider READ_ONLY=1 REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
/* 9 */ insert into t1 values (42);
ERROR HY000: Table 'test.t1' is read only
drop table t1, t2;
SET session spider_read_only_mode = 0;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider READ_ONLY=default REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
/* 10 */ insert into t1 values (42);
drop table t1, t2;
SET session spider_read_only_mode = 1;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider READ_ONLY=default REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
/* 11 */ insert into t1 values (42);
ERROR HY000: Table 'test.t1' is read only
drop table t1, t2;
SET session spider_read_only_mode = -1;
Warnings:
Warning 138 The option value -1 (fallback to default) is deprecated and will be removed in a future release
create table t2 (c int);
create table t1 (c int) ENGINE=Spider READ_ONLY=default REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
/* 12 */ insert into t1 values (42);
drop table t1, t2;
drop server srv;
SET session spider_read_only_mode = @old_spider_read_only_mode;
for master_1
for child2
for child3
#
# End of test sysvar_params
#
--echo #
--echo # MDEV-32486 Assertion `!trx->alloc_line_no[id] || trx->alloc_line_no[id] == line_no' failed in spider_alloc_mem_calc
--echo #
--disable_query_log
--disable_result_log
--source ../../t/test_init.inc
--enable_result_log
--enable_query_log
CREATE TABLE t (c INT) ENGINE=Spider REMOTE_PORT="1";
DROP TABLE t;
--error ER_FOREIGN_SERVER_DOESNT_EXIST
CREATE TABLE t (c INT) ENGINE=Spider COMMENT="WRAPPER 'mysql', SERVER 's',MONITORING_KIND '1'";
--error ER_FOREIGN_SERVER_DOESNT_EXIST
CREATE TABLE t (c INT) ENGINE=Spider COMMENT="WRAPPER 'mysql',SRV 's',MONITORING_KIND '2'";
CREATE TABLE t (c INT) ENGINE=Spider REMOTE_PORT="1";
drop table t;
--disable_query_log
--disable_result_log
--source ../../t/test_deinit.inc
--enable_result_log
--enable_query_log
--echo #
--echo # end of test mdev_32486
--echo #
--echo
--echo MDEV-31524 Spider variables that double as table params overriding mechanism is buggy
--echo Testing spider sysvar and table params / options, including default values and overriding mechanisms
--echo
--disable_query_log
......@@ -8,62 +8,115 @@
--enable_result_log
--enable_query_log
--let $srv=srv_mdev_31524
# For tests covering overriding mechanism between params and options,
# including a mix of different levels (partition vs table), see
# spider/features.engine_defined_attributes.
SET @old_spider_read_only_mode = @@session.spider_read_only_mode;
evalp CREATE SERVER $srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
evalp CREATE SERVER srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
# when the user does not set var nor the table option, the default
--echo # Cases where table params/options are not set
# when the user does not set var nor the table param/option, the default
# value (0 in this case) takes effect.
set session spider_read_only_mode = default;
create table t2 (c int);
eval create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "$srv",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
/* 1 */ insert into t1 values (42);
drop table t1, t2;
# when the user sets var but not the table option, the var should be
# take effect.
# when the user sets var but not the table param/option, the var
# should be take effect.
set session spider_read_only_mode = 1;
create table t2 (c int);
eval create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "$srv",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
--error 12518
/* 2 */ insert into t1 values (42);
drop table t1, t2;
# when the user sets var to -1 and does not set the table option, the
# default value takes effect.
# When the user sets a sysvar to -1, it falls back to default
set session spider_read_only_mode = -1;
create table t2 (c int);
eval create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "$srv",TABLE "t2"';
create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
/* 3 */ insert into t1 values (42);
drop table t1, t2;
--echo # Cases where table params are set
# when the user does not set the var, but sets the table param, the
# table param takes effect
SET session spider_read_only_mode = default;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "1", WRAPPER "mysql", srv "srv",TABLE "t2"';
--error 12518
/* 4 */ insert into t1 values (42);
drop table t1, t2;
# when the user sets both var and table param, the table param takes
# precedence
set session spider_read_only_mode = 1;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "0", WRAPPER "mysql", srv "srv",TABLE "t2"';
/* 5 */ insert into t1 values (42);
drop table t1, t2;
# when the user sets the var to -1 and sets the table param, the
# table param takes effect
SET session spider_read_only_mode = -1;
create table t2 (c int);
eval create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "1", WRAPPER "mysql", srv "$srv",TABLE "t2"';
--error 12518
/* 6 */ insert into t1 values (42);
drop table t1, t2;
--echo # Cases where table options are set
# when the user does not set the var, but sets the table option, the
# table option should take effect
SET session spider_read_only_mode = default;
create table t2 (c int);
eval create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "1", WRAPPER "mysql", srv "$srv",TABLE "t2"';
create table t1 (c int) ENGINE=Spider REMOTE_SERVER=srv REMOTE_TABLE=t2 READ_ONLY=1 WRAPPER=mysql;
--error 12518
/* 4 */ insert into t1 values (42);
/* 7 */ insert into t1 values (42);
drop table t1, t2;
# when the user sets both var and table option, the table option
# should take precedence
set session spider_read_only_mode = 1;
create table t2 (c int);
eval create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "0", WRAPPER "mysql", srv "$srv",TABLE "t2"';
/* 5 */ insert into t1 values (42);
create table t1 (c int) ENGINE=Spider READ_ONLY=0 REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
/* 8 */ insert into t1 values (42);
drop table t1, t2;
# when the user sets the var to -1 and sets the table option, the
# table option should take effect
# table option takes effect
SET session spider_read_only_mode = -1;
create table t2 (c int);
eval create table t1 (c int) ENGINE=Spider COMMENT='read_only_mode "1", WRAPPER "mysql", srv "$srv",TABLE "t2"';
create table t1 (c int) ENGINE=Spider READ_ONLY=1 REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
--error 12518
/* 6 */ insert into t1 values (42);
/* 9 */ insert into t1 values (42);
drop table t1, t2;
# the default table option falls back to sysvar
SET session spider_read_only_mode = 0;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider READ_ONLY=default REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
/* 10 */ insert into t1 values (42);
drop table t1, t2;
eval drop server $srv;
# the default table option falls back to sysvar
SET session spider_read_only_mode = 1;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider READ_ONLY=default REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
--error 12518
/* 11 */ insert into t1 values (42);
drop table t1, t2;
# the default table option falls back to sysvar
SET session spider_read_only_mode = -1;
create table t2 (c int);
create table t1 (c int) ENGINE=Spider READ_ONLY=default REMOTE_SERVER=srv REMOTE_TABLE=t2 WRAPPER=mysql;
/* 12 */ insert into t1 values (42);
drop table t1, t2;
drop server srv;
SET session spider_read_only_mode = @old_spider_read_only_mode;
--disable_query_log
......@@ -71,3 +124,7 @@ SET session spider_read_only_mode = @old_spider_read_only_mode;
--source ../../t/test_deinit.inc
--enable_result_log
--enable_query_log
--echo #
--echo # End of test sysvar_params
--echo #
......@@ -26,6 +26,270 @@ a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
# Every option all at once
connection master_1;
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
c1 INT,
c2 INT,
PRIMARY KEY(a), UNIQUE KEY(c1), KEY(c2)
) ENGINE=Spider DEFAULT CHARSET=utf8
AUTO_INCREMENT_MODE=1
BGS_MODE=1
BULK_SIZE=41
BULK_UPDATE_SIZE=42
CONNECT_TIMEOUT="43 44"
REMOTE_DATABASE=foo63
DEFAULT_FILE=foo44
DEFAULT_GROUP=foo45
DELETE_ALL_ROWS_TYPE=0
DRIVER=foo47
DSN=foo48
FILEDSN=foo49
FORCE_BULK_DELETE=1
FORCE_BULK_UPDATE=NO
REMOTE_HOST=foo52
IDX="f c1 ig PRIMARY u c2"
MULTI_SPLIT_READ=54
NET_READ_TIMEOUT=" 55 56"
NET_WRITE_TIMEOUT=" 56 "
REMOTE_PASSWORD=foo57
REMOTE_PORT="234 837 "
PRIORITY=59
QUERY_CACHE=2
QUERY_CACHE_SYNC=3
READ_ONLY=1
REMOTE_SERVER=s_2_1
SKIP_PARALLEL_SEARCH=2
REMOTE_SOCKET=foo67
SSL_CAPATH=foo68
SSL_CA=foo69
SSL_CERT=foo70
SSL_CIPHER=foo71
SSL_KEY=foo72
SSL_VSC=1
REMOTE_TABLE=foo65
TABLE_COUNT_MODE=3
REMOTE_USERNAME=foo75
USE_PUSHDOWN_UDF=YES
WRAPPER=mysql;
Warnings:
Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
drop table tbl_a;
# different option types
## bool
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=1;
show create table tbl_a;
Table Create Table
tbl_a CREATE TABLE `tbl_a` (
`a` int(11) NOT NULL,
`b` varchar(255) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=SPIDER DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci `REMOTE_SERVER`='s_2_1' `REMOTE_TABLE`='tbl_a' `READ_ONLY`=1
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
ERROR HY000: Table 'auto_test_local.tbl_a' is read only
SELECT * FROM tbl_a;
a b
DROP TABLE tbl_a;
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
READ_ONLY=1k;
ERROR HY000: The table option READ_ONLY=1k is invalid
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
READ_ONLY=k1;
ERROR HY000: The table option READ_ONLY=k1 is invalid
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
READ_ONLY=2;
ERROR HY000: The table option READ_ONLY=2 is invalid
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
READ_ONLY=NOPE;
ERROR HY000: The table option READ_ONLY=NOPE is invalid
## bounded_nat
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER=s_2_1 REMOTE_TABLE=tbl_a QUERY_CACHE=2;
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
connection child2_1;
SET @old_general_log = @@global.general_log;
SET @old_log_output = @@global.log_output;
SET global general_log = 1;
SET global log_output = "TABLE";
connection master_1;
SELECT * FROM tbl_a;
a b
1 aaa
2 bbb
3 ccc
4 ddd
connection child2_1;
select argument from mysql.general_log where argument like "select sql_no_cache%" limit 1;
argument
select sql_no_cache t0.`a` `a`,t0.`b` `b` from `auto_test_remote`.`tbl_a` t0
SET global general_log = @old_general_log;
SET global log_output = @old_log_output;
truncate table mysql.general_log;
connection master_1;
DELETE FROM tbl_a;
DROP TABLE tbl_a;
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
AUTO_INCREMENT_MODE=1k;
ERROR HY000: The table option AUTO_INCREMENT_MODE=1k is invalid
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
AUTO_INCREMENT_MODE=k1;
ERROR HY000: The table option AUTO_INCREMENT_MODE=k1 is invalid
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
AUTO_INCREMENT_MODE=4;
ERROR HY000: The table option AUTO_INCREMENT_MODE=4 is invalid
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
AUTO_INCREMENT_MODE=-1;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-1' at line 2
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
AUTO_INCREMENT_MODE="-1";
ERROR HY000: The table option AUTO_INCREMENT_MODE=-1 is invalid
## bounded_nat_list
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_PORT="123 456";
Warnings:
Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
select db_name, table_name, port from mysql.spider_tables;
db_name table_name port
auto_test_local tbl_a 123
auto_test_local tbl_a 456
drop table tbl_a;
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_PORT="123 999a";
ERROR HY000: The table option REMOTE_PORT=123 999a is invalid
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_PORT="123 a999";
ERROR HY000: The table option REMOTE_PORT=123 a999 is invalid
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_PORT="123 99999";
ERROR HY000: The table option REMOTE_PORT=123 99999 is invalid
## nat_longlong
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
PRIORITY=1234567890123456789;
select db_name, table_name, priority from mysql.spider_tables;
db_name table_name priority
auto_test_local tbl_a 1234567890123456789
drop table tbl_a;
## hint
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER=s_2_1 REMOTE_TABLE=tbl_a IDX="f PRIMARY";
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
connection child2_1;
SET @old_general_log = @@global.general_log;
SET @old_log_output = @@global.log_output;
SET global general_log = 1;
SET global log_output = "TABLE";
connection master_1;
SELECT max(a) FROM tbl_a;
max(a)
4
connection child2_1;
select argument from mysql.general_log
where argument like "select `a` %force index (primary)%" limit 1;
argument
select `a` from `auto_test_remote`.`tbl_a` FORCE INDEX (PRIMARY) order by `a` desc limit 1
SET global general_log = @old_general_log;
SET global log_output = @old_log_output;
truncate table mysql.general_log;
connection master_1;
DELETE FROM tbl_a;
DROP TABLE tbl_a;
CREATE TABLE tbl_a (a1 INT, a2 INT, UNIQUE KEY (a2)) ENGINE=Spider DEFAULT CHARSET=utf8
IDX="f a1 u c";
ERROR HY000: The table option IDX=f a1 u c is invalid
CREATE TABLE tbl_a (a1 INT, a2 INT, UNIQUE KEY (a2)) ENGINE=Spider DEFAULT CHARSET=utf8
IDX="f a2 u a1";
ERROR HY000: The table option IDX=f a2 u a1 is invalid
CREATE TABLE tbl_a (a INT, b INT, UNIQUE KEY (b)) ENGINE=Spider DEFAULT CHARSET=utf8
IDX="f b f";
ERROR HY000: The table option IDX=f b f is invalid
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
c1 INT,
c2 INT,
PRIMARY KEY(a), UNIQUE KEY(c1), KEY(c2)
) ENGINE=Spider DEFAULT CHARSET=utf8
IDX=" f c2 ig c1 u PRIMARY ";
drop table tbl_a;
# Misc cases
set session spider_suppress_comment_ignored_warning=1;
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_TABLE=t COMMENT="My favourite spider table";
drop table tbl_a;
set session spider_suppress_comment_ignored_warning=0;
CREATE TABLE tbl_a (a INT) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_TABLE=t CONNECTION="srv s_2_1";
Warnings:
Warning 12529 The table or partition COMMENT or CONNECTION string 'srv s_2_1' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
drop table tbl_a;
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=0 READ_ONLY=1;
show create table tbl_a;
Table Create Table
tbl_a CREATE TABLE `tbl_a` (
`a` int(11) NOT NULL,
`b` varchar(255) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=SPIDER DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci `REMOTE_SERVER`='s_2_1' `REMOTE_TABLE`='tbl_a' `READ_ONLY`=1
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
ERROR HY000: Table 'auto_test_local.tbl_a' is read only
SELECT * FROM tbl_a;
a b
DROP TABLE tbl_a;
connection master_1;
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=1;
show create table tbl_a;
Table Create Table
tbl_a CREATE TABLE `tbl_a` (
`a` int(11) NOT NULL,
`b` varchar(255) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=SPIDER DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci `REMOTE_SERVER`='s_2_1' `REMOTE_TABLE`='tbl_a' `READ_ONLY`=1
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
ERROR HY000: Table 'auto_test_local.tbl_a' is read only
ALTER TABLE tbl_a READ_ONLY=0;
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
show create table tbl_a;
Table Create Table
tbl_a CREATE TABLE `tbl_a` (
`a` int(11) NOT NULL,
`b` varchar(255) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=SPIDER DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci `REMOTE_SERVER`='s_2_1' `REMOTE_TABLE`='tbl_a' `READ_ONLY`=0
SELECT * FROM tbl_a;
a b
1 aaa
2 bbb
3 ccc
4 ddd
DELETE FROM tbl_a;
DROP TABLE tbl_a;
# Single data node
connection master_1;
CREATE TABLE tbl_a (
......@@ -51,6 +315,8 @@ b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER="s_2_1 s_2_2" REMOTE_TABLE="tbl_a";
Warnings:
Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
SELECT * FROM tbl_a;
a b
......@@ -95,6 +361,14 @@ a b
4 ddd
DELETE FROM tbl_a;
DROP TABLE tbl_a;
connection master_1;
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=maybe;
ERROR HY000: The table option READ_ONLY=maybe is invalid
# Multiple data nodes with table options + partition options
connection master_1;
CREATE TABLE tbl_a (
......@@ -122,7 +396,7 @@ a b
connection master_1;
DELETE FROM tbl_a;
DROP TABLE tbl_a;
# COMMENT + engine-defined option
# COMMENT + engine-defined option, COMMENT ignored, invalid (missing table name)
connection master_1;
CREATE TABLE tbl_a (
a INT,
......@@ -134,81 +408,101 @@ PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3) COMMENT='srv "s_2_1"',
PARTITION p2 VALUES LESS THAN MAXVALUE REMOTE_SERVER="s_2_2"
);
Warnings:
Warning 12529 The table or partition COMMENT or CONNECTION string 'tbl "tbl_a"' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
SELECT * FROM tbl_a;
a b
1 aaa
2 bbb
3 ccc
4 ddd
connection child2_1;
SELECT * FROM tbl_a;
a b
1 aaa
2 bbb
connection master_1;
DELETE FROM tbl_a;
ERROR HY000: Remote table 'auto_test_remote2.tbl_a#P#p2' is not found
DROP TABLE tbl_a;
# COMMENT + engine-defined option (invalid)
connection master_1;
set session spider_ignore_comments=1;
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" COMMENT='tbl "tbl_b"';
ERROR HY000: Can't create table `auto_test_local`.`tbl_a` (errno: 12501 "Unknown error 12501")
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
COMMENT='srv "s_2_1"' REMOTE_TABLE="tbl_a"
COMMENT='tbl "tbl_a"'
PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3),
PARTITION p1 VALUES LESS THAN (3) COMMENT='srv "s_2_1"',
PARTITION p2 VALUES LESS THAN MAXVALUE REMOTE_SERVER="s_2_2"
);
ERROR HY000: Can't create table `auto_test_local`.`tbl_a` (errno: 12501 "Unknown error 12501")
# Various combinations of COMMENTs and options
Warnings:
Warning 12529 The table or partition COMMENT or CONNECTION string 'srv "s_2_1"' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
Warning 12529 The table or partition COMMENT or CONNECTION string 'tbl "tbl_a"' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
Warning 12529 The table or partition COMMENT or CONNECTION string 'tbl "tbl_a"' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
ERROR HY000: Unable to connect to foreign data source: localhost
DROP TABLE tbl_a;
set session spider_ignore_comments=0;
# COMMENT + engine-defined option, COMMENT ignored, ok
connection master_1;
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_SERVER="s_2_1" REMOTE_DATABASE="auto_test_remote" REMOTE_TABLE="tbl_a";
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a"
PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3) COMMENT='srv "s_2_2"',
PARTITION p2 VALUES LESS THAN MAXVALUE REMOTE_SERVER="s_2_2"
);
Warnings:
Warning 12529 The table or partition COMMENT or CONNECTION string 'srv "s_2_2"' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
Warnings:
Warning 12529 The table or partition COMMENT or CONNECTION string 'srv "s_2_2"' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
connection child2_1;
SELECT * FROM tbl_a;
a b
1 aaa
2 bbb
connection child2_2;
SELECT * FROM tbl_a;
a b
3 ccc
4 ddd
connection master_1;
DELETE FROM tbl_a;
DROP TABLE tbl_a;
# COMMENT + engine-defined option, COMMENT ignored, ok
connection master_1;
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
REMOTE_TABLE="tbl_a"
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=YES
PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3)
REMOTE_SERVER="s_2_1" COMMENT='database "auto_test_remote"',
PARTITION p2 VALUES LESS THAN MAXVALUE
REMOTE_SERVER="s_2_2" REMOTE_DATABASE="auto_test_remote2"
PARTITION p1 VALUES LESS THAN (3) COMMENT='srv "s_2_2" read_only_mode "0"',
PARTITION p2 VALUES LESS THAN MAXVALUE REMOTE_SERVER="s_2_2" READ_ONLY=NO
);
Warnings:
Warning 12529 The table or partition COMMENT or CONNECTION string 'srv "s_2_2" read_only_mode "0"' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb");
ERROR HY000: Table 'auto_test_local.tbl_a' is read only
INSERT INTO tbl_a VALUES (3, "ccc"), (4, "ddd");
connection child2_1;
SELECT * FROM tbl_a;
a b
connection child2_2;
SELECT * FROM tbl_a;
a b
3 ccc
4 ddd
DELETE FROM tbl_a;
connection master_1;
DROP TABLE tbl_a;
connection master_1;
CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) ENGINE=Spider DEFAULT CHARSET=utf8
COMMENT='tbl "tbl_a"'
PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3)
REMOTE_SERVER="s_2_1" REMOTE_DATABASE="auto_test_remote",
PARTITION p2 VALUES LESS THAN MAXVALUE
REMOTE_SERVER="s_2_2" REMOTE_DATABASE="auto_test_remote2"
);
SELECT * FROM tbl_a;
a b
DROP TABLE tbl_a;
REMOTE_SERVER="s_2_1" COMMENT='tbl "tbl_b"' REMOTE_TABLE="tbl_a";
Warnings:
Warning 12529 The table or partition COMMENT or CONNECTION string 'tbl "tbl_b"' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified
select table_name, server, tgt_table_name from mysql.spider_tables;
table_name server tgt_table_name
tbl_a s_2_1 tbl_a
drop table tbl_a;
CREATE TABLE tbl_a (
a INT
) ENGINE=Spider DEFAULT CHARSET=utf8
......@@ -234,3 +528,6 @@ child2_1
child2_2
child2_3
for child3
#
# end of test engine_defined_attributes
#
......@@ -30,6 +30,266 @@ eval CREATE TABLE tbl_a (
PRIMARY KEY(a)
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
--echo # Every option all at once
--connection master_1
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
c1 INT,
c2 INT,
PRIMARY KEY(a), UNIQUE KEY(c1), KEY(c2)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
AUTO_INCREMENT_MODE=1
BGS_MODE=1
BULK_SIZE=41
BULK_UPDATE_SIZE=42
CONNECT_TIMEOUT="43 44"
REMOTE_DATABASE=foo63
DEFAULT_FILE=foo44
DEFAULT_GROUP=foo45
DELETE_ALL_ROWS_TYPE=0
DRIVER=foo47
DSN=foo48
FILEDSN=foo49
FORCE_BULK_DELETE=1
FORCE_BULK_UPDATE=NO
REMOTE_HOST=foo52
IDX="f c1 ig PRIMARY u c2"
MULTI_SPLIT_READ=54
NET_READ_TIMEOUT=" 55 56"
NET_WRITE_TIMEOUT=" 56 "
REMOTE_PASSWORD=foo57
REMOTE_PORT="234 837 "
PRIORITY=59
QUERY_CACHE=2
QUERY_CACHE_SYNC=3
READ_ONLY=1
REMOTE_SERVER=s_2_1
SKIP_PARALLEL_SEARCH=2
REMOTE_SOCKET=foo67
SSL_CAPATH=foo68
SSL_CA=foo69
SSL_CERT=foo70
SSL_CIPHER=foo71
SSL_KEY=foo72
SSL_VSC=1
REMOTE_TABLE=foo65
TABLE_COUNT_MODE=3
REMOTE_USERNAME=foo75
USE_PUSHDOWN_UDF=YES
WRAPPER=mysql;
drop table tbl_a;
--echo # different option types
--echo ## bool
# test that it has expected effects
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=1;
show create table tbl_a;
--error 12518
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
SELECT * FROM tbl_a;
DROP TABLE tbl_a;
# invalid bool
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
READ_ONLY=1k;
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
READ_ONLY=k1;
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
READ_ONLY=2;
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
READ_ONLY=NOPE;
--echo ## bounded_nat
# test that it has expected effects
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER=s_2_1 REMOTE_TABLE=tbl_a QUERY_CACHE=2;
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
--connection child2_1
SET @old_general_log = @@global.general_log;
SET @old_log_output = @@global.log_output;
SET global general_log = 1;
SET global log_output = "TABLE";
--connection master_1
SELECT * FROM tbl_a;
--connection child2_1
select argument from mysql.general_log where argument like "select sql_no_cache%" limit 1;
SET global general_log = @old_general_log;
SET global log_output = @old_log_output;
truncate table mysql.general_log;
--connection master_1
DELETE FROM tbl_a;
DROP TABLE tbl_a;
# invalid nat
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
AUTO_INCREMENT_MODE=1k;
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
AUTO_INCREMENT_MODE=k1;
# out of bound nat
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
AUTO_INCREMENT_MODE=4;
--error ER_PARSE_ERROR
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
AUTO_INCREMENT_MODE=-1;
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
AUTO_INCREMENT_MODE="-1";
--echo ## bounded_nat_list
# test that it has expected effect
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_PORT="123 456";
select db_name, table_name, port from mysql.spider_tables;
drop table tbl_a;
# invalid nat list
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_PORT="123 999a";
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_PORT="123 a999";
# out of bound nat list
--error 12528
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_PORT="123 99999";
--echo ## nat_longlong
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
PRIORITY=1234567890123456789;
select db_name, table_name, priority from mysql.spider_tables;
drop table tbl_a;
--echo ## hint
# test that it has expected effects
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER=s_2_1 REMOTE_TABLE=tbl_a IDX="f PRIMARY";
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
--connection child2_1
SET @old_general_log = @@global.general_log;
SET @old_log_output = @@global.log_output;
SET global general_log = 1;
SET global log_output = "TABLE";
--connection master_1
SELECT max(a) FROM tbl_a;
--connection child2_1
select argument from mysql.general_log
where argument like "select `a` %force index (primary)%" limit 1;
# select argument from mysql.general_log;
SET global general_log = @old_general_log;
SET global log_output = @old_log_output;
truncate table mysql.general_log;
--connection master_1
DELETE FROM tbl_a;
DROP TABLE tbl_a;
# invalid key hint - not a col
--error 12528
eval CREATE TABLE tbl_a (a1 INT, a2 INT, UNIQUE KEY (a2)) $MASTER_1_ENGINE $MASTER_1_CHARSET
IDX="f a1 u c";
# invalid key hint - not a key
--error 12528
eval CREATE TABLE tbl_a (a1 INT, a2 INT, UNIQUE KEY (a2)) $MASTER_1_ENGINE $MASTER_1_CHARSET
IDX="f a2 u a1";
# invalid key hint - wrong format
--error 12528
eval CREATE TABLE tbl_a (a INT, b INT, UNIQUE KEY (b)) $MASTER_1_ENGINE $MASTER_1_CHARSET
IDX="f b f";
# key hint - spaces are fine
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
c1 INT,
c2 INT,
PRIMARY KEY(a), UNIQUE KEY(c1), KEY(c2)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
IDX=" f c2 ig c1 u PRIMARY ";
drop table tbl_a;
--echo # Misc cases
# comments can be used as comments if options are specified
set session spider_suppress_comment_ignored_warning=1;
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_TABLE=t COMMENT="My favourite spider table";
drop table tbl_a;
set session spider_suppress_comment_ignored_warning=0;
# CONNECTION string is ignored if options are specified
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_TABLE=t CONNECTION="srv s_2_1";
drop table tbl_a;
# same option specified twice - last appearance wins
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=0 READ_ONLY=1;
show create table tbl_a;
--error 12518
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
SELECT * FROM tbl_a;
DROP TABLE tbl_a;
# update option with alter table
--connection master_1
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=1;
show create table tbl_a;
--error 12518
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
ALTER TABLE tbl_a READ_ONLY=0;
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
show create table tbl_a;
SELECT * FROM tbl_a;
DELETE FROM tbl_a;
DROP TABLE tbl_a;
--echo # Single data node
--connection master_1
eval CREATE TABLE tbl_a (
......@@ -53,7 +313,6 @@ eval CREATE TABLE tbl_a (
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER="s_2_1 s_2_2" REMOTE_TABLE="tbl_a";
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
SELECT * FROM tbl_a;
......@@ -85,6 +344,16 @@ SELECT * FROM tbl_a;
DELETE FROM tbl_a;
DROP TABLE tbl_a;
# invalid option value
--connection master_1
--error 12528
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=maybe;
--echo # Multiple data nodes with table options + partition options
--connection master_1
eval CREATE TABLE tbl_a (
......@@ -108,7 +377,10 @@ SELECT * FROM tbl_a;
DELETE FROM tbl_a;
DROP TABLE tbl_a;
--echo # COMMENT + engine-defined option
--echo # COMMENT + engine-defined option, COMMENT ignored, invalid (missing table name)
# In this case, the first partition has its comment parsed, because
# it does not set any options. And the second partition only has the
# option parsed.
--connection master_1
eval CREATE TABLE tbl_a (
a INT,
......@@ -121,80 +393,102 @@ PARTITION BY RANGE (a) (
PARTITION p2 VALUES LESS THAN MAXVALUE REMOTE_SERVER="s_2_2"
);
--error 12702
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
SELECT * FROM tbl_a;
--connection child2_1
SELECT * FROM tbl_a;
--connection master_1
DELETE FROM tbl_a;
# FIXME(MDEV-32097): the following delete statement, if uncommented,
# causes an assertion failure
# DELETE FROM tbl_a;
DROP TABLE tbl_a;
--echo # COMMENT + engine-defined option (invalid)
--connection master_1
--replace_result error: error
--error ER_CANT_CREATE_TABLE
# Let us set spider_ignore_comments to true, so that it won't
# accidentally parse comments when table options are present
set session spider_ignore_comments=1;
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" COMMENT='tbl "tbl_b"';
COMMENT='tbl "tbl_a"'
PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3) COMMENT='srv "s_2_1"',
PARTITION p2 VALUES LESS THAN MAXVALUE REMOTE_SERVER="s_2_2"
);
--error 1429
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
--replace_result error: error
--error ER_CANT_CREATE_TABLE
DROP TABLE tbl_a;
set session spider_ignore_comments=0;
--echo # COMMENT + engine-defined option, COMMENT ignored, ok
--connection master_1
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
COMMENT='srv "s_2_1"' REMOTE_TABLE="tbl_a"
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a"
PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3),
PARTITION p1 VALUES LESS THAN (3) COMMENT='srv "s_2_2"',
PARTITION p2 VALUES LESS THAN MAXVALUE REMOTE_SERVER="s_2_2"
);
--echo # Various combinations of COMMENTs and options
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_SERVER="s_2_1" REMOTE_DATABASE="auto_test_remote" REMOTE_TABLE="tbl_a";
# --ps-protocol eats a warning here
--disable_ps_protocol
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb"), (3, "ccc"), (4, "ddd");
--enable_ps_protocol
--connection child2_1
SELECT * FROM tbl_a;
--connection child2_2
SELECT * FROM tbl_a;
--connection master_1
DELETE FROM tbl_a;
DROP TABLE tbl_a;
--echo # COMMENT + engine-defined option, COMMENT ignored, ok
--connection master_1
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
REMOTE_TABLE="tbl_a"
REMOTE_SERVER="s_2_1" REMOTE_TABLE="tbl_a" READ_ONLY=YES
PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3)
REMOTE_SERVER="s_2_1" COMMENT='database "auto_test_remote"',
PARTITION p2 VALUES LESS THAN MAXVALUE
REMOTE_SERVER="s_2_2" REMOTE_DATABASE="auto_test_remote2"
PARTITION p1 VALUES LESS THAN (3) COMMENT='srv "s_2_2" read_only_mode "0"',
PARTITION p2 VALUES LESS THAN MAXVALUE REMOTE_SERVER="s_2_2" READ_ONLY=NO
);
--error 12518
INSERT INTO tbl_a VALUES (1, "aaa"), (2, "bbb");
INSERT INTO tbl_a VALUES (3, "ccc"), (4, "ddd");
--connection child2_1
SELECT * FROM tbl_a;
--connection child2_2
SELECT * FROM tbl_a;
DELETE FROM tbl_a;
--connection master_1
# FIXME: the following delete statement, if uncommented, causes an
# assertion failure
#DELETE FROM tbl_a;
DROP TABLE tbl_a;
--connection master_1
eval CREATE TABLE tbl_a (
a INT,
b VARCHAR(255),
PRIMARY KEY(a)
) $MASTER_1_ENGINE $MASTER_1_CHARSET
COMMENT='tbl "tbl_a"'
PARTITION BY RANGE (a) (
PARTITION p1 VALUES LESS THAN (3)
REMOTE_SERVER="s_2_1" REMOTE_DATABASE="auto_test_remote",
PARTITION p2 VALUES LESS THAN MAXVALUE
REMOTE_SERVER="s_2_2" REMOTE_DATABASE="auto_test_remote2"
);
SELECT * FROM tbl_a;
DROP TABLE tbl_a;
REMOTE_SERVER="s_2_1" COMMENT='tbl "tbl_b"' REMOTE_TABLE="tbl_a";
select table_name, server, tgt_table_name from mysql.spider_tables;
drop table tbl_a;
eval CREATE TABLE tbl_a (
a INT
......@@ -225,3 +519,7 @@ DROP DATABASE auto_test_local;
--source ../t/test_deinit.inc
--enable_result_log
--enable_query_log
--echo #
--echo # end of test engine_defined_attributes
--echo #
......@@ -70,6 +70,10 @@
#define ER_SPIDER_INVALID_CONNECT_INFO_START_WITH_NUM_STR "The connect info '%-.64s' for %s cannot start with number"
#define ER_SPIDER_INVALID_CONNECT_INFO_SAME_NUM 12527
#define ER_SPIDER_INVALID_CONNECT_INFO_SAME_STR "The connect info '%-.64s' for %s cannot use same name in same table"
#define ER_SPIDER_INVALID_TABLE_OPTION_NUM 12528
#define ER_SPIDER_INVALID_TABLE_OPTION_STR "The table option %s=%s is invalid"
#define ER_SPIDER_COMMENT_CONNECTION_IGNORED_BY_TABLE_OPTIONS_NUM 12529
#define ER_SPIDER_COMMENT_CONNECTION_IGNORED_BY_TABLE_OPTIONS_STR "The table or partition COMMENT or CONNECTION string '%s' is not used as connection info because spider_ignore_comment is 1 or at least one table option has been specified"
#define ER_SPIDER_CANT_USE_BOTH_INNER_XA_AND_SNAPSHOT_NUM 12601
#define ER_SPIDER_CANT_USE_BOTH_INNER_XA_AND_SNAPSHOT_STR "Can't use both spider_use_consistent_snapshot = 1 and spider_internal_xa = 1"
......
......@@ -2378,6 +2378,30 @@ static MYSQL_THDVAR_BOOL(
SPIDER_THDVAR_VALUE_FUNC(bool, disable_group_by_handler)
static MYSQL_THDVAR_BOOL(
suppress_comment_ignored_warning,
PLUGIN_VAR_RQCMDARG,
"Whether to suppress warnings that table COMMENT or CONNECTION strings "
"are ignored due to specified table options",
NULL,
NULL,
FALSE
);
SPIDER_THDVAR_VALUE_FUNC(bool, suppress_comment_ignored_warning)
static MYSQL_THDVAR_BOOL(
ignore_comments,
PLUGIN_VAR_RQCMDARG,
"Whether to unconditionally ignore COMMENT and CONNECTION strings "
"without checking whether table options are specified",
NULL,
NULL,
FALSE
);
SPIDER_THDVAR_VALUE_FUNC(bool, ignore_comments)
static struct st_mysql_storage_engine spider_storage_engine =
{ MYSQL_HANDLERTON_INTERFACE_VERSION };
......@@ -2494,6 +2518,8 @@ static struct st_mysql_sys_var* spider_system_variables[] = {
MYSQL_SYSVAR(strict_group_by),
MYSQL_SYSVAR(direct_aggregate),
MYSQL_SYSVAR(disable_group_by_handler),
MYSQL_SYSVAR(suppress_comment_ignored_warning),
MYSQL_SYSVAR(ignore_comments),
NULL
};
......
......@@ -367,3 +367,5 @@ int spider_param_strict_group_by(
);
bool spider_param_direct_aggregate(THD *thd);
bool spider_param_disable_group_by_handler(THD *thd);
bool spider_param_suppress_comment_ignored_warning(THD *thd);
bool spider_param_ignore_comments(THD *thd);
......@@ -253,17 +253,98 @@ static PSI_thread_info all_spider_threads[] = {
};
#endif
/*
The spider table options. All fields are strings, with NULLness
indicating unspecified by the user.
*/
struct ha_table_option_struct
{
char *remote_server;
char *remote_database;
char *remote_table;
char *auto_increment_mode;
char *bgs_mode;
char *bulk_size;
char *bulk_update_size;
char *connect_timeout;
char *database;
char *default_file;
char *default_group;
char *delete_all_rows_type;
char *driver;
char *dsn;
char *filedsn;
char *force_bulk_delete;
char *force_bulk_update;
char *host;
char *idx;
char *multi_split_read;
char *net_read_timeout;
char *net_write_timeout;
char *password;
char *port;
char *priority;
char *query_cache;
char *query_cache_sync;
char *read_only;
char *server;
char *skip_parallel_search;
char *socket;
char *ssl_capath;
char *ssl_ca;
char *ssl_cert;
char *ssl_cipher;
char *ssl_key;
char *ssl_vsc;
char *table;
char *table_count_mode;
char *username;
char *use_pushdown_udf;
char *wrapper;
};
/*
The spider table options with the names used in statements.
*/
ha_create_table_option spider_table_option_list[]= {
HA_TOPTION_STRING("REMOTE_SERVER", remote_server),
HA_TOPTION_STRING("REMOTE_DATABASE", remote_database),
HA_TOPTION_STRING("REMOTE_TABLE", remote_table), HA_TOPTION_END};
HA_TOPTION_STRING("AUTO_INCREMENT_MODE", auto_increment_mode),
HA_TOPTION_STRING("BGS_MODE", bgs_mode),
HA_TOPTION_STRING("BULK_SIZE", bulk_size),
HA_TOPTION_STRING("BULK_UPDATE_SIZE", bulk_update_size),
HA_TOPTION_STRING("CONNECT_TIMEOUT", connect_timeout),
HA_TOPTION_STRING("REMOTE_DATABASE", database),
HA_TOPTION_STRING("DEFAULT_FILE", default_file),
HA_TOPTION_STRING("DEFAULT_GROUP", default_group),
HA_TOPTION_STRING("DELETE_ALL_ROWS_TYPE", delete_all_rows_type),
HA_TOPTION_STRING("DRIVER", driver),
HA_TOPTION_STRING("DSN", dsn),
HA_TOPTION_STRING("FILEDSN", filedsn),
HA_TOPTION_STRING("FORCE_BULK_DELETE", force_bulk_delete),
HA_TOPTION_STRING("FORCE_BULK_UPDATE", force_bulk_update),
HA_TOPTION_STRING("REMOTE_HOST", host),
HA_TOPTION_STRING("IDX", idx),
HA_TOPTION_STRING("MULTI_SPLIT_READ", multi_split_read),
HA_TOPTION_STRING("NET_READ_TIMEOUT", net_read_timeout),
HA_TOPTION_STRING("NET_WRITE_TIMEOUT", net_write_timeout),
HA_TOPTION_STRING("REMOTE_PASSWORD", password),
HA_TOPTION_STRING("REMOTE_PORT", port),
HA_TOPTION_STRING("PRIORITY", priority),
HA_TOPTION_STRING("QUERY_CACHE", query_cache),
HA_TOPTION_STRING("QUERY_CACHE_SYNC", query_cache_sync),
HA_TOPTION_STRING("READ_ONLY", read_only),
HA_TOPTION_STRING("REMOTE_SERVER", server),
HA_TOPTION_STRING("SKIP_PARALLEL_SEARCH", skip_parallel_search),
HA_TOPTION_STRING("REMOTE_SOCKET", socket),
HA_TOPTION_STRING("SSL_CAPATH", ssl_capath),
HA_TOPTION_STRING("SSL_CA", ssl_ca),
HA_TOPTION_STRING("SSL_CERT", ssl_cert),
HA_TOPTION_STRING("SSL_CIPHER", ssl_cipher),
HA_TOPTION_STRING("SSL_KEY", ssl_key),
HA_TOPTION_STRING("SSL_VSC", ssl_vsc),
HA_TOPTION_STRING("REMOTE_TABLE", table),
HA_TOPTION_STRING("TABLE_COUNT_MODE", table_count_mode),
HA_TOPTION_STRING("REMOTE_USERNAME", username),
HA_TOPTION_STRING("USE_PUSHDOWN_UDF", use_pushdown_udf),
HA_TOPTION_STRING("WRAPPER", wrapper),
HA_TOPTION_END
};
/**
Determines how to populate sts (stat) / crd (cardinality) of a
......@@ -1284,6 +1365,75 @@ int spider_create_long_list(
DBUG_RETURN(0);
}
/*
Parse a list of nonnegative longs with maximum value max_val.
max_val <= INT_MAX, and the list is space separated and could have
leading or trailing spaces.
*/
int spider_create_bounded_nat_list(
long **long_list,
uint *list_length,
char *str,
uint length,
long max_val
) {
int i, error_num;
char *cur, *tail;
DBUG_ENTER("spider_create_bounded_nat_list");
*list_length = 0;
if (!str)
{
*long_list = NULL;
DBUG_RETURN(0);
}
cur = str;
while (*cur == ' ')
cur++;
if (*cur)
*list_length = 1;
else {
*long_list = NULL;
DBUG_RETURN(0);
}
while ((cur = strchr(cur, ' ')))
{
do {
cur++;
} while (*cur == ' ');
if (*cur)
(*list_length)++;
}
if (!(*long_list = (long*)
spider_bulk_malloc(spider_current_trx, 44, MYF(MY_WME | MY_ZEROFILL),
long_list, (uint) (sizeof(long) * (*list_length)),
NullS))
) {
my_error(ER_OUT_OF_RESOURCES, MYF(0), HA_ERR_OUT_OF_MEM);
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
}
cur = str;
for (i = 0; i < (int) *list_length; i++)
{
while (*cur == ' ')
cur++;
tail= str + strlen(str);
longlong converted= my_strtoll10(cur, &tail, &error_num);
cur= tail;
if (error_num || (*cur && *cur != ' ') || converted < 0 ||
converted > max_val || converted > INT_MAX)
DBUG_RETURN(1);
(*long_list)[i]= (long) converted;
}
DBUG_RETURN(0);
}
int spider_create_longlong_list(
longlong **longlong_list,
uint *list_length,
......@@ -1592,6 +1742,94 @@ static int spider_set_ll_value(
DBUG_RETURN(error_num);
}
/*
Find the index of a given key name in a table.
Return the index if found, or -1 otherwise.
*/
static int spider_find_key_index(char *key_begin, uint key_len,
TABLE_SHARE *share)
{
for (uint i= 0; i < share->keys; i++)
if (share->key_info[i].name.length == key_len &&
!strncmp(share->key_info[i].name.str, key_begin, key_len))
return i;
return -1;
}
/* Convert a short key hint verb and append it to a string */
static int spider_convert_and_append_hint_verb(char *short_verb_begin,
int short_verb_len,
spider_string *key_hint)
{
switch (short_verb_len)
{
case 1:
if (!strncasecmp("f", short_verb_begin, 1))
{
key_hint->append(SPIDER_SQL_INDEX_FORCE_STR);
return 0;
}
if (!strncasecmp("u", short_verb_begin, 1))
{
key_hint->append(SPIDER_SQL_INDEX_USE_STR);
return 0;
}
break;
case 2:
if (!strncasecmp("ig", short_verb_begin, 2))
{
key_hint->append(SPIDER_SQL_INDEX_IGNORE_STR);
return 0;
}
break;
default:
return 1;
}
return 1;
}
/* Parse the IDX spider option */
static int spider_parse_option_hint(char *hint, SPIDER_SHARE *share,
TABLE_SHARE *table_share)
{
char *short_verb_begin= hint, *short_verb_end, *key_begin, *key_end;
int key_index;
spider_string *key_hint;
while (*short_verb_begin)
{
while (*short_verb_begin == ' ' || *short_verb_begin == '\t')
short_verb_begin++;
if (!*short_verb_begin)
break;
short_verb_end= short_verb_begin;
while (*short_verb_end && *short_verb_end != ' ' && *short_verb_end != '\t')
short_verb_end++;
key_begin= short_verb_end;
while (*key_begin == ' ' || *key_begin == '\t')
key_begin++;
key_end= key_begin;
while (*key_end && *key_end != ' ' && *key_end != '\t')
key_end++;
if ((key_index=
spider_find_key_index(key_begin, (uint) (key_end - key_begin),
table_share))
== -1)
return 1;
key_hint= &share->key_hint[key_index];
if (spider_convert_and_append_hint_verb(
short_verb_begin, (int) (short_verb_end - short_verb_begin),
key_hint))
return 1;
key_hint->append(SPIDER_SQL_OPEN_PAREN_STR);
key_hint->append(table_share->key_info[key_index].name.str,
table_share->key_info[key_index].name.length);
key_hint->append(SPIDER_SQL_CLOSE_PAREN_STR);
short_verb_begin= key_end;
}
return 0;
}
#define SPIDER_PARAM_LEN(name) name ## _length
#define SPIDER_PARAM_LENS(name) name ## _lengths
#define SPIDER_PARAM_CHARLEN(name) name ## _charlen
......@@ -1612,17 +1850,10 @@ static int spider_set_ll_value(
} \
break; \
}
#define SPIDER_PARAM_STR_LIST(title_name, param_name) \
SPIDER_PARAM_STR_LIST_CHECK(title_name, param_name, FALSE)
#define SPIDER_PARAM_STR_LIST_CHECK(title_name, param_name, already_set) \
#define SPIDER_PARAM_STR_LIST(title_name, param_name) \
if (!strncasecmp(parse.start_title, title_name, title_length)) \
{ \
DBUG_PRINT("info", ("spider " title_name " start")); \
if (already_set) \
{ \
error_num= ER_SPIDER_INVALID_CONNECT_INFO_NUM; \
goto error; \
} \
if (!share->param_name) \
{ \
share->SPIDER_PARAM_CHARLEN(param_name)= value_length; \
......@@ -1793,23 +2024,152 @@ static int spider_set_ll_value(
if (!strncasecmp(parse.start_title, title_name, title_length) && create_table) \
warn_deprecated<VER>(current_thd, title_name)
/*
Set a given engine-defined option, which holds a string list, to the
corresponding attribute of SPIDER_SHARE.
*/
#define SPIDER_OPTION_STR_LIST(title_name, option_name, param_name) \
if (option_struct && option_struct->option_name) \
/**
Parse an option string into a string list and assign it to a
`SPIDER_SHARE' field
*/
#define SPIDER_OPTION_STR_LIST(option_name, param_name) \
if (options && options->option_name) \
{ \
option_specified= TRUE; \
share->SPIDER_PARAM_CHARLEN(param_name)= \
strlen(options->option_name); \
if ((error_num= spider_create_string_list( \
&share->param_name, &share->SPIDER_PARAM_LENS(param_name), \
&share->SPIDER_PARAM_LEN(param_name), \
options->option_name, \
share->SPIDER_PARAM_CHARLEN(param_name)))) \
{ \
goto error; \
} \
if (share->SPIDER_PARAM_LEN(param_name) > 1 && create_table) \
{ \
push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN, \
HA_ERR_UNSUPPORTED, \
"The high availability feature of Spider " \
"has been deprecated " \
"and will be removed in a future release"); \
} \
}
/**
Parse an option string into a non-negative int with an upper
bound, and assign it to a `SPIDER_SHARE' field
*/
#define SPIDER_OPTION_BOUNDED_NAT(option_title, option_name, \
param_name, max_val) \
if (options && options->option_name) \
{ \
option_specified= TRUE; \
char *tail= options->option_name + strlen(options->option_name); \
longlong converted= my_strtoll10(options->option_name, &tail, \
&error_num); \
if (error_num || *tail || converted < 0 || \
converted > max_val || converted > INT_MAX) \
{ \
error_num= ER_SPIDER_INVALID_TABLE_OPTION_NUM; \
my_printf_error(error_num, ER_SPIDER_INVALID_TABLE_OPTION_STR, \
MYF(0), option_title, options->option_name); \
goto error; \
} \
share->param_name= (int) converted; \
} \
/**
Parse an option string into a non-negative long array with an upper
bound, and assign it to a `SPIDER_SHARE' field
*/
#define SPIDER_OPTION_BOUNDED_NAT_LIST(option_title, option_name, \
param_name, max_val) \
if (options && options->option_name) \
{ \
option_specified= TRUE; \
if ((error_num = spider_create_bounded_nat_list( \
&share->param_name, \
&share->SPIDER_PARAM_LEN(param_name), \
options->option_name, \
strlen(options->option_name), \
max_val))) \
{ \
if (error_num != HA_ERR_OUT_OF_MEM) \
{ \
error_num= ER_SPIDER_INVALID_TABLE_OPTION_NUM; \
my_printf_error(error_num, ER_SPIDER_INVALID_TABLE_OPTION_STR, \
MYF(0), option_title, options->option_name); \
} \
goto error; \
} \
if (share->SPIDER_PARAM_LEN(param_name) > 1 && create_table) \
{ \
push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN, \
HA_ERR_UNSUPPORTED, \
"The high availability feature of Spider " \
"has been deprecated " \
"and will be removed in a future release"); \
} \
} \
/**
Parse an option string into a non-negative `longlong', and assign it
to a `SPIDER_SHARE' field
*/
#define SPIDER_OPTION_NAT_LONGLONG(option_title, option_name, param_name) \
if (options && options->option_name) \
{ \
option_specified= TRUE; \
char *tail= options->option_name + strlen(options->option_name); \
longlong converted = my_strtoll10(options->option_name, &tail, \
&error_num); \
if (error_num || *tail != '\0' || converted < 0) \
{ \
error_num= ER_SPIDER_INVALID_TABLE_OPTION_NUM; \
my_printf_error(error_num, ER_SPIDER_INVALID_TABLE_OPTION_STR, \
MYF(0), option_title, options->option_name); \
goto error; \
} \
share->param_name = converted; \
} \
/**
Parse an option string into a boolean, and assign it to a
`SPIDER_SHARE' field.
*/
#define SPIDER_OPTION_BOOL(option_title, option_name, param_name) \
if (options && options->option_name) \
{ \
DBUG_PRINT("info", ("spider " title_name " start overwrite")); \
share->SPIDER_PARAM_CHARLEN(param_name)= \
strlen(option_struct->option_name); \
if ((error_num= spider_create_string_list( \
&share->param_name, &share->SPIDER_PARAM_LENS(param_name), \
&share->SPIDER_PARAM_LEN(param_name), \
option_struct->option_name, \
share->SPIDER_PARAM_CHARLEN(param_name)))) \
option_specified= TRUE; \
if (!strcmp("YES", options->option_name) || \
!strcmp("1", options->option_name)) \
share->param_name= TRUE; \
else if (!strcmp("NO", options->option_name) || \
!strcmp("0", options->option_name)) \
share->param_name= FALSE; \
else \
{ \
error_num= ER_SPIDER_INVALID_TABLE_OPTION_NUM; \
my_printf_error(error_num, ER_SPIDER_INVALID_TABLE_OPTION_STR, \
MYF(0), option_title, options->option_name); \
goto error; \
}
} \
} \
/**
Parse an option string into index hints, and assign them to
`SPIDER_SHARE::key_hint'
*/
#define SPIDER_OPTION_HINT(option_title, option_name) \
if (options && options->option_name) \
{ \
option_specified= TRUE; \
if ((error_num= spider_parse_option_hint(options->option_name, \
share, table_share))) \
{ \
error_num= ER_SPIDER_INVALID_TABLE_OPTION_NUM; \
my_printf_error(error_num, ER_SPIDER_INVALID_TABLE_OPTION_STR, \
MYF(0), option_title, options->option_name); \
goto error; \
} \
} \
/**
Assign -1 to some `SPIDER_SHARE' numeric fields, to indicate they
......@@ -2139,9 +2499,10 @@ int spider_parse_connect_info(
int title_length, value_length;
SPIDER_PARAM_STRING_PARSE parse;
SPIDER_ALTER_TABLE *share_alter;
ha_table_option_struct *option_struct;
ha_table_option_struct *options;
partition_element *part_elem;
partition_element *sub_elem;
bool option_specified= FALSE;
DBUG_ENTER("spider_parse_connect_info");
DBUG_PRINT("info",("spider partition_info=%s",
table_share->partition_info_str));
......@@ -2157,13 +2518,69 @@ int spider_parse_connect_info(
table, a partition, or a sub-partition. */
if (part_info)
if (part_info->is_sub_partitioned())
option_struct= sub_elem->option_struct;
options= sub_elem->option_struct;
else
option_struct= part_elem->option_struct;
options= part_elem->option_struct;
else
option_struct= table_share->option_struct;
options= table_share->option_struct;
spider_minus_1(share, table_share);
/* Parse through all option fields, and flip option_specified if
any option field is not null. */
SPIDER_OPTION_BOUNDED_NAT("AUTO_INCREMENT_MODE", auto_increment_mode,
auto_increment_mode, 3);
SPIDER_OPTION_BOUNDED_NAT("BGS_MODE", bgs_mode, bgs_mode, 3);
SPIDER_OPTION_BOUNDED_NAT("BULK_SIZE", bulk_size, bulk_size, 2147483647);
SPIDER_OPTION_BOUNDED_NAT("BULK_UPDATE_SIZE", bulk_update_size,
bulk_update_size, 2147483647);
SPIDER_OPTION_BOUNDED_NAT_LIST("CONNECT_TIMEOUT", connect_timeout,
connect_timeouts, 2147483647);
SPIDER_OPTION_STR_LIST(database, tgt_dbs);
SPIDER_OPTION_STR_LIST(default_file, tgt_default_files);
SPIDER_OPTION_STR_LIST(default_group, tgt_default_groups);
SPIDER_OPTION_BOUNDED_NAT("DELETE_ALL_ROWS_TYPE", delete_all_rows_type,
delete_all_rows_type, 1);
SPIDER_OPTION_STR_LIST(driver, tgt_drivers);
SPIDER_OPTION_STR_LIST(dsn, tgt_dsns);
SPIDER_OPTION_STR_LIST(filedsn, tgt_filedsns);
SPIDER_OPTION_BOOL("FORCE_BULK_DELETE", force_bulk_delete,
force_bulk_delete);
SPIDER_OPTION_BOOL("FORCE_BULK_UPDATE", force_bulk_update,
force_bulk_update);
SPIDER_OPTION_STR_LIST(host, tgt_hosts);
SPIDER_OPTION_HINT("IDX", idx);
SPIDER_OPTION_BOUNDED_NAT("MULTI_SPLIT_READ", multi_split_read,
multi_split_read, 2147483647);
SPIDER_OPTION_BOUNDED_NAT_LIST("NET_READ_TIMEOUT", net_read_timeout,
net_read_timeouts, 2147483647);
SPIDER_OPTION_BOUNDED_NAT_LIST("NET_WRITE_TIMEOUT", net_write_timeout,
net_write_timeouts, 2147483647);
SPIDER_OPTION_STR_LIST(password, tgt_passwords);
SPIDER_OPTION_BOUNDED_NAT_LIST("REMOTE_PORT", port, tgt_ports, 65535);
SPIDER_OPTION_NAT_LONGLONG("PRIORITY", priority, priority);
SPIDER_OPTION_BOUNDED_NAT("QUERY_CACHE", query_cache, query_cache, 2);
SPIDER_OPTION_BOUNDED_NAT("QUERY_CACHE_SYNC", query_cache_sync,
query_cache_sync, 3);
SPIDER_OPTION_BOOL("READ_ONLY", read_only, read_only_mode);
SPIDER_OPTION_STR_LIST(server, server_names);
SPIDER_OPTION_BOUNDED_NAT("SKIP_PARALLEL_SEARCH", skip_parallel_search,
skip_parallel_search, 3);
SPIDER_OPTION_STR_LIST(socket, tgt_sockets);
SPIDER_OPTION_STR_LIST(ssl_capath, tgt_ssl_capaths);
SPIDER_OPTION_STR_LIST(ssl_ca, tgt_ssl_cas);
SPIDER_OPTION_STR_LIST(ssl_cert, tgt_ssl_certs);
SPIDER_OPTION_STR_LIST(ssl_cipher, tgt_ssl_ciphers);
SPIDER_OPTION_STR_LIST(ssl_key, tgt_ssl_keys);
SPIDER_OPTION_BOUNDED_NAT_LIST("SSL_VSC", ssl_vsc, tgt_ssl_vscs, 1);
SPIDER_OPTION_STR_LIST(table, tgt_table_names);
SPIDER_OPTION_BOUNDED_NAT("TABLE_COUNT_MODE", table_count_mode,
table_count_mode, 3);
SPIDER_OPTION_STR_LIST(username, tgt_usernames);
SPIDER_OPTION_BOOL("USE_PUSHDOWN_UDF", use_pushdown_udf, use_pushdown_udf);
SPIDER_OPTION_STR_LIST(wrapper, tgt_wrappers);
/* Parse the connect strings, from the most specific level
(sub-partition, i=4) to the least (CONNECTION string, i=1). */
for (int i = 4; i > 0; i--)
{
if (connect_string)
......@@ -2183,6 +2600,18 @@ int spider_parse_connect_info(
goto error_alloc_conn_string;
}
DBUG_ASSERT(error_num_1 == 0);
/* If the connect string is explicitly ignored for parsing, or if
any option is specified, skip the parsing. */
if (spider_param_ignore_comments(current_thd) || option_specified)
{
if (!spider_param_suppress_comment_ignored_warning(current_thd))
push_warning_printf(
current_thd, Sql_condition::WARN_LEVEL_WARN,
ER_SPIDER_COMMENT_CONNECTION_IGNORED_BY_TABLE_OPTIONS_NUM,
ER_SPIDER_COMMENT_CONNECTION_IGNORED_BY_TABLE_OPTIONS_STR,
connect_string);
continue;
}
start_param = connect_string;
parse.error_num = ER_SPIDER_INVALID_CONNECT_INFO_NUM;
......@@ -2246,243 +2675,233 @@ int spider_parse_connect_info(
#ifdef HA_CAN_FORCE_BULK_UPDATE
SPIDER_PARAM_INT_WITH_MAX("fbu", force_bulk_update, 0, 1);
#endif
SPIDER_PARAM_STR_LIST("fds", tgt_filedsns);
SPIDER_PARAM_LONGLONG("frd", first_read, 0);
SPIDER_PARAM_DEPRECATED_WARNING("isa", 1007);
SPIDER_PARAM_INT("isa", init_sql_alloc_size, 0);
SPIDER_PARAM_DEPRECATED_WARNING("ilm", 1007);
SPIDER_PARAM_LONGLONG("ilm", internal_limit, 0);
SPIDER_PARAM_DEPRECATED_WARNING("ios", 1007);
SPIDER_PARAM_LONGLONG("ios", internal_offset, 0);
SPIDER_PARAM_INT_WITH_MAX("iom", internal_optimize, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("iol", internal_optimize_local, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("lmr", low_mem_read, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("lcs", load_crd_at_startup, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("lss", load_sts_at_startup, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("lst", link_statuses, 0, 3);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mbf", monitoring_bg_flag, 0, 1);
SPIDER_PARAM_LONGLONG_LIST_WITH_MAX(
"mbi", monitoring_bg_interval, 0, 4294967295LL);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mbk", monitoring_bg_kind, 0, 3);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mbp", monitoring_binlog_pos_at_failing, 0, 2);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mfg", monitoring_flag, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mkd", monitoring_kind, 0, 3);
SPIDER_PARAM_LONGLONG_LIST_WITH_MAX(
"mlt", monitoring_limit, 0, 9223372036854775807LL);
SPIDER_PARAM_INT("mod", max_order, 0);
SPIDER_PARAM_LONGLONG_LIST_WITH_MAX(
"msi", monitoring_sid, 0, 4294967295LL);
SPIDER_PARAM_INT_WITH_MAX("msr", multi_split_read, 0, 2147483647);
SPIDER_PARAM_LONG_LIST_WITH_MAX("nrt", net_read_timeouts, 0,
2147483647);
SPIDER_PARAM_LONG_LIST_WITH_MAX("nwt", net_write_timeouts, 0,
2147483647);
SPIDER_PARAM_STR_LIST("pkn", tgt_pk_names);
SPIDER_PARAM_LONGLONG("prt", priority, 0);
SPIDER_PARAM_INT_WITH_MAX("qch", query_cache, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("qcs", query_cache_sync, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("qmd", quick_mode, 0, 3);
SPIDER_PARAM_LONGLONG("qpb", quick_page_byte, 0);
SPIDER_PARAM_LONGLONG("qps", quick_page_size, 0);
SPIDER_PARAM_INT_WITH_MAX("rom", read_only_mode, 0, 1);
SPIDER_PARAM_DOUBLE("rrt", read_rate, 0);
SPIDER_PARAM_INT_WITH_MAX("rsa", reset_sql_alloc, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("sbm", sts_bg_mode, 0, 2);
SPIDER_PARAM_STR_LIST("sca", tgt_ssl_cas);
SPIDER_PARAM_STR_LIST("sch", tgt_ssl_ciphers);
SPIDER_PARAM_INT_WITH_MAX("scm", select_column_mode, 0, 1);
SPIDER_PARAM_STR_LIST("scp", tgt_ssl_capaths);
SPIDER_PARAM_STR_LIST("scr", tgt_ssl_certs);
SPIDER_PARAM_INT_WITH_MAX("sdc", skip_default_condition, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("sgb", strict_group_bys, 0, 1);
SPIDER_PARAM_DOUBLE("siv", sts_interval, 0);
SPIDER_PARAM_STR_LIST("sky", tgt_ssl_keys);
SPIDER_PARAM_STR_LIST("sli", static_link_ids);
SPIDER_PARAM_INT_WITH_MAX("slc", store_last_crd, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("slm", selupd_lock_mode, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("sls", store_last_sts, 0, 1);
SPIDER_PARAM_DEPRECATED_WARNING("smd", 1007);
SPIDER_PARAM_INT_WITH_MAX("smd", sts_mode, 1, 2);
SPIDER_PARAM_LONGLONG("smr", static_mean_rec_length, 0);
SPIDER_PARAM_LONGLONG("spr", split_read, 0);
SPIDER_PARAM_INT_WITH_MAX("sps", skip_parallel_search, 0, 3);
SPIDER_PARAM_STR_LIST("sqn", tgt_sequence_names);
SPIDER_PARAM_LONGLONG("srd", second_read, 0);
SPIDER_PARAM_DOUBLE("srt", scan_rate, 0);
SPIDER_PARAM_STR_LIST_CHECK("srv", server_names,
option_struct &&
option_struct->remote_server);
SPIDER_PARAM_DOUBLE("ssr", semi_split_read, 0);
SPIDER_PARAM_LONGLONG("ssl", semi_split_read_limit, 0);
SPIDER_PARAM_INT_WITH_MAX("ssy", sts_sync, 0, 2);
SPIDER_PARAM_DEPRECATED_WARNING("stc", 1007);
SPIDER_PARAM_INT_WITH_MAX("stc", semi_table_lock_conn, 0, 1);
SPIDER_PARAM_DEPRECATED_WARNING("stl", 1007);
SPIDER_PARAM_INT_WITH_MAX("stl", semi_table_lock, 0, 1);
SPIDER_PARAM_LONGLONG("srs", static_records_for_status, 0);
SPIDER_PARAM_LONG_LIST_WITH_MAX("svc", tgt_ssl_vscs, 0, 1);
SPIDER_PARAM_STR_LIST_CHECK("tbl", tgt_table_names,
option_struct &&
option_struct->remote_table);
SPIDER_PARAM_INT_WITH_MAX("tcm", table_count_mode, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("upu", use_pushdown_udf, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("utc", use_table_charset, 0, 1);
error_num = parse.fail(true);
goto error;
case 4:
SPIDER_PARAM_STR_LIST("host", tgt_hosts);
SPIDER_PARAM_STR_LIST("user", tgt_usernames);
SPIDER_PARAM_LONG_LIST_WITH_MAX("port", tgt_ports, 0, 65535);
error_num = parse.fail(true);
goto error;
case 5:
SPIDER_PARAM_STR_LIST_CHECK("table", tgt_table_names,
option_struct &&
option_struct->remote_table);
error_num = parse.fail(true);
goto error;
case 6:
SPIDER_PARAM_STR_LIST("driver", tgt_drivers);
SPIDER_PARAM_STR_LIST_CHECK("server", server_names,
option_struct &&
option_struct->remote_server);
SPIDER_PARAM_STR_LIST("socket", tgt_sockets);
SPIDER_PARAM_HINT("idx", key_hint, 3, (int) table_share->keys,
spider_db_append_key_hint);
SPIDER_PARAM_STR_LIST("ssl_ca", tgt_ssl_cas);
SPIDER_PARAM_NUMHINT("skc", static_key_cardinality, 3,
(int) table_share->keys, spider_set_ll_value);
error_num = parse.fail(true);
goto error;
case 7:
SPIDER_PARAM_STR_LIST("filedsn", tgt_filedsns);
SPIDER_PARAM_STR_LIST("wrapper", tgt_wrappers);
SPIDER_PARAM_STR_LIST("ssl_key", tgt_ssl_keys);
SPIDER_PARAM_STR_LIST("pk_name", tgt_pk_names);
error_num = parse.fail(true);
goto error;
case 8:
SPIDER_PARAM_STR_LIST_CHECK("database", tgt_dbs,
option_struct &&
option_struct->remote_database);
SPIDER_PARAM_STR_LIST("password", tgt_passwords);
SPIDER_PARAM_DEPRECATED_WARNING("sts_mode", 1007);
SPIDER_PARAM_INT_WITH_MAX("sts_mode", sts_mode, 1, 2);
SPIDER_PARAM_INT_WITH_MAX("sts_sync", sts_sync, 0, 2);
SPIDER_PARAM_DEPRECATED_WARNING("crd_mode", 1007);
SPIDER_PARAM_INT_WITH_MAX("crd_mode", crd_mode, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("crd_sync", crd_sync, 0, 2);
SPIDER_PARAM_DEPRECATED_WARNING("crd_type", 1007);
SPIDER_PARAM_INT_WITH_MAX("crd_type", crd_type, 0, 2);
SPIDER_PARAM_LONGLONG("priority", priority, 0);
SPIDER_PARAM_INT("bgs_mode", bgs_mode, 0);
SPIDER_PARAM_STR_LIST("ssl_cert", tgt_ssl_certs);
SPIDER_PARAM_INT_WITH_MAX("bka_mode", bka_mode, 0, 2);
error_num = parse.fail(true);
goto error;
case 9:
SPIDER_PARAM_INT("max_order", max_order, 0);
SPIDER_PARAM_INT("bulk_size", bulk_size, 0);
SPIDER_PARAM_DOUBLE("scan_rate", scan_rate, 0);
SPIDER_PARAM_DOUBLE("read_rate", read_rate, 0);
error_num = parse.fail(true);
goto error;
case 10:
SPIDER_PARAM_DEPRECATED_WARNING("crd_weight", 1007);
SPIDER_PARAM_DOUBLE("crd_weight", crd_weight, 1);
SPIDER_PARAM_LONGLONG("split_read", split_read, 0);
SPIDER_PARAM_INT_WITH_MAX("quick_mode", quick_mode, 0, 3);
SPIDER_PARAM_STR_LIST("ssl_cipher", tgt_ssl_ciphers);
SPIDER_PARAM_STR_LIST("ssl_capath", tgt_ssl_capaths);
SPIDER_PARAM_STR("bka_engine", bka_engine);
SPIDER_PARAM_LONGLONG("first_read", first_read, 0);
error_num = parse.fail(true);
goto error;
case 11:
SPIDER_PARAM_INT_WITH_MAX("query_cache", query_cache, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("crd_bg_mode", crd_bg_mode, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("sts_bg_mode", sts_bg_mode, 0, 2);
SPIDER_PARAM_LONG_LIST_WITH_MAX("link_status", link_statuses, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("casual_read", casual_read, 0, 63);
SPIDER_PARAM_DEPRECATED_WARNING("buffer_size", 1007);
SPIDER_PARAM_INT("buffer_size", buffer_size, 0);
error_num = parse.fail(true);
goto error;
case 12:
SPIDER_PARAM_DOUBLE("sts_interval", sts_interval, 0);
SPIDER_PARAM_DOUBLE("crd_interval", crd_interval, 0);
SPIDER_PARAM_INT_WITH_MAX("low_mem_read", low_mem_read, 0, 1);
SPIDER_PARAM_STR_LIST("default_file", tgt_default_files);
error_num = parse.fail(true);
goto error;
case 13:
SPIDER_PARAM_STR_LIST("default_group", tgt_default_groups);
SPIDER_PARAM_STR_LIST("sequence_name", tgt_sequence_names);
error_num = parse.fail(true);
goto error;
case 14:
SPIDER_PARAM_DEPRECATED_WARNING("internal_limit", 1007);
SPIDER_PARAM_LONGLONG("internal_limit", internal_limit, 0);
SPIDER_PARAM_LONGLONG("bgs_first_read", bgs_first_read, 0);
SPIDER_PARAM_INT_WITH_MAX("read_only_mode", read_only_mode, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("access_balance", access_balances, 0,
2147483647);
SPIDER_PARAM_STR_LIST("static_link_id", static_link_ids);
SPIDER_PARAM_INT_WITH_MAX("store_last_crd", store_last_crd, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("store_last_sts", store_last_sts, 0, 1);
error_num = parse.fail(true);
goto error;
case 15:
SPIDER_PARAM_DEPRECATED_WARNING("internal_offset", 1007);
SPIDER_PARAM_LONGLONG("internal_offset", internal_offset, 0);
SPIDER_PARAM_INT_WITH_MAX("reset_sql_alloc", reset_sql_alloc, 0, 1);
SPIDER_PARAM_DEPRECATED_WARNING("semi_table_lock", 1007);
SPIDER_PARAM_INT_WITH_MAX("semi_table_lock", semi_table_lock, 0, 1);
SPIDER_PARAM_LONGLONG("quick_page_byte", quick_page_byte, 0);
SPIDER_PARAM_LONGLONG("quick_page_size", quick_page_size, 0);
SPIDER_PARAM_LONGLONG("bgs_second_read", bgs_second_read, 0);
SPIDER_PARAM_LONG_LIST_WITH_MAX("monitoring_flag", monitoring_flag, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("monitoring_kind", monitoring_kind, 0, 3);
SPIDER_PARAM_DOUBLE("semi_split_read", semi_split_read, 0);
SPIDER_PARAM_LONG_LIST_WITH_MAX("connect_timeout", connect_timeouts,
0, 2147483647);
SPIDER_PARAM_LONG_LIST_WITH_MAX("strict_group_by",
strict_group_bys, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("error_read_mode", error_read_mode, 0, 1);
error_num = parse.fail(true);
goto error;
case 16:
SPIDER_PARAM_INT_WITH_MAX(
"multi_split_read", multi_split_read, 0, 2147483647);
SPIDER_PARAM_INT_WITH_MAX(
"selupd_lock_mode", selupd_lock_mode, 0, 2);
SPIDER_PARAM_INT_WITH_MAX(
"table_count_mode", table_count_mode, 0, 3);
SPIDER_PARAM_INT_WITH_MAX(
"use_pushdown_udf", use_pushdown_udf, 0, 1);
SPIDER_PARAM_LONGLONG_LIST_WITH_MAX(
"monitoring_limit", monitoring_limit, 0, 9223372036854775807LL);
SPIDER_PARAM_INT_WITH_MAX(
"bulk_update_mode", bulk_update_mode, 0, 2);
SPIDER_PARAM_INT("bulk_update_size", bulk_update_size, 0);
SPIDER_PARAM_LONG_LIST_WITH_MAX("net_read_timeout",
net_read_timeouts, 0, 2147483647);
SPIDER_PARAM_INT_WITH_MAX(
"error_write_mode", error_write_mode, 0, 1);
SPIDER_PARAM_INT_WITH_MAX(
"query_cache_sync", query_cache_sync, 0, 3);
error_num = parse.fail(true);
goto error;
case 17:
SPIDER_PARAM_INT_WITH_MAX(
"internal_optimize", internal_optimize, 0, 1);
SPIDER_PARAM_INT_WITH_MAX(
"use_table_charset", use_table_charset, 0, 1);
SPIDER_PARAM_INT_WITH_MAX(
"direct_dup_insert", direct_dup_insert, 0, 1);
SPIDER_PARAM_INT("active_link_count", active_link_count, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("net_write_timeout",
net_write_timeouts, 0, 2147483647);
SPIDER_PARAM_STR_LIST("fds", tgt_filedsns);
SPIDER_PARAM_LONGLONG("frd", first_read, 0);
SPIDER_PARAM_DEPRECATED_WARNING("isa", 1007);
SPIDER_PARAM_INT("isa", init_sql_alloc_size, 0);
SPIDER_PARAM_DEPRECATED_WARNING("ilm", 1007);
SPIDER_PARAM_LONGLONG("ilm", internal_limit, 0);
SPIDER_PARAM_DEPRECATED_WARNING("ios", 1007);
SPIDER_PARAM_LONGLONG("ios", internal_offset, 0);
SPIDER_PARAM_INT_WITH_MAX("iom", internal_optimize, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("iol", internal_optimize_local, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("lmr", low_mem_read, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("lcs", load_crd_at_startup, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("lss", load_sts_at_startup, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("lst", link_statuses, 0, 3);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mbf", monitoring_bg_flag, 0, 1);
SPIDER_PARAM_LONGLONG_LIST_WITH_MAX(
"mbi", monitoring_bg_interval, 0, 4294967295LL);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mbk", monitoring_bg_kind, 0, 3);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mbp", monitoring_binlog_pos_at_failing, 0, 2);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mfg", monitoring_flag, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("mkd", monitoring_kind, 0, 3);
SPIDER_PARAM_LONGLONG_LIST_WITH_MAX(
"mlt", monitoring_limit, 0, 9223372036854775807LL);
SPIDER_PARAM_INT("mod", max_order, 0);
SPIDER_PARAM_LONGLONG_LIST_WITH_MAX(
"msi", monitoring_sid, 0, 4294967295LL);
SPIDER_PARAM_INT_WITH_MAX("msr", multi_split_read, 0, 2147483647);
SPIDER_PARAM_LONG_LIST_WITH_MAX("nrt", net_read_timeouts, 0,
2147483647);
SPIDER_PARAM_LONG_LIST_WITH_MAX("nwt", net_write_timeouts, 0,
2147483647);
SPIDER_PARAM_STR_LIST("pkn", tgt_pk_names);
SPIDER_PARAM_LONGLONG("prt", priority, 0);
SPIDER_PARAM_INT_WITH_MAX("qch", query_cache, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("qcs", query_cache_sync, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("qmd", quick_mode, 0, 3);
SPIDER_PARAM_LONGLONG("qpb", quick_page_byte, 0);
SPIDER_PARAM_LONGLONG("qps", quick_page_size, 0);
SPIDER_PARAM_INT_WITH_MAX("rom", read_only_mode, 0, 1);
SPIDER_PARAM_DOUBLE("rrt", read_rate, 0);
SPIDER_PARAM_INT_WITH_MAX("rsa", reset_sql_alloc, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("sbm", sts_bg_mode, 0, 2);
SPIDER_PARAM_STR_LIST("sca", tgt_ssl_cas);
SPIDER_PARAM_STR_LIST("sch", tgt_ssl_ciphers);
SPIDER_PARAM_INT_WITH_MAX("scm", select_column_mode, 0, 1);
SPIDER_PARAM_STR_LIST("scp", tgt_ssl_capaths);
SPIDER_PARAM_STR_LIST("scr", tgt_ssl_certs);
SPIDER_PARAM_INT_WITH_MAX("sdc", skip_default_condition, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("sgb", strict_group_bys, 0, 1);
SPIDER_PARAM_DOUBLE("siv", sts_interval, 0);
SPIDER_PARAM_STR_LIST("sky", tgt_ssl_keys);
SPIDER_PARAM_STR_LIST("sli", static_link_ids);
SPIDER_PARAM_INT_WITH_MAX("slc", store_last_crd, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("slm", selupd_lock_mode, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("sls", store_last_sts, 0, 1);
SPIDER_PARAM_DEPRECATED_WARNING("smd", 1007);
SPIDER_PARAM_INT_WITH_MAX("smd", sts_mode, 1, 2);
SPIDER_PARAM_LONGLONG("smr", static_mean_rec_length, 0);
SPIDER_PARAM_LONGLONG("spr", split_read, 0);
SPIDER_PARAM_INT_WITH_MAX("sps", skip_parallel_search, 0, 3);
SPIDER_PARAM_STR_LIST("sqn", tgt_sequence_names);
SPIDER_PARAM_LONGLONG("srd", second_read, 0);
SPIDER_PARAM_DOUBLE("srt", scan_rate, 0);
SPIDER_PARAM_STR_LIST("srv", server_names);
SPIDER_PARAM_DOUBLE("ssr", semi_split_read, 0);
SPIDER_PARAM_LONGLONG("ssl", semi_split_read_limit, 0);
SPIDER_PARAM_INT_WITH_MAX("ssy", sts_sync, 0, 2);
SPIDER_PARAM_DEPRECATED_WARNING("stc", 1007);
SPIDER_PARAM_INT_WITH_MAX("stc", semi_table_lock_conn, 0, 1);
SPIDER_PARAM_DEPRECATED_WARNING("stl", 1007);
SPIDER_PARAM_INT_WITH_MAX("stl", semi_table_lock, 0, 1);
SPIDER_PARAM_LONGLONG("srs", static_records_for_status, 0);
SPIDER_PARAM_LONG_LIST_WITH_MAX("svc", tgt_ssl_vscs, 0, 1);
SPIDER_PARAM_STR_LIST("tbl", tgt_table_names);
SPIDER_PARAM_INT_WITH_MAX("tcm", table_count_mode, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("upu", use_pushdown_udf, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("utc", use_table_charset, 0, 1);
error_num= parse.fail(true);
goto error;
case 4:
SPIDER_PARAM_STR_LIST("host", tgt_hosts);
SPIDER_PARAM_STR_LIST("user", tgt_usernames);
SPIDER_PARAM_LONG_LIST_WITH_MAX("port", tgt_ports, 0, 65535);
error_num= parse.fail(true);
goto error;
case 5:
SPIDER_PARAM_STR_LIST("table", tgt_table_names);
error_num= parse.fail(true);
goto error;
case 6:
SPIDER_PARAM_STR_LIST("driver", tgt_drivers);
SPIDER_PARAM_STR_LIST("server", server_names);
SPIDER_PARAM_STR_LIST("socket", tgt_sockets);
SPIDER_PARAM_HINT("idx", key_hint, 3, (int) table_share->keys,
spider_db_append_key_hint);
SPIDER_PARAM_STR_LIST("ssl_ca", tgt_ssl_cas);
SPIDER_PARAM_NUMHINT("skc", static_key_cardinality, 3,
(int) table_share->keys, spider_set_ll_value);
error_num= parse.fail(true);
goto error;
case 7:
SPIDER_PARAM_STR_LIST("filedsn", tgt_filedsns);
SPIDER_PARAM_STR_LIST("wrapper", tgt_wrappers);
SPIDER_PARAM_STR_LIST("ssl_key", tgt_ssl_keys);
SPIDER_PARAM_STR_LIST("pk_name", tgt_pk_names);
error_num= parse.fail(true);
goto error;
case 8:
SPIDER_PARAM_STR_LIST("database", tgt_dbs);
SPIDER_PARAM_STR_LIST("password", tgt_passwords);
SPIDER_PARAM_DEPRECATED_WARNING("sts_mode", 1007);
SPIDER_PARAM_INT_WITH_MAX("sts_mode", sts_mode, 1, 2);
SPIDER_PARAM_INT_WITH_MAX("sts_sync", sts_sync, 0, 2);
SPIDER_PARAM_DEPRECATED_WARNING("crd_mode", 1007);
SPIDER_PARAM_INT_WITH_MAX("crd_mode", crd_mode, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("crd_sync", crd_sync, 0, 2);
SPIDER_PARAM_DEPRECATED_WARNING("crd_type", 1007);
SPIDER_PARAM_INT_WITH_MAX("crd_type", crd_type, 0, 2);
SPIDER_PARAM_LONGLONG("priority", priority, 0);
SPIDER_PARAM_INT("bgs_mode", bgs_mode, 0);
SPIDER_PARAM_STR_LIST("ssl_cert", tgt_ssl_certs);
SPIDER_PARAM_INT_WITH_MAX("bka_mode", bka_mode, 0, 2);
error_num= parse.fail(true);
goto error;
case 9:
SPIDER_PARAM_INT("max_order", max_order, 0);
SPIDER_PARAM_INT("bulk_size", bulk_size, 0);
SPIDER_PARAM_DOUBLE("scan_rate", scan_rate, 0);
SPIDER_PARAM_DOUBLE("read_rate", read_rate, 0);
error_num= parse.fail(true);
goto error;
case 10:
SPIDER_PARAM_DEPRECATED_WARNING("crd_weight", 1007);
SPIDER_PARAM_DOUBLE("crd_weight", crd_weight, 1);
SPIDER_PARAM_LONGLONG("split_read", split_read, 0);
SPIDER_PARAM_INT_WITH_MAX("quick_mode", quick_mode, 0, 3);
SPIDER_PARAM_STR_LIST("ssl_cipher", tgt_ssl_ciphers);
SPIDER_PARAM_STR_LIST("ssl_capath", tgt_ssl_capaths);
SPIDER_PARAM_STR("bka_engine", bka_engine);
SPIDER_PARAM_LONGLONG("first_read", first_read, 0);
error_num= parse.fail(true);
goto error;
case 11:
SPIDER_PARAM_INT_WITH_MAX("query_cache", query_cache, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("crd_bg_mode", crd_bg_mode, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("sts_bg_mode", sts_bg_mode, 0, 2);
SPIDER_PARAM_LONG_LIST_WITH_MAX("link_status", link_statuses, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("casual_read", casual_read, 0, 63);
SPIDER_PARAM_DEPRECATED_WARNING("buffer_size", 1007);
SPIDER_PARAM_INT("buffer_size", buffer_size, 0);
error_num= parse.fail(true);
goto error;
case 12:
SPIDER_PARAM_DOUBLE("sts_interval", sts_interval, 0);
SPIDER_PARAM_DOUBLE("crd_interval", crd_interval, 0);
SPIDER_PARAM_INT_WITH_MAX("low_mem_read", low_mem_read, 0, 1);
SPIDER_PARAM_STR_LIST("default_file", tgt_default_files);
error_num= parse.fail(true);
goto error;
case 13:
SPIDER_PARAM_STR_LIST("default_group", tgt_default_groups);
SPIDER_PARAM_STR_LIST("sequence_name", tgt_sequence_names);
error_num= parse.fail(true);
goto error;
case 14:
SPIDER_PARAM_DEPRECATED_WARNING("internal_limit", 1007);
SPIDER_PARAM_LONGLONG("internal_limit", internal_limit, 0);
SPIDER_PARAM_LONGLONG("bgs_first_read", bgs_first_read, 0);
SPIDER_PARAM_INT_WITH_MAX("read_only_mode", read_only_mode, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("access_balance", access_balances, 0,
2147483647);
SPIDER_PARAM_STR_LIST("static_link_id", static_link_ids);
SPIDER_PARAM_INT_WITH_MAX("store_last_crd", store_last_crd, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("store_last_sts", store_last_sts, 0, 1);
error_num= parse.fail(true);
goto error;
case 15:
SPIDER_PARAM_DEPRECATED_WARNING("internal_offset", 1007);
SPIDER_PARAM_LONGLONG("internal_offset", internal_offset, 0);
SPIDER_PARAM_INT_WITH_MAX("reset_sql_alloc", reset_sql_alloc, 0, 1);
SPIDER_PARAM_DEPRECATED_WARNING("semi_table_lock", 1007);
SPIDER_PARAM_INT_WITH_MAX("semi_table_lock", semi_table_lock, 0, 1);
SPIDER_PARAM_LONGLONG("quick_page_byte", quick_page_byte, 0);
SPIDER_PARAM_LONGLONG("quick_page_size", quick_page_size, 0);
SPIDER_PARAM_LONGLONG("bgs_second_read", bgs_second_read, 0);
SPIDER_PARAM_LONG_LIST_WITH_MAX("monitoring_flag", monitoring_flag, 0, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("monitoring_kind", monitoring_kind, 0, 3);
SPIDER_PARAM_DOUBLE("semi_split_read", semi_split_read, 0);
SPIDER_PARAM_LONG_LIST_WITH_MAX("connect_timeout", connect_timeouts,
0, 2147483647);
SPIDER_PARAM_LONG_LIST_WITH_MAX("strict_group_by",
strict_group_bys, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("error_read_mode", error_read_mode, 0, 1);
error_num= parse.fail(true);
goto error;
case 16:
SPIDER_PARAM_INT_WITH_MAX(
"multi_split_read", multi_split_read, 0, 2147483647);
SPIDER_PARAM_INT_WITH_MAX(
"selupd_lock_mode", selupd_lock_mode, 0, 2);
SPIDER_PARAM_INT_WITH_MAX(
"table_count_mode", table_count_mode, 0, 3);
SPIDER_PARAM_INT_WITH_MAX(
"use_pushdown_udf", use_pushdown_udf, 0, 1);
SPIDER_PARAM_LONGLONG_LIST_WITH_MAX(
"monitoring_limit", monitoring_limit, 0, 9223372036854775807LL);
SPIDER_PARAM_INT_WITH_MAX(
"bulk_update_mode", bulk_update_mode, 0, 2);
SPIDER_PARAM_INT("bulk_update_size", bulk_update_size, 0);
SPIDER_PARAM_LONG_LIST_WITH_MAX("net_read_timeout",
net_read_timeouts, 0, 2147483647);
SPIDER_PARAM_INT_WITH_MAX(
"error_write_mode", error_write_mode, 0, 1);
SPIDER_PARAM_INT_WITH_MAX(
"query_cache_sync", query_cache_sync, 0, 3);
error_num= parse.fail(true);
goto error;
case 17:
SPIDER_PARAM_INT_WITH_MAX(
"internal_optimize", internal_optimize, 0, 1);
SPIDER_PARAM_INT_WITH_MAX(
"use_table_charset", use_table_charset, 0, 1);
SPIDER_PARAM_INT_WITH_MAX(
"direct_dup_insert", direct_dup_insert, 0, 1);
SPIDER_PARAM_INT("active_link_count", active_link_count, 1);
SPIDER_PARAM_LONG_LIST_WITH_MAX("net_write_timeout",
net_write_timeouts, 0, 2147483647);
#ifdef HA_CAN_FORCE_BULK_DELETE
SPIDER_PARAM_INT_WITH_MAX(
"force_bulk_delete", force_bulk_delete, 0, 1);
......@@ -2575,9 +2994,6 @@ int spider_parse_connect_info(
}
}
SPIDER_OPTION_STR_LIST("server", remote_server, server_names);
SPIDER_OPTION_STR_LIST("database", remote_database, tgt_dbs);
SPIDER_OPTION_STR_LIST("table", remote_table, tgt_table_names);
/* check all_link_count */
share->all_link_count = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment