Merge 10.3 into 10.4
This commit is contained in:
commit
c7ba237793
@ -358,7 +358,7 @@ SET @rowlog_decrypt_1=
|
|||||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||||
connection con1;
|
connection con1;
|
||||||
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2f_created WAIT_FOR dml3_done';
|
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2f_created WAIT_FOR dml3_done';
|
||||||
ALTER TABLE t1 ADD INDEX c2f(c2);
|
ALTER TABLE t1 ADD INDEX c2f(c22f), CHANGE c2 c22f INT;
|
||||||
connection default;
|
connection default;
|
||||||
SET DEBUG_SYNC = 'now WAIT_FOR c2f_created';
|
SET DEBUG_SYNC = 'now WAIT_FOR c2f_created';
|
||||||
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
||||||
@ -397,7 +397,6 @@ SET DEBUG_SYNC = 'now SIGNAL dml3_done';
|
|||||||
connection con1;
|
connection con1;
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1831 Duplicate index `c2f`. This is deprecated and will be disallowed in a future release
|
Note 1831 Duplicate index `c2f`. This is deprecated and will be disallowed in a future release
|
||||||
ALTER TABLE t1 CHANGE c2 c22f INT;
|
|
||||||
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
||||||
name count
|
name count
|
||||||
ddl_background_drop_indexes 0
|
ddl_background_drop_indexes 0
|
||||||
|
@ -318,9 +318,7 @@ connection con1;
|
|||||||
# Accumulate and apply some modification log.
|
# Accumulate and apply some modification log.
|
||||||
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2f_created WAIT_FOR dml3_done';
|
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2f_created WAIT_FOR dml3_done';
|
||||||
--send
|
--send
|
||||||
# FIXME: MDEV-13668
|
ALTER TABLE t1 ADD INDEX c2f(c22f), CHANGE c2 c22f INT;
|
||||||
#ALTER TABLE t1 ADD INDEX c2f(c22f), CHANGE c2 c22f INT;
|
|
||||||
ALTER TABLE t1 ADD INDEX c2f(c2);
|
|
||||||
|
|
||||||
connection default;
|
connection default;
|
||||||
SET DEBUG_SYNC = 'now WAIT_FOR c2f_created';
|
SET DEBUG_SYNC = 'now WAIT_FOR c2f_created';
|
||||||
@ -345,8 +343,6 @@ SET DEBUG_SYNC = 'now SIGNAL dml3_done';
|
|||||||
|
|
||||||
connection con1;
|
connection con1;
|
||||||
reap;
|
reap;
|
||||||
# FIXME: MDEV-13668
|
|
||||||
ALTER TABLE t1 CHANGE c2 c22f INT;
|
|
||||||
|
|
||||||
eval $innodb_metrics_select;
|
eval $innodb_metrics_select;
|
||||||
|
|
||||||
|
@ -6,3 +6,17 @@ INSERT INTO mdev21563 VALUES('This is a test');
|
|||||||
ALTER TABLE mdev21563 DISCARD TABLESPACE;
|
ALTER TABLE mdev21563 DISCARD TABLESPACE;
|
||||||
# restart
|
# restart
|
||||||
DROP TABLE mdev21563;
|
DROP TABLE mdev21563;
|
||||||
|
#
|
||||||
|
# MDEV-29342 Assertion failure in file que0que.cc line 728
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(f1 CHAR(100), FULLTEXT idx(f1))ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES('mysql'), ('innodb');
|
||||||
|
set debug_dbug="+d,fts_instrument_sync_debug";
|
||||||
|
INSERT INTO t1 VALUES('test');
|
||||||
|
set debug_dbug="-d,fts_instrument_sync_debug";
|
||||||
|
INSERT INTO t1 VALUES('This is a fts issue');
|
||||||
|
# restart
|
||||||
|
set debug_dbug="+d,fts_instrument_sync_debug";
|
||||||
|
UPDATE t1 SET f1="mariadb";
|
||||||
|
set debug_dbug="-d,fts_instrument_sync_debug";
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -10,3 +10,18 @@ INSERT INTO mdev21563 VALUES('This is a test');
|
|||||||
ALTER TABLE mdev21563 DISCARD TABLESPACE;
|
ALTER TABLE mdev21563 DISCARD TABLESPACE;
|
||||||
--source include/restart_mysqld.inc
|
--source include/restart_mysqld.inc
|
||||||
DROP TABLE mdev21563;
|
DROP TABLE mdev21563;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-29342 Assertion failure in file que0que.cc line 728
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(f1 CHAR(100), FULLTEXT idx(f1))ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES('mysql'), ('innodb');
|
||||||
|
set debug_dbug="+d,fts_instrument_sync_debug";
|
||||||
|
INSERT INTO t1 VALUES('test');
|
||||||
|
set debug_dbug="-d,fts_instrument_sync_debug";
|
||||||
|
INSERT INTO t1 VALUES('This is a fts issue');
|
||||||
|
--source include/restart_mysqld.inc
|
||||||
|
set debug_dbug="+d,fts_instrument_sync_debug";
|
||||||
|
UPDATE t1 SET f1="mariadb";
|
||||||
|
set debug_dbug="-d,fts_instrument_sync_debug";
|
||||||
|
DROP TABLE t1;
|
||||||
|
39
mysql-test/suite/rpl/r/rpl_filter_revoke_missing_user.result
Normal file
39
mysql-test/suite/rpl/r/rpl_filter_revoke_missing_user.result
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
include/master-slave.inc
|
||||||
|
[connection master]
|
||||||
|
#
|
||||||
|
# Set replica to ignore system tables
|
||||||
|
connection slave;
|
||||||
|
include/stop_slave.inc
|
||||||
|
SET @@GLOBAL.replicate_wild_ignore_table="mysql.%";
|
||||||
|
include/start_slave.inc
|
||||||
|
#
|
||||||
|
# Trying to execute REVOKE ALL PRIVILEGES on a non-existent user and
|
||||||
|
# DROP USER on a list of users where not all users exist should error
|
||||||
|
# and be written into the binary log
|
||||||
|
connection master;
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'nonexistentuser'@'%';
|
||||||
|
ERROR HY000: Can't revoke all privileges for one or more of the requested users
|
||||||
|
CREATE USER 'testuser'@'localhost' IDENTIFIED by '';
|
||||||
|
DROP USER 'testuser'@'localhost', 'nonexistentuser'@'%';
|
||||||
|
ERROR HY000: Operation DROP USER failed for 'nonexistentuser'@'%'
|
||||||
|
#
|
||||||
|
# Ensure the events exist in the primary's binary log
|
||||||
|
FLUSH BINARY LOGS;
|
||||||
|
# MYSQL_BINLOG MYSQLD_DATADIR/binlog_file > MYSQL_TMP_DIR/mysqlbinlog_out.sql
|
||||||
|
# There should be three Query events: REVOKE, CREATE USER, and DROP USER
|
||||||
|
FOUND 3 /Query/ in mysqlbinlog_out.sql
|
||||||
|
FOUND 1 /REVOKE ALL PRIVILEGES/ in mysqlbinlog_out.sql
|
||||||
|
FOUND 1 /CREATE USER/ in mysqlbinlog_out.sql
|
||||||
|
FOUND 1 /DROP USER/ in mysqlbinlog_out.sql
|
||||||
|
#
|
||||||
|
# Ensure that the replica receives the event without error
|
||||||
|
connection slave;
|
||||||
|
Last_SQL_Error =
|
||||||
|
Last_SQL_Errno = 0
|
||||||
|
#
|
||||||
|
# Clean up
|
||||||
|
connection slave;
|
||||||
|
include/stop_slave.inc
|
||||||
|
SET @@GLOBAL.replicate_wild_ignore_table="";
|
||||||
|
include/start_slave.inc
|
||||||
|
include/rpl_end.inc
|
92
mysql-test/suite/rpl/t/rpl_filter_revoke_missing_user.test
Normal file
92
mysql-test/suite/rpl/t/rpl_filter_revoke_missing_user.test
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#
|
||||||
|
# Purpose:
|
||||||
|
# This test ensures that a binlogged Query_log_event which failed on the
|
||||||
|
# primary server does not break replication if it is ignored by Grant_tables
|
||||||
|
# on the replica. The bug reported by MDEV-28530 shows this with
|
||||||
|
# REVOKE ALL PRIVILEGES.. using a non-existent user. The primary will binlog
|
||||||
|
# the REVOKE command with an error code, and the replica will think the command
|
||||||
|
# executed with success because the replication filter will ignore the command
|
||||||
|
# while accessing the Grant_tables classes. When the replica performs an error
|
||||||
|
# check, it sees the difference between the error codes, and replication
|
||||||
|
# breaks.
|
||||||
|
#
|
||||||
|
# Methodology:
|
||||||
|
# Using a replica configured with replicate_wild_ignore_table="schema.%",
|
||||||
|
# on the primary, execute REVOKE ALL PRVILEGES using a non-existent user and
|
||||||
|
# DROP USER using a list of users where not all users exist, and ensure that
|
||||||
|
# the replica acknowledges and ignores the events without erroring.
|
||||||
|
#
|
||||||
|
# References:
|
||||||
|
# MDEV-28530: Revoking privileges from a non-existing user on a master breaks
|
||||||
|
# replication on the slave in the presence of replication filters
|
||||||
|
#
|
||||||
|
|
||||||
|
source include/master-slave.inc;
|
||||||
|
source include/have_binlog_format_statement.inc;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Set replica to ignore system tables
|
||||||
|
connection slave;
|
||||||
|
let $old_filter= query_get_value(SHOW SLAVE STATUS, Replicate_Wild_Ignore_Table, 1);
|
||||||
|
source include/stop_slave.inc;
|
||||||
|
SET @@GLOBAL.replicate_wild_ignore_table="mysql.%";
|
||||||
|
source include/start_slave.inc;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Trying to execute REVOKE ALL PRIVILEGES on a non-existent user and
|
||||||
|
--echo # DROP USER on a list of users where not all users exist should error
|
||||||
|
--echo # and be written into the binary log
|
||||||
|
--connection master
|
||||||
|
|
||||||
|
--error 1269
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'nonexistentuser'@'%';
|
||||||
|
|
||||||
|
CREATE USER 'testuser'@'localhost' IDENTIFIED by '';
|
||||||
|
--error 1396
|
||||||
|
DROP USER 'testuser'@'localhost', 'nonexistentuser'@'%';
|
||||||
|
--save_master_pos
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Ensure the events exist in the primary's binary log
|
||||||
|
--let $MYSQLD_DATADIR= `select @@datadir`
|
||||||
|
--let $binlog_file=query_get_value(SHOW MASTER STATUS, File, 1)
|
||||||
|
FLUSH BINARY LOGS;
|
||||||
|
--echo # MYSQL_BINLOG MYSQLD_DATADIR/binlog_file > MYSQL_TMP_DIR/mysqlbinlog_out.sql
|
||||||
|
--exec $MYSQL_BINLOG $MYSQLD_DATADIR/$binlog_file > $MYSQL_TMP_DIR/mysqlbinlog_out.sql
|
||||||
|
|
||||||
|
--echo # There should be three Query events: REVOKE, CREATE USER, and DROP USER
|
||||||
|
--let SEARCH_FILE= $MYSQL_TMP_DIR/mysqlbinlog_out.sql
|
||||||
|
|
||||||
|
--let SEARCH_PATTERN= Query
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
--let SEARCH_PATTERN= REVOKE ALL PRIVILEGES
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
--let SEARCH_PATTERN= CREATE USER
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
--let SEARCH_PATTERN= DROP USER
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Ensure that the replica receives the event without error
|
||||||
|
connection slave;
|
||||||
|
--sync_with_master
|
||||||
|
let $error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Error, 1);
|
||||||
|
--echo Last_SQL_Error = $error
|
||||||
|
let $errno= query_get_value(SHOW SLAVE STATUS, Last_SQL_Errno, 1);
|
||||||
|
--echo Last_SQL_Errno = $errno
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Clean up
|
||||||
|
--connection slave
|
||||||
|
source include/stop_slave.inc;
|
||||||
|
--eval SET @@GLOBAL.replicate_wild_ignore_table="$old_filter"
|
||||||
|
source include/start_slave.inc;
|
||||||
|
|
||||||
|
--source include/rpl_end.inc
|
@ -106,7 +106,7 @@ static int disks_table_add_row_stat(
|
|||||||
#else
|
#else
|
||||||
if (info.f_flags & MNT_RDONLY)
|
if (info.f_flags & MNT_RDONLY)
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
pTable->field[0]->store(zDisk, strlen(zDisk), system_charset_info);
|
pTable->field[0]->store(zDisk, strlen(zDisk), system_charset_info);
|
||||||
pTable->field[1]->store(zPath, strlen(zPath), system_charset_info);
|
pTable->field[1]->store(zPath, strlen(zPath), system_charset_info);
|
||||||
@ -212,15 +212,15 @@ static int disks_fill_table(THD* pThd, TABLE_LIST* pTables, Item* pCond)
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
struct stat f;
|
struct stat f;
|
||||||
const char *path, *point;
|
const char *path, *point;
|
||||||
#ifdef HAVE_SETMNTENT
|
#ifdef HAVE_SETMNTENT
|
||||||
path= pEnt->mnt_dir;
|
path= pEnt->mnt_dir;
|
||||||
point= pEnt->mnt_fsname;
|
point= pEnt->mnt_fsname;
|
||||||
#else
|
#else
|
||||||
path= pEnt->mnt_mountp;
|
path= pEnt->mnt_mountp;
|
||||||
point= pEnt->mnt_special;
|
point= pEnt->mnt_special;
|
||||||
#endif
|
#endif
|
||||||
// Try to keep to real storage by excluding
|
// Try to keep to real storage by excluding
|
||||||
// read only mounts, and mount points that aren't directories
|
// read only mounts, and mount points that aren't directories
|
||||||
if (hasmntopt(pEnt, MNTOPT_RO) != NULL)
|
if (hasmntopt(pEnt, MNTOPT_RO) != NULL)
|
||||||
continue;
|
continue;
|
||||||
|
@ -5740,6 +5740,13 @@ int Query_log_event::do_apply_event(rpl_group_info *rgi,
|
|||||||
thd->update_server_status();
|
thd->update_server_status();
|
||||||
log_slow_statement(thd);
|
log_slow_statement(thd);
|
||||||
thd->lex->restore_set_statement_var();
|
thd->lex->restore_set_statement_var();
|
||||||
|
|
||||||
|
/*
|
||||||
|
When THD::slave_expected_error gets reset inside execution stack
|
||||||
|
that is the case of to be ignored event. In this case the expected
|
||||||
|
error must change to the reset value as well.
|
||||||
|
*/
|
||||||
|
expected_error= thd->slave_expected_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
thd->variables.option_bits&= ~OPTION_MASTER_SQL_ERROR;
|
thd->variables.option_bits&= ~OPTION_MASTER_SQL_ERROR;
|
||||||
|
@ -7135,8 +7135,9 @@ ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS
|
|||||||
chi "语句不安全,因为它在访问同一事务中访问事务表后访问非事务性表"
|
chi "语句不安全,因为它在访问同一事务中访问事务表后访问非事务性表"
|
||||||
eng "Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction"
|
eng "Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction"
|
||||||
ER_MESSAGE_AND_STATEMENT
|
ER_MESSAGE_AND_STATEMENT
|
||||||
chi "%s语句:%s"
|
chi "%s.语句:%s"
|
||||||
eng "%s Statement: %s"
|
eng "%s. Statement: %s"
|
||||||
|
|
||||||
ER_SLAVE_CONVERSION_FAILED
|
ER_SLAVE_CONVERSION_FAILED
|
||||||
chi "列%d表'%-.192s.%-.192s'无法从'%-.50s'类型为'%-.50s'"
|
chi "列%d表'%-.192s.%-.192s'无法从'%-.50s'类型为'%-.50s'"
|
||||||
eng "Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.50s' to type '%-.50s'"
|
eng "Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.50s' to type '%-.50s'"
|
||||||
|
@ -1969,9 +1969,11 @@ class Grant_tables
|
|||||||
some kind of updates to the mysql.% tables.
|
some kind of updates to the mysql.% tables.
|
||||||
*/
|
*/
|
||||||
Rpl_filter *rpl_filter= thd->system_thread_info.rpl_sql_info->rpl_filter;
|
Rpl_filter *rpl_filter= thd->system_thread_info.rpl_sql_info->rpl_filter;
|
||||||
|
|
||||||
if (rpl_filter->is_on() && !rpl_filter->tables_ok(0, tables))
|
if (rpl_filter->is_on() && !rpl_filter->tables_ok(0, tables))
|
||||||
|
{
|
||||||
|
thd->slave_expected_error= 0;
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
@ -3218,6 +3218,8 @@ public:
|
|||||||
/*
|
/*
|
||||||
In case of a slave, set to the error code the master got when executing
|
In case of a slave, set to the error code the master got when executing
|
||||||
the query. 0 if no error on the master.
|
the query. 0 if no error on the master.
|
||||||
|
The stored into variable master error code may get reset inside
|
||||||
|
execution stack when the event turns out to be ignored.
|
||||||
*/
|
*/
|
||||||
int slave_expected_error;
|
int slave_expected_error;
|
||||||
enum_sql_command last_sql_command; // Last sql_command exceuted in mysql_execute_command()
|
enum_sql_command last_sql_command; // Last sql_command exceuted in mysql_execute_command()
|
||||||
|
@ -2655,7 +2655,7 @@ retry:
|
|||||||
}
|
}
|
||||||
mutex_exit(&cache->doc_id_lock);
|
mutex_exit(&cache->doc_id_lock);
|
||||||
|
|
||||||
if (cmp_doc_id > *doc_id) {
|
if (cmp_doc_id && cmp_doc_id >= *doc_id) {
|
||||||
error = fts_update_sync_doc_id(
|
error = fts_update_sync_doc_id(
|
||||||
table, cache->synced_doc_id, trx);
|
table, cache->synced_doc_id, trx);
|
||||||
}
|
}
|
||||||
|
84
storage/spider/mysql-test/spider/bugfix/r/mdev_27172.result
Normal file
84
storage/spider/mysql-test/spider/bugfix/r/mdev_27172.result
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#
|
||||||
|
# MDEV-27172 Prefix indices on Spider tables may lead to wrong query results
|
||||||
|
#
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
child2_1
|
||||||
|
child2_2
|
||||||
|
child2_3
|
||||||
|
for child3
|
||||||
|
connection child2_1;
|
||||||
|
SET @general_log_backup = @@global.general_log;
|
||||||
|
SET @log_output_backup = @@global.log_output;
|
||||||
|
SET @@global.general_log = 1;
|
||||||
|
SET @@global.log_output = "TABLE";
|
||||||
|
CREATE DATABASE auto_test_remote;
|
||||||
|
USE auto_test_remote;
|
||||||
|
CREATE TABLE tbl_a (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting VARCHAR(255),
|
||||||
|
KEY(greeting)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
CREATE TABLE tbl_b (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting VARCHAR(255),
|
||||||
|
KEY k (greeting(5))
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
CREATE TABLE tbl_c (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting TEXT,
|
||||||
|
KEY k (greeting(5))
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
TRUNCATE TABLE mysql.general_log;
|
||||||
|
connection master_1;
|
||||||
|
CREATE DATABASE auto_test_local;
|
||||||
|
USE auto_test_local;
|
||||||
|
CREATE TABLE tbl_a (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting VARCHAR(255),
|
||||||
|
KEY k (greeting)
|
||||||
|
) ENGINE=Spider DEFAULT CHARSET=utf8 COMMENT='table "tbl_a", srv "s_2_1"';
|
||||||
|
INSERT INTO tbl_a VALUES (1, "Hi!"),(2, "Aloha!"),(3, "Aloha!!!");
|
||||||
|
SELECT * FROM tbl_a WHERE greeting = "Aloha!"
|
||||||
|
AND CASE greeting WHEN "Aloha!" THEN "one" ELSE 'more' END = "one";
|
||||||
|
id greeting
|
||||||
|
2 Aloha!
|
||||||
|
CREATE TABLE tbl_b (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting VARCHAR(255),
|
||||||
|
KEY k (greeting(5))
|
||||||
|
) ENGINE=Spider DEFAULT CHARSET=utf8 COMMENT='table "tbl_b", srv "s_2_1"';
|
||||||
|
INSERT INTO tbl_b VALUES (1, "Hi!"),(2, "Aloha!"),(3, "Aloha!!!");
|
||||||
|
SELECT * FROM tbl_b WHERE greeting = "Aloha!"
|
||||||
|
AND CASE greeting WHEN "Aloha!" THEN "one" ELSE 'more' END = "one";
|
||||||
|
id greeting
|
||||||
|
2 Aloha!
|
||||||
|
CREATE TABLE tbl_c (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting TEXT,
|
||||||
|
KEY k (greeting(5))
|
||||||
|
) ENGINE=Spider DEFAULT CHARSET=utf8 COMMENT='table "tbl_c", srv "s_2_1"';
|
||||||
|
INSERT INTO tbl_c VALUES (1, "Hi!"),(2, "Aloha!"),(3, "Aloha!!!");
|
||||||
|
SELECT * FROM tbl_c WHERE greeting = "Aloha!"
|
||||||
|
AND CASE greeting WHEN "Aloha!" THEN "one" ELSE 'more' END = "one";
|
||||||
|
id greeting
|
||||||
|
2 Aloha!
|
||||||
|
connection child2_1;
|
||||||
|
SELECT argument FROM mysql.general_log WHERE argument LIKE 'select %';
|
||||||
|
argument
|
||||||
|
select `id`,`greeting` from `auto_test_remote`.`tbl_a` where `greeting` = 'Aloha!' and ((`greeting` = 'Aloha!'))
|
||||||
|
select `id`,`greeting` from `auto_test_remote`.`tbl_b` where `greeting` like 'Aloha%' and ((`greeting` = 'Aloha!'))
|
||||||
|
select `id`,`greeting` from `auto_test_remote`.`tbl_c` where `greeting` like 'Aloha%' and ((`greeting` = 'Aloha!'))
|
||||||
|
SELECT argument FROM mysql.general_log WHERE argument LIKE 'select %'
|
||||||
|
connection child2_1;
|
||||||
|
SET @@global.general_log = @general_log_backup;
|
||||||
|
SET @@global.log_output = @log_output_backup;
|
||||||
|
DROP DATABASE auto_test_remote;
|
||||||
|
connection master_1;
|
||||||
|
DROP DATABASE auto_test_local;
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
child2_1
|
||||||
|
child2_2
|
||||||
|
child2_3
|
||||||
|
for child3
|
3
storage/spider/mysql-test/spider/bugfix/t/mdev_27172.cnf
Normal file
3
storage/spider/mysql-test/spider/bugfix/t/mdev_27172.cnf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
!include include/default_mysqld.cnf
|
||||||
|
!include ../my_1_1.cnf
|
||||||
|
!include ../my_2_1.cnf
|
92
storage/spider/mysql-test/spider/bugfix/t/mdev_27172.test
Normal file
92
storage/spider/mysql-test/spider/bugfix/t/mdev_27172.test
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
--echo #
|
||||||
|
--echo # MDEV-27172 Prefix indices on Spider tables may lead to wrong query results
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source ../../t/test_init.inc
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--connection child2_1
|
||||||
|
SET @general_log_backup = @@global.general_log;
|
||||||
|
SET @log_output_backup = @@global.log_output;
|
||||||
|
SET @@global.general_log = 1;
|
||||||
|
SET @@global.log_output = "TABLE";
|
||||||
|
|
||||||
|
CREATE DATABASE auto_test_remote;
|
||||||
|
USE auto_test_remote;
|
||||||
|
|
||||||
|
eval CREATE TABLE tbl_a (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting VARCHAR(255),
|
||||||
|
KEY(greeting)
|
||||||
|
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
|
||||||
|
|
||||||
|
eval CREATE TABLE tbl_b (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting VARCHAR(255),
|
||||||
|
KEY k (greeting(5))
|
||||||
|
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
|
||||||
|
|
||||||
|
eval CREATE TABLE tbl_c (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting TEXT,
|
||||||
|
KEY k (greeting(5))
|
||||||
|
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
|
||||||
|
|
||||||
|
TRUNCATE TABLE mysql.general_log;
|
||||||
|
|
||||||
|
--connection master_1
|
||||||
|
CREATE DATABASE auto_test_local;
|
||||||
|
USE auto_test_local;
|
||||||
|
|
||||||
|
# = (equality)
|
||||||
|
eval CREATE TABLE tbl_a (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting VARCHAR(255),
|
||||||
|
KEY k (greeting)
|
||||||
|
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"';
|
||||||
|
|
||||||
|
INSERT INTO tbl_a VALUES (1, "Hi!"),(2, "Aloha!"),(3, "Aloha!!!");
|
||||||
|
SELECT * FROM tbl_a WHERE greeting = "Aloha!"
|
||||||
|
AND CASE greeting WHEN "Aloha!" THEN "one" ELSE 'more' END = "one"; # hack to disable GBH
|
||||||
|
|
||||||
|
# LIKE
|
||||||
|
eval CREATE TABLE tbl_b (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting VARCHAR(255),
|
||||||
|
KEY k (greeting(5))
|
||||||
|
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_b", srv "s_2_1"';
|
||||||
|
|
||||||
|
INSERT INTO tbl_b VALUES (1, "Hi!"),(2, "Aloha!"),(3, "Aloha!!!");
|
||||||
|
SELECT * FROM tbl_b WHERE greeting = "Aloha!"
|
||||||
|
AND CASE greeting WHEN "Aloha!" THEN "one" ELSE 'more' END = "one"; # hack to disable GBH
|
||||||
|
|
||||||
|
# LIKE
|
||||||
|
eval CREATE TABLE tbl_c (
|
||||||
|
id int NOT NULL,
|
||||||
|
greeting TEXT,
|
||||||
|
KEY k (greeting(5))
|
||||||
|
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_c", srv "s_2_1"';
|
||||||
|
|
||||||
|
INSERT INTO tbl_c VALUES (1, "Hi!"),(2, "Aloha!"),(3, "Aloha!!!");
|
||||||
|
SELECT * FROM tbl_c WHERE greeting = "Aloha!"
|
||||||
|
AND CASE greeting WHEN "Aloha!" THEN "one" ELSE 'more' END = "one"; # hack to disable GBH
|
||||||
|
|
||||||
|
--connection child2_1
|
||||||
|
SELECT argument FROM mysql.general_log WHERE argument LIKE 'select %';
|
||||||
|
|
||||||
|
--connection child2_1
|
||||||
|
SET @@global.general_log = @general_log_backup;
|
||||||
|
SET @@global.log_output = @log_output_backup;
|
||||||
|
DROP DATABASE auto_test_remote;
|
||||||
|
|
||||||
|
--connection master_1
|
||||||
|
DROP DATABASE auto_test_local;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source ../../t/test_deinit.inc
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
@ -1885,9 +1885,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str, field, ptr,
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
} else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
|
} else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
|
||||||
{
|
{
|
||||||
@ -1897,16 +1896,15 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == start_key)
|
if (use_key == start_key)
|
||||||
{
|
{
|
||||||
#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS
|
#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
@ -1916,7 +1914,7 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
@ -1944,14 +1942,24 @@ int spider_db_append_key_where_internal(
|
|||||||
if (sql_kind == SPIDER_SQL_KIND_SQL)
|
if (sql_kind == SPIDER_SQL_KIND_SQL)
|
||||||
{
|
{
|
||||||
if (str->reserve(store_length + key_name_length +
|
if (str->reserve(store_length + key_name_length +
|
||||||
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
|
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2))
|
||||||
SPIDER_SQL_EQUAL_LEN))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
|
||||||
if (spider_dbton[dbton_id].db_util->
|
bool is_like= MY_TEST(key_part->key_part_flag & HA_PART_KEY_SEG);
|
||||||
append_column_value(spider, str, field, ptr,
|
if (is_like)
|
||||||
share->access_charset))
|
{
|
||||||
|
if (str->append(SPIDER_SQL_LIKE_STR, SPIDER_SQL_LIKE_LEN))
|
||||||
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (str->append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN))
|
||||||
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
}
|
||||||
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
|
spider, str, field, ptr, is_like, share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
} else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
|
} else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
|
||||||
{
|
{
|
||||||
@ -1961,9 +1969,9 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, FALSE,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == start_key)
|
if (use_key == start_key)
|
||||||
@ -1976,8 +1984,8 @@ int spider_db_append_key_where_internal(
|
|||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
}
|
}
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
||||||
@ -1986,8 +1994,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2022,9 +2030,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(op_str, op_len);
|
str->q_append(op_str, op_len);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str, field, ptr,
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
if (use_both)
|
if (use_both)
|
||||||
start_key_part_map = 0;
|
start_key_part_map = 0;
|
||||||
@ -2041,9 +2048,9 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
|
str_part2->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, FALSE,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == start_key)
|
if (use_key == start_key)
|
||||||
@ -2056,8 +2063,8 @@ int spider_db_append_key_where_internal(
|
|||||||
str->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
|
str->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
|
||||||
}
|
}
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
||||||
@ -2066,8 +2073,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
|
str->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2103,9 +2110,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(op_str, op_len);
|
str->q_append(op_str, op_len);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str, field, ptr,
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
if (use_both)
|
if (use_both)
|
||||||
start_key_part_map = 0;
|
start_key_part_map = 0;
|
||||||
@ -2122,9 +2128,9 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
str_part2->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, FALSE,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == start_key)
|
if (use_key == start_key)
|
||||||
@ -2137,8 +2143,8 @@ int spider_db_append_key_where_internal(
|
|||||||
str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
||||||
}
|
}
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
||||||
@ -2147,8 +2153,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2183,9 +2189,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
|
str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str, field, ptr,
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
if (!set_order)
|
if (!set_order)
|
||||||
{
|
{
|
||||||
@ -2201,9 +2206,9 @@ int spider_db_append_key_where_internal(
|
|||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_LTEQUAL_STR,
|
str_part2->q_append(SPIDER_SQL_LTEQUAL_STR,
|
||||||
SPIDER_SQL_LTEQUAL_LEN);
|
SPIDER_SQL_LTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == start_key)
|
if (use_key == start_key)
|
||||||
@ -2217,8 +2222,8 @@ int spider_db_append_key_where_internal(
|
|||||||
SPIDER_SQL_LTEQUAL_LEN);
|
SPIDER_SQL_LTEQUAL_LEN);
|
||||||
}
|
}
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
||||||
@ -2228,8 +2233,8 @@ int spider_db_append_key_where_internal(
|
|||||||
str->q_append(SPIDER_SQL_LTEQUAL_STR,
|
str->q_append(SPIDER_SQL_LTEQUAL_STR,
|
||||||
SPIDER_SQL_LTEQUAL_LEN);
|
SPIDER_SQL_LTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2253,13 +2258,11 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_MBR_CONTAIN_STR,
|
str->q_append(SPIDER_SQL_MBR_CONTAIN_STR,
|
||||||
SPIDER_SQL_MBR_CONTAIN_LEN);
|
SPIDER_SQL_MBR_CONTAIN_LEN);
|
||||||
if (
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
spider_dbton[dbton_id].db_util->
|
spider, str, field, ptr, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, field, ptr,
|
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
||||||
share->access_charset) ||
|
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
|
||||||
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
SPIDER_SQL_CLOSE_PAREN_LEN))
|
||||||
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_CLOSE_PAREN_LEN)
|
|
||||||
)
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
@ -2271,13 +2274,11 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_MBR_INTERSECT_STR,
|
str->q_append(SPIDER_SQL_MBR_INTERSECT_STR,
|
||||||
SPIDER_SQL_MBR_INTERSECT_LEN);
|
SPIDER_SQL_MBR_INTERSECT_LEN);
|
||||||
if (
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
spider_dbton[dbton_id].db_util->
|
spider, str, field, ptr, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, field, ptr,
|
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
||||||
share->access_charset) ||
|
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
|
||||||
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
SPIDER_SQL_CLOSE_PAREN_LEN))
|
||||||
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_CLOSE_PAREN_LEN)
|
|
||||||
)
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
@ -2289,13 +2290,11 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_MBR_WITHIN_STR,
|
str->q_append(SPIDER_SQL_MBR_WITHIN_STR,
|
||||||
SPIDER_SQL_MBR_WITHIN_LEN);
|
SPIDER_SQL_MBR_WITHIN_LEN);
|
||||||
if (
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
spider_dbton[dbton_id].db_util->
|
spider, str, field, ptr, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, field, ptr,
|
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
||||||
share->access_charset) ||
|
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
|
||||||
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
SPIDER_SQL_CLOSE_PAREN_LEN))
|
||||||
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_CLOSE_PAREN_LEN)
|
|
||||||
)
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
@ -2307,13 +2306,11 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_MBR_DISJOINT_STR,
|
str->q_append(SPIDER_SQL_MBR_DISJOINT_STR,
|
||||||
SPIDER_SQL_MBR_DISJOINT_LEN);
|
SPIDER_SQL_MBR_DISJOINT_LEN);
|
||||||
if (
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
spider_dbton[dbton_id].db_util->
|
spider, str, field, ptr, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, field, ptr,
|
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
||||||
share->access_charset) ||
|
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
|
||||||
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
SPIDER_SQL_CLOSE_PAREN_LEN))
|
||||||
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_CLOSE_PAREN_LEN)
|
|
||||||
)
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
@ -2324,13 +2321,11 @@ int spider_db_append_key_where_internal(
|
|||||||
if (str->reserve(SPIDER_SQL_MBR_EQUAL_LEN))
|
if (str->reserve(SPIDER_SQL_MBR_EQUAL_LEN))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_MBR_EQUAL_STR, SPIDER_SQL_MBR_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_MBR_EQUAL_STR, SPIDER_SQL_MBR_EQUAL_LEN);
|
||||||
if (
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
spider_dbton[dbton_id].db_util->
|
spider, str, field, ptr, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, field, ptr,
|
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
||||||
share->access_charset) ||
|
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
|
||||||
str->reserve(SPIDER_SQL_COMMA_LEN + key_name_length +
|
SPIDER_SQL_CLOSE_PAREN_LEN))
|
||||||
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_CLOSE_PAREN_LEN)
|
|
||||||
)
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
@ -2346,9 +2341,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
|
str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str, field, ptr,
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
if (!set_order)
|
if (!set_order)
|
||||||
{
|
{
|
||||||
@ -2364,9 +2358,9 @@ int spider_db_append_key_where_internal(
|
|||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_GTEQUAL_STR,
|
str_part2->q_append(SPIDER_SQL_GTEQUAL_STR,
|
||||||
SPIDER_SQL_GTEQUAL_LEN);
|
SPIDER_SQL_GTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == start_key)
|
if (use_key == start_key)
|
||||||
@ -2380,8 +2374,8 @@ int spider_db_append_key_where_internal(
|
|||||||
SPIDER_SQL_GTEQUAL_LEN);
|
SPIDER_SQL_GTEQUAL_LEN);
|
||||||
}
|
}
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
||||||
@ -2391,8 +2385,8 @@ int spider_db_append_key_where_internal(
|
|||||||
str->q_append(SPIDER_SQL_GTEQUAL_STR,
|
str->q_append(SPIDER_SQL_GTEQUAL_STR,
|
||||||
SPIDER_SQL_GTEQUAL_LEN);
|
SPIDER_SQL_GTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2471,9 +2465,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str, field, ptr,
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
} else {
|
} else {
|
||||||
if (str_part2->reserve(store_length + key_name_length +
|
if (str_part2->reserve(store_length + key_name_length +
|
||||||
@ -2482,17 +2475,17 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == end_key)
|
if (use_key == end_key)
|
||||||
{
|
{
|
||||||
#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS
|
#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
||||||
@ -2501,8 +2494,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2529,9 +2522,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(op_str, op_len);
|
str->q_append(op_str, op_len);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str, field, ptr,
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
if (use_both)
|
if (use_both)
|
||||||
end_key_part_map = 0;
|
end_key_part_map = 0;
|
||||||
@ -2547,9 +2539,9 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
str_part2->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == end_key)
|
if (use_key == end_key)
|
||||||
@ -2562,8 +2554,8 @@ int spider_db_append_key_where_internal(
|
|||||||
str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
||||||
}
|
}
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
||||||
@ -2572,8 +2564,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr,
|
||||||
share->access_charset))
|
false, share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2589,9 +2581,8 @@ int spider_db_append_key_where_internal(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
dbton_share->append_column_name(str, field->field_index);
|
dbton_share->append_column_name(str, field->field_index);
|
||||||
str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
|
str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str, field, ptr,
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
share->access_charset))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
if (!set_order)
|
if (!set_order)
|
||||||
{
|
{
|
||||||
@ -2606,9 +2597,9 @@ int spider_db_append_key_where_internal(
|
|||||||
dbton_share->append_column_name(str_part2, field->field_index);
|
dbton_share->append_column_name(str_part2, field->field_index);
|
||||||
str_part2->q_append(SPIDER_SQL_LTEQUAL_STR,
|
str_part2->q_append(SPIDER_SQL_LTEQUAL_STR,
|
||||||
SPIDER_SQL_LTEQUAL_LEN);
|
SPIDER_SQL_LTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->append_column_value(
|
||||||
append_column_value(spider, str_part2, field, ptr,
|
spider, str_part2, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
if (use_key == end_key)
|
if (use_key == end_key)
|
||||||
@ -2622,8 +2613,8 @@ int spider_db_append_key_where_internal(
|
|||||||
SPIDER_SQL_LTEQUAL_LEN);
|
SPIDER_SQL_LTEQUAL_LEN);
|
||||||
}
|
}
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr, false,
|
||||||
share->access_charset))
|
share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
#else
|
#else
|
||||||
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
|
||||||
@ -2633,8 +2624,8 @@ int spider_db_append_key_where_internal(
|
|||||||
str->q_append(SPIDER_SQL_LTEQUAL_STR,
|
str->q_append(SPIDER_SQL_LTEQUAL_STR,
|
||||||
SPIDER_SQL_LTEQUAL_LEN);
|
SPIDER_SQL_LTEQUAL_LEN);
|
||||||
if (spider_dbton[dbton_id].db_util->
|
if (spider_dbton[dbton_id].db_util->
|
||||||
append_column_value(spider, str_part, field, ptr,
|
append_column_value(spider, str_part, field, ptr,
|
||||||
share->access_charset))
|
false, share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -94,6 +94,8 @@ typedef st_spider_result SPIDER_RESULT;
|
|||||||
|
|
||||||
#define SPIDER_SQL_DOT_STR "."
|
#define SPIDER_SQL_DOT_STR "."
|
||||||
#define SPIDER_SQL_DOT_LEN (sizeof(SPIDER_SQL_DOT_STR) - 1)
|
#define SPIDER_SQL_DOT_LEN (sizeof(SPIDER_SQL_DOT_STR) - 1)
|
||||||
|
#define SPIDER_SQL_PERCENT_STR "%"
|
||||||
|
#define SPIDER_SQL_PERCENT_LEN (sizeof(SPIDER_SQL_PERCENT_STR) - 1)
|
||||||
|
|
||||||
#define SPIDER_SQL_EQUAL_STR " = "
|
#define SPIDER_SQL_EQUAL_STR " = "
|
||||||
#define SPIDER_SQL_EQUAL_LEN (sizeof(SPIDER_SQL_EQUAL_STR) - 1)
|
#define SPIDER_SQL_EQUAL_LEN (sizeof(SPIDER_SQL_EQUAL_STR) - 1)
|
||||||
@ -163,6 +165,8 @@ typedef st_spider_result SPIDER_RESULT;
|
|||||||
#define SPIDER_SQL_IN_LEN (sizeof(SPIDER_SQL_IN_STR) - 1)
|
#define SPIDER_SQL_IN_LEN (sizeof(SPIDER_SQL_IN_STR) - 1)
|
||||||
#define SPIDER_SQL_NOT_IN_STR "not in("
|
#define SPIDER_SQL_NOT_IN_STR "not in("
|
||||||
#define SPIDER_SQL_NOT_IN_LEN (sizeof(SPIDER_SQL_NOT_IN_STR) - 1)
|
#define SPIDER_SQL_NOT_IN_LEN (sizeof(SPIDER_SQL_NOT_IN_STR) - 1)
|
||||||
|
#define SPIDER_SQL_LIKE_STR " like "
|
||||||
|
#define SPIDER_SQL_LIKE_LEN (sizeof(SPIDER_SQL_LIKE_STR) - 1)
|
||||||
#define SPIDER_SQL_NOT_LIKE_STR "not like"
|
#define SPIDER_SQL_NOT_LIKE_STR "not like"
|
||||||
#define SPIDER_SQL_NOT_LIKE_LEN (sizeof(SPIDER_SQL_NOT_LIKE_STR) - 1)
|
#define SPIDER_SQL_NOT_LIKE_LEN (sizeof(SPIDER_SQL_NOT_LIKE_STR) - 1)
|
||||||
#define SPIDER_SQL_AS_CHAR_STR " as char"
|
#define SPIDER_SQL_AS_CHAR_STR " as char"
|
||||||
@ -839,13 +843,10 @@ public:
|
|||||||
virtual int append_escaped_name_quote(
|
virtual int append_escaped_name_quote(
|
||||||
spider_string *str
|
spider_string *str
|
||||||
) = 0;
|
) = 0;
|
||||||
virtual int append_column_value(
|
virtual int append_column_value(ha_spider *spider, spider_string *str,
|
||||||
ha_spider *spider,
|
Field *field, const uchar *new_ptr,
|
||||||
spider_string *str,
|
bool is_like,
|
||||||
Field *field,
|
CHARSET_INFO *access_charset)= 0;
|
||||||
const uchar *new_ptr,
|
|
||||||
CHARSET_INFO *access_charset
|
|
||||||
) = 0;
|
|
||||||
virtual int append_trx_isolation(
|
virtual int append_trx_isolation(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
int trx_isolation
|
int trx_isolation
|
||||||
|
@ -4033,13 +4033,13 @@ int spider_db_mbase_util::append_escaped_name_quote(
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int spider_db_mariadb_util::append_column_value(
|
int spider_db_mariadb_util::append_column_value(ha_spider *spider,
|
||||||
ha_spider *spider,
|
spider_string *str,
|
||||||
spider_string *str,
|
Field *field,
|
||||||
Field *field,
|
const uchar *new_ptr,
|
||||||
const uchar *new_ptr,
|
bool is_like,
|
||||||
CHARSET_INFO *access_charset
|
CHARSET_INFO *access_charset)
|
||||||
) {
|
{
|
||||||
bool float_value = FALSE;
|
bool float_value = FALSE;
|
||||||
int error_num;
|
int error_num;
|
||||||
char buf[MAX_FIELD_WIDTH];
|
char buf[MAX_FIELD_WIDTH];
|
||||||
@ -4065,70 +4065,15 @@ int spider_db_mariadb_util::append_column_value(
|
|||||||
ptr = tmp_str.get_str();
|
ptr = tmp_str.get_str();
|
||||||
} else if (field->type() == MYSQL_TYPE_GEOMETRY)
|
} else if (field->type() == MYSQL_TYPE_GEOMETRY)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
uint mlength = SIZEOF_STORED_DOUBLE, lcnt;
|
|
||||||
uchar *dest = (uchar *) buf;
|
|
||||||
const uchar *source;
|
|
||||||
for (lcnt = 0; lcnt < 4; lcnt++)
|
|
||||||
{
|
|
||||||
mlength = SIZEOF_STORED_DOUBLE;
|
|
||||||
source = new_ptr + mlength + SIZEOF_STORED_DOUBLE * lcnt;
|
|
||||||
while (mlength--)
|
|
||||||
*dest++ = *--source;
|
|
||||||
}
|
|
||||||
tmp_str.length(SIZEOF_STORED_DOUBLE * lcnt);
|
|
||||||
*/
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
double xmin, xmax, ymin, ymax;
|
double xmin, xmax, ymin, ymax;
|
||||||
/*
|
|
||||||
float8store(buf,xmin);
|
|
||||||
float8store(buf+8,xmax);
|
|
||||||
float8store(buf+16,ymin);
|
|
||||||
float8store(buf+24,ymax);
|
|
||||||
memcpy(&xmin,new_ptr,sizeof(xmin));
|
|
||||||
memcpy(&xmax,new_ptr + 8,sizeof(xmax));
|
|
||||||
memcpy(&ymin,new_ptr + 16,sizeof(ymin));
|
|
||||||
memcpy(&ymax,new_ptr + 24,sizeof(ymax));
|
|
||||||
float8get(xmin, buf);
|
|
||||||
float8get(xmax, buf + 8);
|
|
||||||
float8get(ymin, buf + 16);
|
|
||||||
float8get(ymax, buf + 24);
|
|
||||||
DBUG_PRINT("info", ("spider geo is %f %f %f %f",
|
|
||||||
xmin, xmax, ymin, ymax));
|
|
||||||
DBUG_PRINT("info", ("spider geo is %.14g %.14g %.14g %.14g",
|
|
||||||
xmin, xmax, ymin, ymax));
|
|
||||||
*/
|
|
||||||
float8get(xmin, new_ptr);
|
float8get(xmin, new_ptr);
|
||||||
float8get(xmax, new_ptr + 8);
|
float8get(xmax, new_ptr + 8);
|
||||||
float8get(ymin, new_ptr + 16);
|
float8get(ymin, new_ptr + 16);
|
||||||
float8get(ymax, new_ptr + 24);
|
float8get(ymax, new_ptr + 24);
|
||||||
DBUG_PRINT("info", ("spider geo is %f %f %f %f",
|
DBUG_PRINT("info", ("spider geo is %f %f %f %f",
|
||||||
xmin, xmax, ymin, ymax));
|
xmin, xmax, ymin, ymax));
|
||||||
/*
|
|
||||||
float8get(xmin, new_ptr + SIZEOF_STORED_DOUBLE * 4);
|
|
||||||
float8get(xmax, new_ptr + SIZEOF_STORED_DOUBLE * 5);
|
|
||||||
float8get(ymin, new_ptr + SIZEOF_STORED_DOUBLE * 6);
|
|
||||||
float8get(ymax, new_ptr + SIZEOF_STORED_DOUBLE * 7);
|
|
||||||
DBUG_PRINT("info", ("spider geo is %f %f %f %f",
|
|
||||||
xmin, xmax, ymin, ymax));
|
|
||||||
float8get(xmin, new_ptr + SIZEOF_STORED_DOUBLE * 8);
|
|
||||||
float8get(xmax, new_ptr + SIZEOF_STORED_DOUBLE * 9);
|
|
||||||
float8get(ymin, new_ptr + SIZEOF_STORED_DOUBLE * 10);
|
|
||||||
float8get(ymax, new_ptr + SIZEOF_STORED_DOUBLE * 11);
|
|
||||||
DBUG_PRINT("info", ("spider geo is %f %f %f %f",
|
|
||||||
xmin, xmax, ymin, ymax));
|
|
||||||
float8get(xmin, new_ptr + SIZEOF_STORED_DOUBLE * 12);
|
|
||||||
float8get(xmax, new_ptr + SIZEOF_STORED_DOUBLE * 13);
|
|
||||||
float8get(ymin, new_ptr + SIZEOF_STORED_DOUBLE * 14);
|
|
||||||
float8get(ymax, new_ptr + SIZEOF_STORED_DOUBLE * 15);
|
|
||||||
DBUG_PRINT("info", ("spider geo is %f %f %f %f",
|
|
||||||
xmin, xmax, ymin, ymax));
|
|
||||||
*/
|
|
||||||
#endif
|
#endif
|
||||||
/*
|
|
||||||
tmp_str.set_quick((char *) new_ptr, SIZEOF_STORED_DOUBLE * 4,
|
|
||||||
&my_charset_bin);
|
|
||||||
*/
|
|
||||||
tmp_str.length(0);
|
tmp_str.length(0);
|
||||||
tmp_str.q_append((char *) SPIDER_SQL_LINESTRING_HEAD_STR,
|
tmp_str.q_append((char *) SPIDER_SQL_LINESTRING_HEAD_STR,
|
||||||
SPIDER_SQL_LINESTRING_HEAD_LEN);
|
SPIDER_SQL_LINESTRING_HEAD_LEN);
|
||||||
@ -4157,27 +4102,7 @@ int spider_db_mariadb_util::append_column_value(
|
|||||||
|
|
||||||
DBUG_PRINT("info", ("spider field->type() is %d", field->type()));
|
DBUG_PRINT("info", ("spider field->type() is %d", field->type()));
|
||||||
DBUG_PRINT("info", ("spider ptr->length() is %d", ptr->length()));
|
DBUG_PRINT("info", ("spider ptr->length() is %d", ptr->length()));
|
||||||
/*
|
|
||||||
if (
|
|
||||||
field->type() == MYSQL_TYPE_BIT ||
|
|
||||||
(field->type() >= MYSQL_TYPE_TINY_BLOB &&
|
|
||||||
field->type() <= MYSQL_TYPE_BLOB)
|
|
||||||
) {
|
|
||||||
uchar *hex_ptr = (uchar *) ptr->ptr(), *end_ptr;
|
|
||||||
char *str_ptr;
|
|
||||||
DBUG_PRINT("info", ("spider HEX"));
|
|
||||||
if (str->reserve(SPIDER_SQL_HEX_LEN + ptr->length() * 2))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
|
||||||
str->q_append(SPIDER_SQL_HEX_STR, SPIDER_SQL_HEX_LEN);
|
|
||||||
str_ptr = (char *) str->ptr() + str->length();
|
|
||||||
for (end_ptr = hex_ptr + ptr->length(); hex_ptr < end_ptr; hex_ptr++)
|
|
||||||
{
|
|
||||||
*str_ptr++ = spider_dig_upper[(*hex_ptr) >> 4];
|
|
||||||
*str_ptr++ = spider_dig_upper[(*hex_ptr) & 0x0F];
|
|
||||||
}
|
|
||||||
str->length(str->length() + ptr->length() * 2);
|
|
||||||
} else
|
|
||||||
*/
|
|
||||||
if (field->result_type() == STRING_RESULT)
|
if (field->result_type() == STRING_RESULT)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("spider STRING_RESULT"));
|
DBUG_PRINT("info", ("spider STRING_RESULT"));
|
||||||
@ -4208,6 +4133,10 @@ int spider_db_mariadb_util::append_column_value(
|
|||||||
append_escaped_util(str, tmp_str2.get_str())
|
append_escaped_util(str, tmp_str2.get_str())
|
||||||
)
|
)
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
|
||||||
|
if (is_like &&
|
||||||
|
str->append(SPIDER_SQL_PERCENT_STR, SPIDER_SQL_PERCENT_LEN))
|
||||||
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
} else if (str->append(*ptr))
|
} else if (str->append(*ptr))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
if (str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN))
|
if (str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN))
|
||||||
@ -4243,6 +4172,7 @@ int spider_db_mariadb_util::append_column_value(
|
|||||||
{
|
{
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4251,6 +4181,7 @@ int spider_db_mysql_util::append_column_value(
|
|||||||
spider_string *str,
|
spider_string *str,
|
||||||
Field *field,
|
Field *field,
|
||||||
const uchar *new_ptr,
|
const uchar *new_ptr,
|
||||||
|
bool is_like,
|
||||||
CHARSET_INFO *access_charset
|
CHARSET_INFO *access_charset
|
||||||
) {
|
) {
|
||||||
bool float_value = FALSE;
|
bool float_value = FALSE;
|
||||||
@ -4421,6 +4352,9 @@ int spider_db_mysql_util::append_column_value(
|
|||||||
append_escaped_util(str, tmp_str2.get_str())
|
append_escaped_util(str, tmp_str2.get_str())
|
||||||
)
|
)
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
|
if (is_like &&
|
||||||
|
str->append(SPIDER_SQL_PERCENT_STR, SPIDER_SQL_PERCENT_LEN))
|
||||||
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
} else if (str->append(*ptr))
|
} else if (str->append(*ptr))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
if (str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN))
|
if (str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN))
|
||||||
@ -4458,16 +4392,12 @@ int spider_db_mysql_util::append_column_value(
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int spider_db_mbase_util::append_column_value(
|
int spider_db_mbase_util::append_column_value(ha_spider *, spider_string *,
|
||||||
ha_spider *spider,
|
Field *, const uchar *, bool,
|
||||||
spider_string *str,
|
CHARSET_INFO *)
|
||||||
Field *field,
|
{
|
||||||
const uchar *new_ptr,
|
MY_ASSERT_UNREACHABLE();
|
||||||
CHARSET_INFO *access_charset
|
return 0;
|
||||||
) {
|
|
||||||
DBUG_ENTER("spider_db_mbase_util::append_column_value");
|
|
||||||
DBUG_ASSERT(0);
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int spider_db_mbase_util::append_from_with_alias(
|
int spider_db_mbase_util::append_from_with_alias(
|
||||||
@ -9375,12 +9305,10 @@ int spider_mbase_handler::append_insert_for_recovery(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
insert_sql->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN);
|
insert_sql->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN);
|
||||||
} else {
|
} else {
|
||||||
if (
|
if (spider_db_mbase_utility->append_column_value(spider, insert_sql,
|
||||||
spider_db_mbase_utility->
|
*field, NULL, false,
|
||||||
append_column_value(spider, insert_sql, *field, NULL,
|
share->access_charset) ||
|
||||||
share->access_charset) ||
|
insert_sql->reserve(SPIDER_SQL_COMMA_LEN))
|
||||||
insert_sql->reserve(SPIDER_SQL_COMMA_LEN)
|
|
||||||
)
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
insert_sql->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
insert_sql->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
|
||||||
@ -9772,12 +9700,10 @@ int spider_mbase_handler::append_update_set(
|
|||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
MY_BITMAP *tmp_map = dbug_tmp_use_all_columns(table, &table->read_set);
|
MY_BITMAP *tmp_map = dbug_tmp_use_all_columns(table, &table->read_set);
|
||||||
#endif
|
#endif
|
||||||
if (
|
if (spider_db_mbase_utility->append_column_value(
|
||||||
spider_db_mbase_utility->
|
spider, str, *fields, NULL, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, *fields, NULL,
|
str->reserve(SPIDER_SQL_COMMA_LEN))
|
||||||
share->access_charset) ||
|
{
|
||||||
str->reserve(SPIDER_SQL_COMMA_LEN)
|
|
||||||
) {
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
dbug_tmp_restore_column_map(&table->read_set, tmp_map);
|
dbug_tmp_restore_column_map(&table->read_set, tmp_map);
|
||||||
#endif
|
#endif
|
||||||
@ -10576,8 +10502,8 @@ int spider_mbase_handler::append_key_column_values(
|
|||||||
if (error_num > 0)
|
if (error_num > 0)
|
||||||
DBUG_RETURN(error_num);
|
DBUG_RETURN(error_num);
|
||||||
} else {
|
} else {
|
||||||
if (spider_db_mbase_utility->append_column_value(spider, str, field, ptr,
|
if (spider_db_mbase_utility->append_column_value(
|
||||||
share->access_charset))
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10657,8 +10583,8 @@ int spider_mbase_handler::append_key_column_values_with_name(
|
|||||||
if (error_num > 0)
|
if (error_num > 0)
|
||||||
DBUG_RETURN(error_num);
|
DBUG_RETURN(error_num);
|
||||||
} else {
|
} else {
|
||||||
if (spider_db_mbase_utility->append_column_value(spider, str, field, ptr,
|
if (spider_db_mbase_utility->append_column_value(
|
||||||
share->access_charset))
|
spider, str, field, ptr, FALSE, share->access_charset))
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11058,12 +10984,9 @@ int spider_mbase_handler::append_update_where(
|
|||||||
mysql_share->append_column_name(str, (*field)->field_index);
|
mysql_share->append_column_name(str, (*field)->field_index);
|
||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
(*field)->move_field_offset(ptr_diff);
|
(*field)->move_field_offset(ptr_diff);
|
||||||
if (
|
if (spider_db_mbase_utility->append_column_value(
|
||||||
spider_db_mbase_utility->
|
spider, str, *field, NULL, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, *field, NULL,
|
str->reserve(SPIDER_SQL_AND_LEN))
|
||||||
share->access_charset) ||
|
|
||||||
str->reserve(SPIDER_SQL_AND_LEN)
|
|
||||||
)
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
(*field)->move_field_offset(-ptr_diff);
|
(*field)->move_field_offset(-ptr_diff);
|
||||||
}
|
}
|
||||||
@ -11098,12 +11021,9 @@ int spider_mbase_handler::append_update_where(
|
|||||||
mysql_share->append_column_name(str, (*field)->field_index);
|
mysql_share->append_column_name(str, (*field)->field_index);
|
||||||
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
|
||||||
(*field)->move_field_offset(ptr_diff);
|
(*field)->move_field_offset(ptr_diff);
|
||||||
if (
|
if (spider_db_mbase_utility->append_column_value(
|
||||||
spider_db_mbase_utility->
|
spider, str, *field, NULL, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, *field, NULL,
|
str->reserve(SPIDER_SQL_AND_LEN))
|
||||||
share->access_charset) ||
|
|
||||||
str->reserve(SPIDER_SQL_AND_LEN)
|
|
||||||
)
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
(*field)->move_field_offset(-ptr_diff);
|
(*field)->move_field_offset(-ptr_diff);
|
||||||
}
|
}
|
||||||
@ -12535,12 +12455,10 @@ int spider_mbase_handler::append_insert_values(
|
|||||||
}
|
}
|
||||||
str->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN);
|
str->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN);
|
||||||
} else {
|
} else {
|
||||||
if (
|
if (spider_db_mbase_utility->append_column_value(
|
||||||
spider_db_mbase_utility->
|
spider, str, *field, NULL, FALSE, share->access_charset) ||
|
||||||
append_column_value(spider, str, *field, NULL,
|
str->reserve(SPIDER_SQL_COMMA_LEN))
|
||||||
share->access_charset) ||
|
{
|
||||||
str->reserve(SPIDER_SQL_COMMA_LEN)
|
|
||||||
) {
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
dbug_tmp_restore_column_map(&table->read_set, tmp_map);
|
dbug_tmp_restore_column_map(&table->read_set, tmp_map);
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,37 +22,33 @@ public:
|
|||||||
spider_string *str,
|
spider_string *str,
|
||||||
const char *name,
|
const char *name,
|
||||||
uint name_length
|
uint name_length
|
||||||
);
|
) override;
|
||||||
int append_name_with_charset(
|
int append_name_with_charset(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
const char *name,
|
const char *name,
|
||||||
uint name_length,
|
uint name_length,
|
||||||
CHARSET_INFO *name_charset
|
CHARSET_INFO *name_charset
|
||||||
);
|
) override;
|
||||||
int append_escaped_name(
|
int append_escaped_name(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
const char *name,
|
const char *name,
|
||||||
uint name_length
|
uint name_length
|
||||||
);
|
) override;
|
||||||
int append_escaped_name_with_charset(
|
int append_escaped_name_with_charset(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
const char *name,
|
const char *name,
|
||||||
uint name_length,
|
uint name_length,
|
||||||
CHARSET_INFO *name_charset
|
CHARSET_INFO *name_charset
|
||||||
);
|
) override;
|
||||||
bool is_name_quote(
|
bool is_name_quote(
|
||||||
const char head_code
|
const char head_code
|
||||||
);
|
) override;
|
||||||
int append_escaped_name_quote(
|
int append_escaped_name_quote(
|
||||||
spider_string *str
|
spider_string *str
|
||||||
);
|
) override;
|
||||||
int append_column_value(
|
int append_column_value(ha_spider *spider, spider_string *str, Field *field,
|
||||||
ha_spider *spider,
|
const uchar *new_ptr, bool is_like,
|
||||||
spider_string *str,
|
CHARSET_INFO *access_charset) override;
|
||||||
Field *field,
|
|
||||||
const uchar *new_ptr,
|
|
||||||
CHARSET_INFO *access_charset
|
|
||||||
);
|
|
||||||
int append_from_with_alias(
|
int append_from_with_alias(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
const char **table_names,
|
const char **table_names,
|
||||||
@ -66,19 +62,19 @@ public:
|
|||||||
int append_trx_isolation(
|
int append_trx_isolation(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
int trx_isolation
|
int trx_isolation
|
||||||
);
|
) override;
|
||||||
int append_autocommit(
|
int append_autocommit(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
bool autocommit
|
bool autocommit
|
||||||
);
|
) override;
|
||||||
int append_sql_log_off(
|
int append_sql_log_off(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
bool sql_log_off
|
bool sql_log_off
|
||||||
);
|
) override;
|
||||||
int append_wait_timeout(
|
int append_wait_timeout(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
int wait_timeout
|
int wait_timeout
|
||||||
);
|
) override;
|
||||||
virtual int append_sql_mode_internal(
|
virtual int append_sql_mode_internal(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
sql_mode_t sql_mode
|
sql_mode_t sql_mode
|
||||||
@ -86,21 +82,21 @@ public:
|
|||||||
int append_sql_mode(
|
int append_sql_mode(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
sql_mode_t sql_mode
|
sql_mode_t sql_mode
|
||||||
);
|
) override;
|
||||||
int append_time_zone(
|
int append_time_zone(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
Time_zone *time_zone
|
Time_zone *time_zone
|
||||||
);
|
) override;
|
||||||
int append_start_transaction(
|
int append_start_transaction(
|
||||||
spider_string *str
|
spider_string *str
|
||||||
);
|
) override;
|
||||||
int append_xa_start(
|
int append_xa_start(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
XID *xid
|
XID *xid
|
||||||
);
|
) override;
|
||||||
int append_lock_table_head(
|
int append_lock_table_head(
|
||||||
spider_string *str
|
spider_string *str
|
||||||
);
|
) override;
|
||||||
int append_lock_table_body(
|
int append_lock_table_body(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
const char *db_name,
|
const char *db_name,
|
||||||
@ -110,13 +106,13 @@ public:
|
|||||||
uint table_name_length,
|
uint table_name_length,
|
||||||
CHARSET_INFO *table_name_charset,
|
CHARSET_INFO *table_name_charset,
|
||||||
int lock_type
|
int lock_type
|
||||||
);
|
) override;
|
||||||
int append_lock_table_tail(
|
int append_lock_table_tail(
|
||||||
spider_string *str
|
spider_string *str
|
||||||
);
|
) override;
|
||||||
int append_unlock_table(
|
int append_unlock_table(
|
||||||
spider_string *str
|
spider_string *str
|
||||||
);
|
) override;
|
||||||
int open_item_func(
|
int open_item_func(
|
||||||
Item_func *item_func,
|
Item_func *item_func,
|
||||||
ha_spider *spider,
|
ha_spider *spider,
|
||||||
@ -125,7 +121,7 @@ public:
|
|||||||
uint alias_length,
|
uint alias_length,
|
||||||
bool use_fields,
|
bool use_fields,
|
||||||
spider_fields *fields
|
spider_fields *fields
|
||||||
);
|
) override;
|
||||||
#ifdef HANDLER_HAS_DIRECT_AGGREGATE
|
#ifdef HANDLER_HAS_DIRECT_AGGREGATE
|
||||||
int open_item_sum_func(
|
int open_item_sum_func(
|
||||||
Item_sum *item_sum,
|
Item_sum *item_sum,
|
||||||
@ -135,12 +131,12 @@ public:
|
|||||||
uint alias_length,
|
uint alias_length,
|
||||||
bool use_fields,
|
bool use_fields,
|
||||||
spider_fields *fields
|
spider_fields *fields
|
||||||
);
|
) override;
|
||||||
#endif
|
#endif
|
||||||
int append_escaped_util(
|
int append_escaped_util(
|
||||||
spider_string *to,
|
spider_string *to,
|
||||||
String *from
|
String *from
|
||||||
);
|
) override;
|
||||||
#ifdef SPIDER_HAS_GROUP_BY_HANDLER
|
#ifdef SPIDER_HAS_GROUP_BY_HANDLER
|
||||||
int append_table(
|
int append_table(
|
||||||
ha_spider *spider,
|
ha_spider *spider,
|
||||||
@ -182,18 +178,18 @@ public:
|
|||||||
spider_string *str,
|
spider_string *str,
|
||||||
TABLE_LIST *table_list,
|
TABLE_LIST *table_list,
|
||||||
uint table_count
|
uint table_count
|
||||||
);
|
) override;
|
||||||
int reappend_tables(
|
int reappend_tables(
|
||||||
spider_fields *fields,
|
spider_fields *fields,
|
||||||
SPIDER_LINK_IDX_CHAIN *link_idx_chain,
|
SPIDER_LINK_IDX_CHAIN *link_idx_chain,
|
||||||
spider_string *str
|
spider_string *str
|
||||||
);
|
) override;
|
||||||
int append_where(
|
int append_where(
|
||||||
spider_string *str
|
spider_string *str
|
||||||
);
|
) override;
|
||||||
int append_having(
|
int append_having(
|
||||||
spider_string *str
|
spider_string *str
|
||||||
);
|
) override;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -207,8 +203,9 @@ public:
|
|||||||
spider_string *str,
|
spider_string *str,
|
||||||
Field *field,
|
Field *field,
|
||||||
const uchar *new_ptr,
|
const uchar *new_ptr,
|
||||||
|
bool is_like,
|
||||||
CHARSET_INFO *access_charset
|
CHARSET_INFO *access_charset
|
||||||
);
|
) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class spider_db_mariadb_util: public spider_db_mbase_util
|
class spider_db_mariadb_util: public spider_db_mbase_util
|
||||||
@ -219,14 +216,15 @@ public:
|
|||||||
int append_sql_mode_internal(
|
int append_sql_mode_internal(
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
sql_mode_t sql_mode
|
sql_mode_t sql_mode
|
||||||
);
|
) override;
|
||||||
int append_column_value(
|
int append_column_value(
|
||||||
ha_spider *spider,
|
ha_spider *spider,
|
||||||
spider_string *str,
|
spider_string *str,
|
||||||
Field *field,
|
Field *field,
|
||||||
const uchar *new_ptr,
|
const uchar *new_ptr,
|
||||||
|
bool is_like,
|
||||||
CHARSET_INFO *access_charset
|
CHARSET_INFO *access_charset
|
||||||
);
|
) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class spider_db_mbase_row: public spider_db_row
|
class spider_db_mbase_row: public spider_db_row
|
||||||
|
Loading…
x
Reference in New Issue
Block a user