mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge 10.5 into 10.6
This commit is contained in:
14
debian/autobake-deb.sh
vendored
14
debian/autobake-deb.sh
vendored
@ -30,9 +30,12 @@ then
|
|||||||
# build is not running on Travis or Gitlab-CI
|
# build is not running on Travis or Gitlab-CI
|
||||||
sed '/-DPLUGIN_COLUMNSTORE=NO/d' -i debian/rules
|
sed '/-DPLUGIN_COLUMNSTORE=NO/d' -i debian/rules
|
||||||
# Take the files and part of control from MCS directory
|
# Take the files and part of control from MCS directory
|
||||||
cp -v storage/columnstore/columnstore/debian/mariadb-plugin-columnstore.* debian/
|
if [ ! -f debian/mariadb-plugin-columnstore.install ]
|
||||||
echo >> debian/control
|
then
|
||||||
cat storage/columnstore/columnstore/debian/control >> debian/control
|
cp -v storage/columnstore/columnstore/debian/mariadb-plugin-columnstore.* debian/
|
||||||
|
echo >> debian/control
|
||||||
|
cat storage/columnstore/columnstore/debian/control >> debian/control
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Look up distro-version specific stuff
|
# Look up distro-version specific stuff
|
||||||
@ -128,6 +131,11 @@ case "${CODENAME}" in
|
|||||||
exit 1
|
exit 1
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if [ -n "${AUTOBAKE_PREP_CONTROL_RULES_ONLY:-}" ]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
# Adjust changelog, add new version
|
# Adjust changelog, add new version
|
||||||
echo "Incrementing changelog and starting build scripts"
|
echo "Incrementing changelog and starting build scripts"
|
||||||
|
|
||||||
|
2
debian/rules
vendored
2
debian/rules
vendored
@ -112,7 +112,7 @@ override_dh_auto_build:
|
|||||||
@echo "RULES.$@"
|
@echo "RULES.$@"
|
||||||
# Print build env info to help debug builds on different platforms
|
# Print build env info to help debug builds on different platforms
|
||||||
dpkg-architecture
|
dpkg-architecture
|
||||||
cd $(BUILDDIR) && $(MAKE)
|
cd $(BUILDDIR) && $(MAKE) --output-sync=target
|
||||||
|
|
||||||
override_dh_auto_test:
|
override_dh_auto_test:
|
||||||
@echo "RULES.$@"
|
@echo "RULES.$@"
|
||||||
|
2
debian/salsa-ci.yml
vendored
2
debian/salsa-ci.yml
vendored
@ -34,7 +34,7 @@ build:
|
|||||||
- mv ${CCACHE_WORK_DIR} ${CCACHE_TMP_DIR}
|
- mv ${CCACHE_WORK_DIR} ${CCACHE_TMP_DIR}
|
||||||
# Run Salsa-CI .build-script equivalent, with extra devscripts so autobake-deb.sh can run 'dch'
|
# Run Salsa-CI .build-script equivalent, with extra devscripts so autobake-deb.sh can run 'dch'
|
||||||
- export CCACHE_DIR=${CCACHE_TMP_DIR}
|
- export CCACHE_DIR=${CCACHE_TMP_DIR}
|
||||||
- apt-get update && eatmydata apt-get install --no-install-recommends -y ccache fakeroot build-essential devscripts
|
- apt-get update && eatmydata apt-get install --no-install-recommends -y ccache fakeroot build-essential devscripts lsb-release
|
||||||
- cd ${WORKING_DIR}/${SOURCE_DIR}
|
- cd ${WORKING_DIR}/${SOURCE_DIR}
|
||||||
- eatmydata apt-get build-dep --no-install-recommends -y .
|
- eatmydata apt-get build-dep --no-install-recommends -y .
|
||||||
- update-ccache-symlinks; ccache -z # Zero out ccache counters
|
- update-ccache-symlinks; ccache -z # Zero out ccache counters
|
||||||
|
@ -1790,6 +1790,18 @@ unexpected_eof:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ferror(fil_in)) {
|
if (ferror(fil_in)) {
|
||||||
|
#ifdef _AIX
|
||||||
|
/*
|
||||||
|
AIX fseeko can go past eof without error.
|
||||||
|
the error occurs on read, hence output the
|
||||||
|
same error here as would show up on other
|
||||||
|
platforms. This shows up in the mtr test
|
||||||
|
innodb_zip.innochecksum_3-4k,crc32,innodb
|
||||||
|
*/
|
||||||
|
if (errno == EFBIG) {
|
||||||
|
goto unexpected_eof;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
fprintf(stderr, "Error reading " ULINTPF " bytes",
|
fprintf(stderr, "Error reading " ULINTPF " bytes",
|
||||||
physical_page_size);
|
physical_page_size);
|
||||||
perror(" ");
|
perror(" ");
|
||||||
|
@ -2532,3 +2532,24 @@ progress
|
|||||||
#
|
#
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# Start of 10.5 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a int);
|
||||||
|
CREATE ALGORITHM=TEMPTABLE VIEW i AS
|
||||||
|
SELECT a.created
|
||||||
|
FROM t1 w JOIN INFORMATION_SCHEMA.routines a
|
||||||
|
WHERE a.routine_name='not existing'
|
||||||
|
ORDER BY a.last_altered;
|
||||||
|
SET SESSION sql_mode='ALLOW_INVALID_DATES';
|
||||||
|
SELECT * FROM i;
|
||||||
|
created
|
||||||
|
SET SESSION sql_mode=DEFAULT;
|
||||||
|
DROP VIEW i;
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# End of 10.5 tests
|
||||||
|
#
|
||||||
|
@ -2111,3 +2111,27 @@ select progress from information_schema.processlist limit 1;
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.5 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a int);
|
||||||
|
CREATE ALGORITHM=TEMPTABLE VIEW i AS
|
||||||
|
SELECT a.created
|
||||||
|
FROM t1 w JOIN INFORMATION_SCHEMA.routines a
|
||||||
|
WHERE a.routine_name='not existing'
|
||||||
|
ORDER BY a.last_altered;
|
||||||
|
SET SESSION sql_mode='ALLOW_INVALID_DATES';
|
||||||
|
SELECT * FROM i;
|
||||||
|
SET SESSION sql_mode=DEFAULT;
|
||||||
|
DROP VIEW i;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.5 tests
|
||||||
|
--echo #
|
||||||
|
@ -391,3 +391,424 @@ END
|
|||||||
$$
|
$$
|
||||||
compressed
|
compressed
|
||||||
1
|
1
|
||||||
|
#
|
||||||
|
# Testing various keywords in various contexts
|
||||||
|
#
|
||||||
|
CREATE PROCEDURE p1(query TEXT, var TEXT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE errmsg TEXT DEFAULT '';
|
||||||
|
DECLARE CONTINUE HANDLER
|
||||||
|
FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
GET DIAGNOSTICS CONDITION 1 errmsg = MESSAGE_TEXT;
|
||||||
|
SET errmsg= REPLACE(errmsg, 'You have an error in your SQL ', '..');
|
||||||
|
SET errmsg= REPLACE(errmsg, '; check the manual that corresponds to your MariaDB server version for the right syntax to use', '..');
|
||||||
|
END;
|
||||||
|
SET query=REPLACE(query, '$(VAR)', var);
|
||||||
|
EXECUTE IMMEDIATE query;
|
||||||
|
SELECT CONCAT(query, '; -- ', LEFT(COALESCE(errmsg,''),40)) AS `--------`;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
CREATE PROCEDURE p2(query TEXT)
|
||||||
|
BEGIN
|
||||||
|
FOR row IN (SELECT word FROM t1 ORDER BY category, word)
|
||||||
|
DO
|
||||||
|
CALL p1(query, row.word);
|
||||||
|
END FOR;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
CREATE TABLE t1 (word TEXT, category TEXT);
|
||||||
|
INSERT INTO t1 VALUES ('non_keyword', '00 Simple identifier');
|
||||||
|
INSERT INTO t1 VALUES ('lpad', '01 Built-in native function');
|
||||||
|
INSERT INTO t1 VALUES ('rpad', '01 Built-in native function');
|
||||||
|
INSERT INTO t1 VALUES ('adddate', '02 function_call_nonkeyword');
|
||||||
|
INSERT INTO t1 VALUES ('substr', '02 function_call_nonkeyword');
|
||||||
|
INSERT INTO t1 VALUES ('substring', '02 function_call_nonkeyword');
|
||||||
|
INSERT INTO t1 VALUES ('trim_oracle', '02 function_call_nonkeyword');
|
||||||
|
INSERT INTO t1 VALUES ('ascii', '03 function_call_conflict');
|
||||||
|
INSERT INTO t1 VALUES ('replace', '03 function_call_conflict');
|
||||||
|
INSERT INTO t1 VALUES ('weight_string', '03 function_call_conflict');
|
||||||
|
INSERT INTO t1 VALUES ('char', '04 function_call_keyword');
|
||||||
|
INSERT INTO t1 VALUES ('trim', '04 function_call_keyword');
|
||||||
|
INSERT INTO t1 VALUES ('year', '04 function_call_keyword');
|
||||||
|
INSERT INTO t1 VALUES ('create', '05 Reserved keyword');
|
||||||
|
CALL p2('SELECT @@$(VAR)');
|
||||||
|
--------
|
||||||
|
SELECT @@non_keyword; -- Unknown system variable 'non_keyword'
|
||||||
|
--------
|
||||||
|
SELECT @@lpad; -- Unknown system variable 'lpad'
|
||||||
|
--------
|
||||||
|
SELECT @@rpad; -- Unknown system variable 'rpad'
|
||||||
|
--------
|
||||||
|
SELECT @@adddate; -- Unknown system variable 'adddate'
|
||||||
|
--------
|
||||||
|
SELECT @@substr; -- Unknown system variable 'substr'
|
||||||
|
--------
|
||||||
|
SELECT @@substring; -- Unknown system variable 'substring'
|
||||||
|
--------
|
||||||
|
SELECT @@trim_oracle; -- Unknown system variable 'trim_oracle'
|
||||||
|
--------
|
||||||
|
SELECT @@ascii; -- Unknown system variable 'ascii'
|
||||||
|
--------
|
||||||
|
SELECT @@replace; -- ..syntax.. near 'replace' at line 1
|
||||||
|
--------
|
||||||
|
SELECT @@weight_string; -- Unknown system variable 'weight_string'
|
||||||
|
--------
|
||||||
|
SELECT @@char; -- ..syntax.. near 'char' at line 1
|
||||||
|
--------
|
||||||
|
SELECT @@trim; -- Unknown system variable 'trim'
|
||||||
|
--------
|
||||||
|
SELECT @@year; -- Unknown system variable 'year'
|
||||||
|
--------
|
||||||
|
SELECT @@create; -- ..syntax.. near 'create' at line 1
|
||||||
|
CALL p2('SELECT @@global.$(VAR)');
|
||||||
|
--------
|
||||||
|
SELECT @@global.non_keyword; -- Unknown system variable 'non_keyword'
|
||||||
|
--------
|
||||||
|
SELECT @@global.lpad; -- Unknown system variable 'lpad'
|
||||||
|
--------
|
||||||
|
SELECT @@global.rpad; -- Unknown system variable 'rpad'
|
||||||
|
--------
|
||||||
|
SELECT @@global.adddate; -- Unknown system variable 'adddate'
|
||||||
|
--------
|
||||||
|
SELECT @@global.substr; -- Unknown system variable 'substr'
|
||||||
|
--------
|
||||||
|
SELECT @@global.substring; -- Unknown system variable 'substring'
|
||||||
|
--------
|
||||||
|
SELECT @@global.trim_oracle; -- Unknown system variable 'trim_oracle'
|
||||||
|
--------
|
||||||
|
SELECT @@global.ascii; -- Unknown system variable 'ascii'
|
||||||
|
--------
|
||||||
|
SELECT @@global.replace; -- Unknown system variable 'replace'
|
||||||
|
--------
|
||||||
|
SELECT @@global.weight_string; -- Unknown system variable 'weight_string'
|
||||||
|
--------
|
||||||
|
SELECT @@global.char; -- Unknown system variable 'char'
|
||||||
|
--------
|
||||||
|
SELECT @@global.trim; -- Unknown system variable 'trim'
|
||||||
|
--------
|
||||||
|
SELECT @@global.year; -- Unknown system variable 'year'
|
||||||
|
--------
|
||||||
|
SELECT @@global.create; -- Unknown system variable 'create'
|
||||||
|
CALL p2('SELECT @@global.$(VAR)()');
|
||||||
|
--------
|
||||||
|
SELECT @@global.non_keyword(); -- Unknown system variable 'non_keyword'
|
||||||
|
--------
|
||||||
|
SELECT @@global.lpad(); -- Unknown system variable 'lpad'
|
||||||
|
--------
|
||||||
|
SELECT @@global.rpad(); -- Unknown system variable 'rpad'
|
||||||
|
--------
|
||||||
|
SELECT @@global.adddate(); -- Unknown system variable 'adddate'
|
||||||
|
--------
|
||||||
|
SELECT @@global.substr(); -- Unknown system variable 'substr'
|
||||||
|
--------
|
||||||
|
SELECT @@global.substring(); -- Unknown system variable 'substring'
|
||||||
|
--------
|
||||||
|
SELECT @@global.trim_oracle(); -- Unknown system variable 'trim_oracle'
|
||||||
|
--------
|
||||||
|
SELECT @@global.ascii(); -- Unknown system variable 'ascii'
|
||||||
|
--------
|
||||||
|
SELECT @@global.replace(); -- Unknown system variable 'replace'
|
||||||
|
--------
|
||||||
|
SELECT @@global.weight_string(); -- Unknown system variable 'weight_string'
|
||||||
|
--------
|
||||||
|
SELECT @@global.char(); -- Unknown system variable 'char'
|
||||||
|
--------
|
||||||
|
SELECT @@global.trim(); -- Unknown system variable 'trim'
|
||||||
|
--------
|
||||||
|
SELECT @@global.year(); -- Unknown system variable 'year'
|
||||||
|
--------
|
||||||
|
SELECT @@global.create(); -- Unknown system variable 'create'
|
||||||
|
CALL p2('SELECT $(VAR)()');
|
||||||
|
--------
|
||||||
|
SELECT non_keyword(); -- FUNCTION test.non_keyword does not exist
|
||||||
|
--------
|
||||||
|
SELECT lpad(); -- Incorrect parameter count in the call to
|
||||||
|
--------
|
||||||
|
SELECT rpad(); -- Incorrect parameter count in the call to
|
||||||
|
--------
|
||||||
|
SELECT adddate(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT substr(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT substring(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT trim_oracle(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT ascii(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT replace(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT weight_string(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT char(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT trim(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT year(); -- ..syntax.. near ')' at line 1
|
||||||
|
--------
|
||||||
|
SELECT create(); -- ..syntax.. near 'create()' at line 1
|
||||||
|
CALL p2('SELECT test.$(VAR)()');
|
||||||
|
--------
|
||||||
|
SELECT test.non_keyword(); -- FUNCTION test.non_keyword does not exist
|
||||||
|
--------
|
||||||
|
SELECT test.lpad(); -- FUNCTION test.lpad does not exist
|
||||||
|
--------
|
||||||
|
SELECT test.rpad(); -- FUNCTION test.rpad does not exist
|
||||||
|
--------
|
||||||
|
SELECT test.adddate(); -- FUNCTION test.adddate does not exist. Ch
|
||||||
|
--------
|
||||||
|
SELECT test.substr(); -- FUNCTION test.substr does not exist. Che
|
||||||
|
--------
|
||||||
|
SELECT test.substring(); -- FUNCTION test.substring does not exist.
|
||||||
|
--------
|
||||||
|
SELECT test.trim_oracle(); -- FUNCTION test.trim_oracle does not exist
|
||||||
|
--------
|
||||||
|
SELECT test.ascii(); -- FUNCTION test.ascii does not exist. Chec
|
||||||
|
--------
|
||||||
|
SELECT test.replace(); -- FUNCTION test.replace does not exist. Ch
|
||||||
|
--------
|
||||||
|
SELECT test.weight_string(); -- FUNCTION test.weight_string does not exi
|
||||||
|
--------
|
||||||
|
SELECT test.char(); -- FUNCTION test.char does not exist. Check
|
||||||
|
--------
|
||||||
|
SELECT test.trim(); -- FUNCTION test.trim does not exist. Check
|
||||||
|
--------
|
||||||
|
SELECT test.year(); -- FUNCTION test.year does not exist. Check
|
||||||
|
--------
|
||||||
|
SELECT test.create(); -- FUNCTION test.create does not exist. Che
|
||||||
|
CALL p2('SELECT $(VAR) FROM t1');
|
||||||
|
--------
|
||||||
|
SELECT non_keyword FROM t1; -- Unknown column 'non_keyword' in 'field l
|
||||||
|
--------
|
||||||
|
SELECT lpad FROM t1; -- Unknown column 'lpad' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT rpad FROM t1; -- Unknown column 'rpad' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT adddate FROM t1; -- Unknown column 'adddate' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT substr FROM t1; -- Unknown column 'substr' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT substring FROM t1; -- Unknown column 'substring' in 'field lis
|
||||||
|
--------
|
||||||
|
SELECT trim_oracle FROM t1; -- Unknown column 'trim_oracle' in 'field l
|
||||||
|
--------
|
||||||
|
SELECT ascii FROM t1; -- Unknown column 'ascii' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT replace FROM t1; -- ..syntax.. near 'FROM t1' at line 1
|
||||||
|
--------
|
||||||
|
SELECT weight_string FROM t1; -- Unknown column 'weight_string' in 'field
|
||||||
|
--------
|
||||||
|
SELECT char FROM t1; -- ..syntax.. near 'FROM t1' at line 1
|
||||||
|
--------
|
||||||
|
SELECT trim FROM t1; -- Unknown column 'trim' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT year FROM t1; -- Unknown column 'year' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT create FROM t1; -- ..syntax.. near 'create FROM t1' at line
|
||||||
|
CALL p2('SELECT t1.$(VAR) FROM t1');
|
||||||
|
--------
|
||||||
|
SELECT t1.non_keyword FROM t1; -- Unknown column 't1.non_keyword' in 'fiel
|
||||||
|
--------
|
||||||
|
SELECT t1.lpad FROM t1; -- Unknown column 't1.lpad' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT t1.rpad FROM t1; -- Unknown column 't1.rpad' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT t1.adddate FROM t1; -- Unknown column 't1.adddate' in 'field li
|
||||||
|
--------
|
||||||
|
SELECT t1.substr FROM t1; -- Unknown column 't1.substr' in 'field lis
|
||||||
|
--------
|
||||||
|
SELECT t1.substring FROM t1; -- Unknown column 't1.substring' in 'field
|
||||||
|
--------
|
||||||
|
SELECT t1.trim_oracle FROM t1; -- Unknown column 't1.trim_oracle' in 'fiel
|
||||||
|
--------
|
||||||
|
SELECT t1.ascii FROM t1; -- Unknown column 't1.ascii' in 'field list
|
||||||
|
--------
|
||||||
|
SELECT t1.replace FROM t1; -- Unknown column 't1.replace' in 'field li
|
||||||
|
--------
|
||||||
|
SELECT t1.weight_string FROM t1; -- Unknown column 't1.weight_string' in 'fi
|
||||||
|
--------
|
||||||
|
SELECT t1.char FROM t1; -- Unknown column 't1.char' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT t1.trim FROM t1; -- Unknown column 't1.trim' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT t1.year FROM t1; -- Unknown column 't1.year' in 'field list'
|
||||||
|
--------
|
||||||
|
SELECT t1.create FROM t1; -- Unknown column 't1.create' in 'field lis
|
||||||
|
CALL p2('DROP TABLE $(VAR)');
|
||||||
|
--------
|
||||||
|
DROP TABLE non_keyword; -- Unknown table 'test.non_keyword'
|
||||||
|
--------
|
||||||
|
DROP TABLE lpad; -- Unknown table 'test.lpad'
|
||||||
|
--------
|
||||||
|
DROP TABLE rpad; -- Unknown table 'test.rpad'
|
||||||
|
--------
|
||||||
|
DROP TABLE adddate; -- Unknown table 'test.adddate'
|
||||||
|
--------
|
||||||
|
DROP TABLE substr; -- Unknown table 'test.substr'
|
||||||
|
--------
|
||||||
|
DROP TABLE substring; -- Unknown table 'test.substring'
|
||||||
|
--------
|
||||||
|
DROP TABLE trim_oracle; -- Unknown table 'test.trim_oracle'
|
||||||
|
--------
|
||||||
|
DROP TABLE ascii; -- Unknown table 'test.ascii'
|
||||||
|
--------
|
||||||
|
DROP TABLE replace; -- ..syntax.. near 'replace' at line 1
|
||||||
|
--------
|
||||||
|
DROP TABLE weight_string; -- Unknown table 'test.weight_string'
|
||||||
|
--------
|
||||||
|
DROP TABLE char; -- ..syntax.. near 'char' at line 1
|
||||||
|
--------
|
||||||
|
DROP TABLE trim; -- Unknown table 'test.trim'
|
||||||
|
--------
|
||||||
|
DROP TABLE year; -- Unknown table 'test.year'
|
||||||
|
--------
|
||||||
|
DROP TABLE create; -- ..syntax.. near 'create' at line 1
|
||||||
|
CALL p2('DROP TABLE test.$(VAR)');
|
||||||
|
--------
|
||||||
|
DROP TABLE test.non_keyword; -- Unknown table 'test.non_keyword'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.lpad; -- Unknown table 'test.lpad'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.rpad; -- Unknown table 'test.rpad'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.adddate; -- Unknown table 'test.adddate'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.substr; -- Unknown table 'test.substr'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.substring; -- Unknown table 'test.substring'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.trim_oracle; -- Unknown table 'test.trim_oracle'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.ascii; -- Unknown table 'test.ascii'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.replace; -- Unknown table 'test.replace'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.weight_string; -- Unknown table 'test.weight_string'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.char; -- Unknown table 'test.char'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.trim; -- Unknown table 'test.trim'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.year; -- Unknown table 'test.year'
|
||||||
|
--------
|
||||||
|
DROP TABLE test.create; -- Unknown table 'test.create'
|
||||||
|
CALL p2('CREATE FUNCTION $(VAR)() RETURNS OOPS');
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION non_keyword() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION lpad() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION rpad() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION adddate() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION substr() RETURNS OOPS; -- ..syntax.. near 'substr() RETURNS OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION substring() RETURNS OOPS; -- ..syntax.. near 'substring() RETURNS OOP
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION trim_oracle() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION ascii() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION replace() RETURNS OOPS; -- ..syntax.. near 'replace() RETURNS OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION weight_string() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION char() RETURNS OOPS; -- ..syntax.. near 'char() RETURNS OOPS' at
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION trim() RETURNS OOPS; -- ..syntax.. near 'trim() RETURNS OOPS' at
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION year() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION create() RETURNS OOPS; -- ..syntax.. near 'create() RETURNS OOPS'
|
||||||
|
CALL p2('CREATE FUNCTION test.$(VAR)() RETURNS OOPS');
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.non_keyword() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.lpad() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.rpad() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.adddate() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.substr() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.substring() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.trim_oracle() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.ascii() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.replace() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.weight_string() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.char() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.trim() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.year() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
--------
|
||||||
|
CREATE FUNCTION test.create() RETURNS OOPS; -- Unknown data type: 'OOPS'
|
||||||
|
CALL p2('DROP FUNCTION $(VAR)');
|
||||||
|
--------
|
||||||
|
DROP FUNCTION non_keyword; -- FUNCTION test.non_keyword does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION lpad; -- FUNCTION test.lpad does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION rpad; -- FUNCTION test.rpad does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION adddate; -- FUNCTION test.adddate does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION substr; -- FUNCTION test.substr does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION substring; -- FUNCTION test.substring does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION trim_oracle; -- FUNCTION test.trim_oracle does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION ascii; -- FUNCTION test.ascii does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION replace; -- ..syntax.. near 'replace' at line 1
|
||||||
|
--------
|
||||||
|
DROP FUNCTION weight_string; -- FUNCTION test.weight_string does not exi
|
||||||
|
--------
|
||||||
|
DROP FUNCTION char; -- ..syntax.. near 'char' at line 1
|
||||||
|
--------
|
||||||
|
DROP FUNCTION trim; -- FUNCTION test.trim does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION year; -- FUNCTION test.year does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION create; -- ..syntax.. near 'create' at line 1
|
||||||
|
CALL p2('DROP FUNCTION test.$(VAR)');
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.non_keyword; -- FUNCTION test.non_keyword does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.lpad; -- FUNCTION test.lpad does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.rpad; -- FUNCTION test.rpad does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.adddate; -- FUNCTION test.adddate does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.substr; -- FUNCTION test.substr does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.substring; -- FUNCTION test.substring does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.trim_oracle; -- FUNCTION test.trim_oracle does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.ascii; -- FUNCTION test.ascii does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.replace; -- FUNCTION test.replace does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.weight_string; -- FUNCTION test.weight_string does not exi
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.char; -- FUNCTION test.char does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.trim; -- FUNCTION test.trim does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.year; -- FUNCTION test.year does not exist
|
||||||
|
--------
|
||||||
|
DROP FUNCTION test.create; -- FUNCTION test.create does not exist
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP PROCEDURE p2;
|
||||||
|
@ -295,3 +295,80 @@ BEGIN NOT ATOMIC
|
|||||||
END
|
END
|
||||||
$$
|
$$
|
||||||
DELIMITER ;$$
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Testing various keywords in various contexts
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
CREATE PROCEDURE p1(query TEXT, var TEXT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE errmsg TEXT DEFAULT '';
|
||||||
|
DECLARE CONTINUE HANDLER
|
||||||
|
FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
GET DIAGNOSTICS CONDITION 1 errmsg = MESSAGE_TEXT;
|
||||||
|
SET errmsg= REPLACE(errmsg, 'You have an error in your SQL ', '..');
|
||||||
|
SET errmsg= REPLACE(errmsg, '; check the manual that corresponds to your MariaDB server version for the right syntax to use', '..');
|
||||||
|
END;
|
||||||
|
SET query=REPLACE(query, '$(VAR)', var);
|
||||||
|
EXECUTE IMMEDIATE query;
|
||||||
|
SELECT CONCAT(query, '; -- ', LEFT(COALESCE(errmsg,''),40)) AS `--------`;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
CREATE PROCEDURE p2(query TEXT)
|
||||||
|
BEGIN
|
||||||
|
FOR row IN (SELECT word FROM t1 ORDER BY category, word)
|
||||||
|
DO
|
||||||
|
CALL p1(query, row.word);
|
||||||
|
END FOR;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
CREATE TABLE t1 (word TEXT, category TEXT);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('non_keyword', '00 Simple identifier');
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('lpad', '01 Built-in native function');
|
||||||
|
INSERT INTO t1 VALUES ('rpad', '01 Built-in native function');
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('adddate', '02 function_call_nonkeyword');
|
||||||
|
INSERT INTO t1 VALUES ('substr', '02 function_call_nonkeyword');
|
||||||
|
INSERT INTO t1 VALUES ('substring', '02 function_call_nonkeyword');
|
||||||
|
INSERT INTO t1 VALUES ('trim_oracle', '02 function_call_nonkeyword');
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('ascii', '03 function_call_conflict');
|
||||||
|
INSERT INTO t1 VALUES ('replace', '03 function_call_conflict');
|
||||||
|
INSERT INTO t1 VALUES ('weight_string', '03 function_call_conflict');
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('char', '04 function_call_keyword');
|
||||||
|
INSERT INTO t1 VALUES ('trim', '04 function_call_keyword');
|
||||||
|
INSERT INTO t1 VALUES ('year', '04 function_call_keyword');
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('create', '05 Reserved keyword');
|
||||||
|
|
||||||
|
CALL p2('SELECT @@$(VAR)');
|
||||||
|
CALL p2('SELECT @@global.$(VAR)');
|
||||||
|
CALL p2('SELECT @@global.$(VAR)()');
|
||||||
|
|
||||||
|
CALL p2('SELECT $(VAR)()');
|
||||||
|
CALL p2('SELECT test.$(VAR)()');
|
||||||
|
|
||||||
|
CALL p2('SELECT $(VAR) FROM t1');
|
||||||
|
CALL p2('SELECT t1.$(VAR) FROM t1');
|
||||||
|
|
||||||
|
CALL p2('DROP TABLE $(VAR)');
|
||||||
|
CALL p2('DROP TABLE test.$(VAR)');
|
||||||
|
|
||||||
|
CALL p2('CREATE FUNCTION $(VAR)() RETURNS OOPS');
|
||||||
|
CALL p2('CREATE FUNCTION test.$(VAR)() RETURNS OOPS');
|
||||||
|
|
||||||
|
CALL p2('DROP FUNCTION $(VAR)');
|
||||||
|
CALL p2('DROP FUNCTION test.$(VAR)');
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP PROCEDURE p2;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
source include/not_embedded.inc;
|
source include/not_embedded.inc;
|
||||||
|
source include/not_aix.inc;
|
||||||
|
|
||||||
let $have_plugin = `SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_STATUS='ACTIVE' AND PLUGIN_NAME = 'THREAD_POOL_GROUPS'`;
|
let $have_plugin = `SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_STATUS='ACTIVE' AND PLUGIN_NAME = 'THREAD_POOL_GROUPS'`;
|
||||||
if(!$have_plugin)
|
if(!$have_plugin)
|
||||||
|
@ -28,3 +28,21 @@ CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_TRX;
|
|||||||
DROP TEMPORARY TABLE t1;
|
DROP TEMPORARY TABLE t1;
|
||||||
CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX LIMIT 0;
|
CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX LIMIT 0;
|
||||||
DROP TEMPORARY TABLE t1;
|
DROP TEMPORARY TABLE t1;
|
||||||
|
#
|
||||||
|
# Start of 10.5 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed
|
||||||
|
#
|
||||||
|
CREATE ALGORITHM=TEMPTABLE VIEW i AS
|
||||||
|
SELECT a.trx_started
|
||||||
|
FROM INFORMATION_SCHEMA.innodb_lock_waits w
|
||||||
|
JOIN INFORMATION_SCHEMA.innodb_trx a
|
||||||
|
ORDER BY a.trx_wait_started;
|
||||||
|
SET SESSION sql_mode='ALLOW_INVALID_DATES';
|
||||||
|
SELECT * FROM i;
|
||||||
|
SET SESSION sql_mode=DEFAULT;
|
||||||
|
DROP VIEW i;
|
||||||
|
#
|
||||||
|
# End of 10.5 tests
|
||||||
|
#
|
||||||
|
@ -7,3 +7,28 @@ DROP TEMPORARY TABLE t1;
|
|||||||
|
|
||||||
CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX LIMIT 0;
|
CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX LIMIT 0;
|
||||||
DROP TEMPORARY TABLE t1;
|
DROP TEMPORARY TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.5 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE ALGORITHM=TEMPTABLE VIEW i AS
|
||||||
|
SELECT a.trx_started
|
||||||
|
FROM INFORMATION_SCHEMA.innodb_lock_waits w
|
||||||
|
JOIN INFORMATION_SCHEMA.innodb_trx a
|
||||||
|
ORDER BY a.trx_wait_started;
|
||||||
|
SET SESSION sql_mode='ALLOW_INVALID_DATES';
|
||||||
|
--disable_result_log
|
||||||
|
SELECT * FROM i;
|
||||||
|
--enable_result_log
|
||||||
|
SET SESSION sql_mode=DEFAULT;
|
||||||
|
DROP VIEW i;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.5 tests
|
||||||
|
--echo #
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
SET GLOBAL event_scheduler = OFF;
|
SET GLOBAL event_scheduler = OFF;
|
||||||
SELECT name, type, processlist_user, processlist_host, processlist_db,
|
SELECT name, type, processlist_user, processlist_host, processlist_db,
|
||||||
processlist_command, processlist_info,
|
processlist_command, processlist_info, connection_type,
|
||||||
IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id')
|
IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id')
|
||||||
AS unified_parent_thread_id,
|
AS unified_parent_thread_id,
|
||||||
role, instrumented
|
role, instrumented
|
||||||
@ -14,6 +14,7 @@ processlist_host NULL
|
|||||||
processlist_db mysql
|
processlist_db mysql
|
||||||
processlist_command NULL
|
processlist_command NULL
|
||||||
processlist_info NULL
|
processlist_info NULL
|
||||||
|
connection_type NULL
|
||||||
unified_parent_thread_id NULL
|
unified_parent_thread_id NULL
|
||||||
role NULL
|
role NULL
|
||||||
instrumented YES
|
instrumented YES
|
||||||
@ -24,6 +25,7 @@ processlist_host NULL
|
|||||||
processlist_db NULL
|
processlist_db NULL
|
||||||
processlist_command NULL
|
processlist_command NULL
|
||||||
processlist_info NULL
|
processlist_info NULL
|
||||||
|
connection_type NULL
|
||||||
unified_parent_thread_id unified parent_thread_id
|
unified_parent_thread_id unified parent_thread_id
|
||||||
role NULL
|
role NULL
|
||||||
instrumented YES
|
instrumented YES
|
||||||
@ -34,13 +36,14 @@ processlist_host localhost
|
|||||||
processlist_db test
|
processlist_db test
|
||||||
processlist_command Query
|
processlist_command Query
|
||||||
processlist_info SELECT name, type, processlist_user, processlist_host, processlist_db,
|
processlist_info SELECT name, type, processlist_user, processlist_host, processlist_db,
|
||||||
processlist_command, processlist_info,
|
processlist_command, processlist_info, connection_type,
|
||||||
IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id')
|
IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id')
|
||||||
AS unified_parent_thread_id,
|
AS unified_parent_thread_id,
|
||||||
role, instrumented
|
role, instrumented
|
||||||
FROM performance_schema.threads
|
FROM performance_schema.threads
|
||||||
WHERE name LIKE 'thread/sql%'
|
WHERE name LIKE 'thread/sql%'
|
||||||
ORDER BY name
|
ORDER BY name
|
||||||
|
connection_type Socket
|
||||||
unified_parent_thread_id unified parent_thread_id
|
unified_parent_thread_id unified parent_thread_id
|
||||||
role NULL
|
role NULL
|
||||||
instrumented YES
|
instrumented YES
|
||||||
@ -51,6 +54,7 @@ processlist_host NULL
|
|||||||
processlist_db NULL
|
processlist_db NULL
|
||||||
processlist_command NULL
|
processlist_command NULL
|
||||||
processlist_info NULL
|
processlist_info NULL
|
||||||
|
connection_type NULL
|
||||||
unified_parent_thread_id unified parent_thread_id
|
unified_parent_thread_id unified parent_thread_id
|
||||||
role NULL
|
role NULL
|
||||||
instrumented YES
|
instrumented YES
|
||||||
|
@ -32,7 +32,7 @@ SET GLOBAL event_scheduler = OFF;
|
|||||||
# Therefore we have to disable this protocol for the next statement.
|
# Therefore we have to disable this protocol for the next statement.
|
||||||
--disable_ps_protocol
|
--disable_ps_protocol
|
||||||
SELECT name, type, processlist_user, processlist_host, processlist_db,
|
SELECT name, type, processlist_user, processlist_host, processlist_db,
|
||||||
processlist_command, processlist_info,
|
processlist_command, processlist_info, connection_type,
|
||||||
IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id')
|
IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id')
|
||||||
AS unified_parent_thread_id,
|
AS unified_parent_thread_id,
|
||||||
role, instrumented
|
role, instrumented
|
||||||
|
@ -1182,75 +1182,83 @@ int ha_spider::external_lock(
|
|||||||
int error_num = 0;
|
int error_num = 0;
|
||||||
SPIDER_TRX *trx;
|
SPIDER_TRX *trx;
|
||||||
backup_error_status();
|
backup_error_status();
|
||||||
|
|
||||||
DBUG_ENTER("ha_spider::external_lock");
|
DBUG_ENTER("ha_spider::external_lock");
|
||||||
DBUG_PRINT("info",("spider this=%p", this));
|
DBUG_PRINT("info",("spider this=%p", this));
|
||||||
DBUG_PRINT("info",("spider lock_type=%x", lock_type));
|
DBUG_PRINT("info",("spider lock_type=%x", lock_type));
|
||||||
#if MYSQL_VERSION_ID < 50500
|
DBUG_PRINT("info", ("spider sql_command=%d", thd_sql_command(thd)));
|
||||||
DBUG_PRINT("info",("spider thd->options=%x", (int) thd->options));
|
|
||||||
#endif
|
if (wide_handler->stage == SPD_HND_STAGE_EXTERNAL_LOCK)
|
||||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
{
|
||||||
if (
|
/* Only the stage executor deals with table locks. */
|
||||||
wide_handler->stage == SPD_HND_STAGE_EXTERNAL_LOCK &&
|
if (wide_handler->stage_executor != this)
|
||||||
wide_handler->stage_executor != this)
|
{
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Update the stage executor when the stage changes */
|
||||||
|
wide_handler->stage= SPD_HND_STAGE_EXTERNAL_LOCK;
|
||||||
|
wide_handler->stage_executor= this;
|
||||||
|
}
|
||||||
|
|
||||||
|
info_auto_called = FALSE;
|
||||||
|
wide_handler->external_lock_type= lock_type;
|
||||||
|
wide_handler->sql_command = thd_sql_command(thd);
|
||||||
|
|
||||||
|
/* We treat BEGIN as if UNLOCK TABLE. */
|
||||||
|
if (wide_handler->sql_command == SQLCOM_BEGIN)
|
||||||
|
{
|
||||||
|
wide_handler->sql_command = SQLCOM_UNLOCK_TABLES;
|
||||||
|
}
|
||||||
|
if (lock_type == F_UNLCK &&
|
||||||
|
wide_handler->sql_command != SQLCOM_UNLOCK_TABLES)
|
||||||
{
|
{
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
wide_handler->stage = SPD_HND_STAGE_EXTERNAL_LOCK;
|
|
||||||
wide_handler->stage_executor = this;
|
|
||||||
#endif
|
|
||||||
#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
|
|
||||||
info_auto_called = FALSE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wide_handler->sql_command = thd_sql_command(thd);
|
|
||||||
if (wide_handler->sql_command == SQLCOM_BEGIN)
|
|
||||||
wide_handler->sql_command = SQLCOM_UNLOCK_TABLES;
|
|
||||||
|
|
||||||
trx = spider_get_trx(thd, TRUE, &error_num);
|
trx = spider_get_trx(thd, TRUE, &error_num);
|
||||||
if (error_num)
|
if (error_num)
|
||||||
|
{
|
||||||
DBUG_RETURN(error_num);
|
DBUG_RETURN(error_num);
|
||||||
|
}
|
||||||
wide_handler->trx = trx;
|
wide_handler->trx = trx;
|
||||||
|
|
||||||
DBUG_PRINT("info",("spider sql_command=%d", wide_handler->sql_command));
|
/* Question: Why the following if block is necessary? Why here? */
|
||||||
#ifdef HA_CAN_BULK_ACCESS
|
|
||||||
wide_handler->external_lock_cnt++;
|
|
||||||
#endif
|
|
||||||
if (
|
|
||||||
lock_type == F_UNLCK &&
|
|
||||||
wide_handler->sql_command != SQLCOM_UNLOCK_TABLES
|
|
||||||
)
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
if (store_error_num)
|
if (store_error_num)
|
||||||
DBUG_RETURN(store_error_num);
|
|
||||||
wide_handler->external_lock_type = lock_type;
|
|
||||||
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
|
|
||||||
if ((conn_kinds & SPIDER_CONN_KIND_MYSQL))
|
|
||||||
{
|
{
|
||||||
#endif
|
DBUG_RETURN(store_error_num);
|
||||||
if (
|
}
|
||||||
/* SQLCOM_RENAME_TABLE and SQLCOM_DROP_DB don't come here */
|
|
||||||
wide_handler->sql_command == SQLCOM_DROP_TABLE ||
|
DBUG_ASSERT(wide_handler->sql_command != SQLCOM_RENAME_TABLE &&
|
||||||
wide_handler->sql_command == SQLCOM_ALTER_TABLE
|
wide_handler->sql_command != SQLCOM_DROP_DB);
|
||||||
) {
|
|
||||||
if (trx->locked_connections)
|
if (wide_handler->sql_command == SQLCOM_DROP_TABLE ||
|
||||||
{
|
wide_handler->sql_command == SQLCOM_ALTER_TABLE)
|
||||||
my_message(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM,
|
{
|
||||||
ER_SPIDER_ALTER_BEFORE_UNLOCK_STR, MYF(0));
|
if (trx->locked_connections)
|
||||||
DBUG_RETURN(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM);
|
{
|
||||||
}
|
my_message(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM,
|
||||||
DBUG_RETURN(0);
|
ER_SPIDER_ALTER_BEFORE_UNLOCK_STR, MYF(0));
|
||||||
|
DBUG_RETURN(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM);
|
||||||
}
|
}
|
||||||
if (unlikely((error_num = spider_internal_start_trx(this))))
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lock_type != F_UNLCK)
|
||||||
|
{
|
||||||
|
if (unlikely((error_num= spider_internal_start_trx(this))))
|
||||||
{
|
{
|
||||||
DBUG_RETURN(error_num);
|
DBUG_RETURN(error_num);
|
||||||
}
|
}
|
||||||
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
|
if (wide_handler->sql_command != SQLCOM_SELECT &&
|
||||||
} else {
|
wide_handler->sql_command != SQLCOM_HA_READ)
|
||||||
trans_register_ha(trx->thd, FALSE, spider_hton_ptr);
|
{
|
||||||
if (thd_test_options(trx->thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
trx->updated_in_this_trx= TRUE;
|
||||||
trans_register_ha(trx->thd, TRUE, spider_hton_ptr);
|
DBUG_PRINT("info", ("spider trx->updated_in_this_trx=TRUE"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (wide_handler->lock_table_type > 0 ||
|
if (wide_handler->lock_table_type > 0 ||
|
||||||
wide_handler->sql_command == SQLCOM_UNLOCK_TABLES)
|
wide_handler->sql_command == SQLCOM_UNLOCK_TABLES)
|
||||||
@ -1263,12 +1271,10 @@ int ha_spider::external_lock(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* lock/unlock tables */
|
/* lock/unlock tables */
|
||||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
|
||||||
if (partition_handler && partition_handler->handlers)
|
if (partition_handler && partition_handler->handlers)
|
||||||
{
|
{
|
||||||
uint roop_count;
|
for (uint roop_count= 0; roop_count < partition_handler->no_parts;
|
||||||
for (roop_count = 0; roop_count < partition_handler->no_parts;
|
++roop_count)
|
||||||
++roop_count)
|
|
||||||
{
|
{
|
||||||
if (unlikely((error_num =
|
if (unlikely((error_num =
|
||||||
partition_handler->handlers[roop_count]->lock_tables())))
|
partition_handler->handlers[roop_count]->lock_tables())))
|
||||||
@ -1276,54 +1282,13 @@ int ha_spider::external_lock(
|
|||||||
DBUG_RETURN(error_num);
|
DBUG_RETURN(error_num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
#endif
|
|
||||||
if (unlikely((error_num = lock_tables())))
|
|
||||||
{
|
|
||||||
DBUG_RETURN(error_num);
|
|
||||||
}
|
|
||||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
|
||||||
}
|
}
|
||||||
#endif
|
else if (unlikely((error_num= lock_tables())))
|
||||||
|
{
|
||||||
|
DBUG_RETURN(error_num);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_PRINT("info",("spider trx_start=%s",
|
|
||||||
trx->trx_start ? "TRUE" : "FALSE"));
|
|
||||||
/* need to check after spider_internal_start_trx() */
|
|
||||||
if (trx->trx_start)
|
|
||||||
{
|
|
||||||
switch (wide_handler->sql_command)
|
|
||||||
{
|
|
||||||
case SQLCOM_SELECT:
|
|
||||||
case SQLCOM_HA_READ:
|
|
||||||
#ifdef HS_HAS_SQLCOM
|
|
||||||
case SQLCOM_HS_READ:
|
|
||||||
#endif
|
|
||||||
/* nothing to do */
|
|
||||||
break;
|
|
||||||
case SQLCOM_UPDATE:
|
|
||||||
case SQLCOM_UPDATE_MULTI:
|
|
||||||
#ifdef HS_HAS_SQLCOM
|
|
||||||
case SQLCOM_HS_UPDATE:
|
|
||||||
#endif
|
|
||||||
case SQLCOM_CREATE_TABLE:
|
|
||||||
case SQLCOM_INSERT:
|
|
||||||
case SQLCOM_INSERT_SELECT:
|
|
||||||
case SQLCOM_DELETE:
|
|
||||||
case SQLCOM_LOAD:
|
|
||||||
case SQLCOM_REPLACE:
|
|
||||||
case SQLCOM_REPLACE_SELECT:
|
|
||||||
case SQLCOM_DELETE_MULTI:
|
|
||||||
#ifdef HS_HAS_SQLCOM
|
|
||||||
case SQLCOM_HS_INSERT:
|
|
||||||
case SQLCOM_HS_DELETE:
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
trx->updated_in_this_trx = TRUE;
|
|
||||||
DBUG_PRINT("info",("spider trx->updated_in_this_trx=TRUE"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
20
storage/spider/mysql-test/spider/bugfix/r/mdev_27239.result
Normal file
20
storage/spider/mysql-test/spider/bugfix/r/mdev_27239.result
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#
|
||||||
|
# MDEV-27239 Spider: Assertion `thd->transaction->stmt.ha_list == __null || trans == &thd->transaction->stmt' failed in ha_commit_trans on BEGIN WORK after FTWRL
|
||||||
|
#
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
for child3
|
||||||
|
CREATE DATABASE auto_test_local;
|
||||||
|
USE auto_test_local;
|
||||||
|
CREATE TABLE tbl_a (a INT) ENGINE=SPIDER;
|
||||||
|
FLUSH TABLE tbl_a WITH READ LOCK;
|
||||||
|
Warnings:
|
||||||
|
Error 1429 Unable to connect to foreign data source: localhost
|
||||||
|
Error 1429 Unable to connect to foreign data source: localhost
|
||||||
|
Error 1429 Unable to connect to foreign data source: localhost
|
||||||
|
Error 1429 Unable to connect to foreign data source: localhost
|
||||||
|
BEGIN;
|
||||||
|
DROP DATABASE auto_test_local;
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
for child3
|
2
storage/spider/mysql-test/spider/bugfix/t/mdev_27239.cnf
Normal file
2
storage/spider/mysql-test/spider/bugfix/t/mdev_27239.cnf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
!include include/default_mysqld.cnf
|
||||||
|
!include ../my_1_1.cnf
|
24
storage/spider/mysql-test/spider/bugfix/t/mdev_27239.test
Normal file
24
storage/spider/mysql-test/spider/bugfix/t/mdev_27239.test
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
--echo #
|
||||||
|
--echo # MDEV-27239 Spider: Assertion `thd->transaction->stmt.ha_list == __null || trans == &thd->transaction->stmt' failed in ha_commit_trans on BEGIN WORK after FTWRL
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source ../../t/test_init.inc
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
CREATE DATABASE auto_test_local;
|
||||||
|
USE auto_test_local;
|
||||||
|
|
||||||
|
CREATE TABLE tbl_a (a INT) ENGINE=SPIDER;
|
||||||
|
FLUSH TABLE tbl_a WITH READ LOCK;
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
DROP DATABASE auto_test_local;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source ../../t/test_deinit.inc
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
@ -613,7 +613,7 @@ enum enum_vio_type vio_type(Vio* vio)
|
|||||||
|
|
||||||
static const LEX_CSTRING vio_type_names[] =
|
static const LEX_CSTRING vio_type_names[] =
|
||||||
{
|
{
|
||||||
{ STRING_WITH_LEN("Error") }, // cannot happen
|
{ STRING_WITH_LEN("") }, // internal threads
|
||||||
{ STRING_WITH_LEN("TCP/IP") },
|
{ STRING_WITH_LEN("TCP/IP") },
|
||||||
{ STRING_WITH_LEN("Socket") },
|
{ STRING_WITH_LEN("Socket") },
|
||||||
{ STRING_WITH_LEN("Named Pipe") },
|
{ STRING_WITH_LEN("Named Pipe") },
|
||||||
|
Reference in New Issue
Block a user