mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge 10.7 into 10.8
This commit is contained in:
14
debian/autobake-deb.sh
vendored
14
debian/autobake-deb.sh
vendored
@@ -31,9 +31,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
|
||||||
sed "s/10.6/${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR}/" <storage/columnstore/columnstore/debian/control >> debian/control
|
cp -v storage/columnstore/columnstore/debian/mariadb-plugin-columnstore.* debian/
|
||||||
|
echo >> debian/control
|
||||||
|
sed "s/10.6/${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR}/" <storage/columnstore/columnstore/debian/control >> debian/control
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Look up distro-version specific stuff
|
# Look up distro-version specific stuff
|
||||||
@@ -137,6 +140,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/mariadb-server-10.8.postinst
vendored
2
debian/mariadb-server-10.8.postinst
vendored
@@ -115,7 +115,7 @@ EOF
|
|||||||
if [ -f "$mysql_datadir"/auto.cnf ] && [ -f "$mysql_datadir"/mysql/user.MYD ] &&
|
if [ -f "$mysql_datadir"/auto.cnf ] && [ -f "$mysql_datadir"/mysql/user.MYD ] &&
|
||||||
[ ! lsof -nt "$mysql_datadir"/mysql/user.MYD > /dev/null ] && [ ! -f "$mysql_datadir"/undo_001 ]; then
|
[ ! lsof -nt "$mysql_datadir"/mysql/user.MYD > /dev/null ] && [ ! -f "$mysql_datadir"/undo_001 ]; then
|
||||||
echo "UPDATE mysql.user SET plugin='unix_socket' WHERE plugin='auth_socket';" |
|
echo "UPDATE mysql.user SET plugin='unix_socket' WHERE plugin='auth_socket';" |
|
||||||
/usr/sbin/mariadbd --skip-innodb --key_buffer_size=0 --default-storage-engine=MyISAM --bootstrap 2> /dev/null
|
mariadbd --skip-innodb --key_buffer_size=0 --default-storage-engine=MyISAM --bootstrap 2> /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ensure the existence and right permissions for the database and
|
# Ensure the existence and right permissions for the database and
|
||||||
|
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
|
||||||
|
6
debian/source/lintian-overrides
vendored
6
debian/source/lintian-overrides
vendored
@@ -2,7 +2,6 @@
|
|||||||
# since package breaks/replaces these but at the same time also provides them
|
# since package breaks/replaces these but at the same time also provides them
|
||||||
version-substvar-for-external-package mariadb-client-core-10.8 -> mysql-client-5.5
|
version-substvar-for-external-package mariadb-client-core-10.8 -> mysql-client-5.5
|
||||||
version-substvar-for-external-package mariadb-server-10.8 -> mysql-server
|
version-substvar-for-external-package mariadb-server-10.8 -> mysql-server
|
||||||
version-substvar-for-external-package mariadb-server-10.8 -> mysql-server
|
|
||||||
version-substvar-for-external-package libmariadb-dev -> libmysqlclient-dev
|
version-substvar-for-external-package libmariadb-dev -> libmysqlclient-dev
|
||||||
version-substvar-for-external-package libmariadb-dev -> libmysqld-dev
|
version-substvar-for-external-package libmariadb-dev -> libmysqld-dev
|
||||||
version-substvar-for-external-package mariadb-server-10.8 -> mysql-client-5.5
|
version-substvar-for-external-package mariadb-server-10.8 -> mysql-client-5.5
|
||||||
@@ -10,14 +9,9 @@ version-substvar-for-external-package mariadb-server-10.8 -> mysql-client-5.6
|
|||||||
version-substvar-for-external-package mariadb-server-10.8 -> mysql-client-5.7
|
version-substvar-for-external-package mariadb-server-10.8 -> mysql-client-5.7
|
||||||
version-substvar-for-external-package mariadb-server-10.8 -> mysql-client-8.0
|
version-substvar-for-external-package mariadb-server-10.8 -> mysql-client-8.0
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.1
|
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.1
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.1
|
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.5
|
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.5
|
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.5
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.6
|
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.6
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.6
|
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.7
|
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.7
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-5.7
|
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-8.0
|
|
||||||
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-8.0
|
version-substvar-for-external-package mariadb-client-10.8 -> mysql-client-core-8.0
|
||||||
version-substvar-for-external-package libmariadbd-dev -> libmariadbclient-dev
|
version-substvar-for-external-package libmariadbd-dev -> libmariadbclient-dev
|
||||||
# ColumnStore not used in Debian, safe to ignore. Reported upstream in https://jira.mariadb.org/browse/MDEV-24124
|
# ColumnStore not used in Debian, safe to ignore. Reported upstream in https://jira.mariadb.org/browse/MDEV-24124
|
||||||
|
@@ -1784,6 +1784,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(" ");
|
||||||
|
@@ -43,7 +43,12 @@
|
|||||||
#define SD_LISTEN_FDS_START (0)
|
#define SD_LISTEN_FDS_START (0)
|
||||||
#define sd_notify(X, Y)
|
#define sd_notify(X, Y)
|
||||||
#define sd_notifyf(E, F, ...)
|
#define sd_notifyf(E, F, ...)
|
||||||
#define service_manager_extend_timeout(I, FMTSTR, ...)
|
#ifdef _WIN32
|
||||||
|
#define service_manager_extend_timeout(I, F, ...) \
|
||||||
|
mysqld_win_extend_service_timeout(I)
|
||||||
|
#else
|
||||||
|
#define service_manager_extend_timeout(I, FMTSTR, ...)
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* MY_SERVICE_MANAGER_INCLUDED */
|
#endif /* MY_SERVICE_MANAGER_INCLUDED */
|
||||||
|
@@ -18,5 +18,3 @@ file_contents : MDEV-6526 these files are not installed anymore
|
|||||||
max_statement_time : cannot possibly work, depends on timing
|
max_statement_time : cannot possibly work, depends on timing
|
||||||
partition_open_files_limit : open_files_limit check broken by MDEV-18360
|
partition_open_files_limit : open_files_limit check broken by MDEV-18360
|
||||||
partition_innodb : Waiting for fix MDEV-20169
|
partition_innodb : Waiting for fix MDEV-20169
|
||||||
type_enum : Waiting for fix MDEV-6978
|
|
||||||
type_set : Waiting for fix MDEV-6978
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -1699,7 +1699,7 @@ a ENUM('
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` enum('<27>','<27>','<27>') CHARACTER SET utf8 DEFAULT '<27>'
|
`a` enum('<27>','<27>','<27>') CHARACTER SET utf8mb3 DEFAULT '<27>'
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
insert into t1 values ('<27>'), ('<27>'), ('<27>');
|
insert into t1 values ('<27>'), ('<27>'), ('<27>');
|
||||||
select a from t1 order by a;
|
select a from t1 order by a;
|
||||||
@@ -1932,14 +1932,16 @@ ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
|||||||
ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
||||||
SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
c1
|
c1
|
||||||
|
a
|
||||||
a
|
a
|
||||||
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
c1
|
c1
|
||||||
|
a
|
||||||
a
|
a
|
||||||
# t2 should NOT be eliminated
|
# t2 should NOT be eliminated
|
||||||
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
|
1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
|
||||||
DROP TABLE IF EXISTS t1,t2;
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
CREATE TABLE t1 (c1 SET('a') CHARACTER SET latin1 PRIMARY KEY);
|
CREATE TABLE t1 (c1 SET('a') CHARACTER SET latin1 PRIMARY KEY);
|
||||||
@@ -1957,14 +1959,16 @@ ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
|||||||
ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
||||||
SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
c1
|
c1
|
||||||
|
a
|
||||||
a
|
a
|
||||||
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
c1
|
c1
|
||||||
|
a
|
||||||
a
|
a
|
||||||
# t2 should NOT be eliminated
|
# t2 should NOT be eliminated
|
||||||
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
|
1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
|
||||||
DROP TABLE IF EXISTS t1,t2;
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 PRIMARY KEY);
|
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 PRIMARY KEY);
|
||||||
@@ -1982,14 +1986,16 @@ ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
|||||||
ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
ALTER TABLE t2 ADD PRIMARY KEY(c1);
|
||||||
SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
c1
|
c1
|
||||||
|
a
|
||||||
a
|
a
|
||||||
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
c1
|
c1
|
||||||
|
a
|
||||||
a
|
a
|
||||||
# t2 should NOT be eliminated
|
# t2 should NOT be eliminated
|
||||||
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
|
1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
|
||||||
DROP TABLE IF EXISTS t1,t2;
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
#
|
#
|
||||||
|
21
mysql-test/suite/innodb/r/alter_crash_rebuild.result
Normal file
21
mysql-test/suite/innodb/r/alter_crash_rebuild.result
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
CREATE TABLE t1 (a INT NOT NULL) ENGINE=InnoDB STATS_PERSISTENT=0;
|
||||||
|
connect ddl,localhost,root;
|
||||||
|
SET DEBUG_SYNC='after_trx_committed_in_memory SIGNAL stuck WAIT_FOR ever EXECUTE 2';
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
||||||
|
connection default;
|
||||||
|
SET DEBUG_SYNC='now WAIT_FOR stuck';
|
||||||
|
SET DEBUG_SYNC='now SIGNAL ever';
|
||||||
|
SET DEBUG_SYNC='now WAIT_FOR stuck';
|
||||||
|
SET GLOBAL innodb_log_checkpoint_now=ON;
|
||||||
|
# restart
|
||||||
|
disconnect ddl;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`a`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 STATS_PERSISTENT=0
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
DROP TABLE t1;
|
||||||
|
InnoDB 0 transactions not purged
|
49
mysql-test/suite/innodb/r/ibuf_delete.result
Normal file
49
mysql-test/suite/innodb/r/ibuf_delete.result
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
SET @buffering= @@innodb_change_buffering;
|
||||||
|
SET GLOBAL innodb_change_buffering= deletes;
|
||||||
|
SET @flush= @@innodb_flush_log_at_trx_commit;
|
||||||
|
SET GLOBAL innodb_flush_log_at_trx_commit= 0;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a varchar(1024),
|
||||||
|
b varchar(1024),
|
||||||
|
c varchar(1024),
|
||||||
|
d varchar(1024),
|
||||||
|
e varchar(1024),
|
||||||
|
f varchar(1024),
|
||||||
|
g varchar(1024),
|
||||||
|
h varchar(1024),
|
||||||
|
key (a),
|
||||||
|
key (b),
|
||||||
|
key (c),
|
||||||
|
key (d)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1
|
||||||
|
SELECT REPEAT('x',10), REPEAT('x',13), REPEAT('x',427), REPEAT('x',244),
|
||||||
|
REPEAT('x',9), REPEAT('x',112), REPEAT('x',814), REPEAT('x',633)
|
||||||
|
FROM seq_1_to_1024;
|
||||||
|
CREATE TEMPORARY TABLE t2 (
|
||||||
|
a varchar(1024),
|
||||||
|
b varchar(1024),
|
||||||
|
c varchar(1024),
|
||||||
|
d varchar(1024),
|
||||||
|
e varchar(1024),
|
||||||
|
f varchar(1024),
|
||||||
|
g varchar(1024),
|
||||||
|
h varchar(1024),
|
||||||
|
i varchar(1024),
|
||||||
|
j varchar(1024),
|
||||||
|
k varchar(1024),
|
||||||
|
l varchar(1024),
|
||||||
|
m varchar(1024),
|
||||||
|
key (a),
|
||||||
|
key (b),
|
||||||
|
key (c),
|
||||||
|
key (d),
|
||||||
|
key (e),
|
||||||
|
key (f)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
SET @x=REPEAT('x',512);
|
||||||
|
INSERT INTO t2 SELECT @x, @x, @x, @x, @x, @x, @x, @x, @x, @x, @x, @x, @x
|
||||||
|
FROM seq_1_to_768;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
SET GLOBAL innodb_change_buffering= @buffering;
|
||||||
|
SET GLOBAL innodb_flush_log_at_trx_commit= @flush;
|
@@ -268,3 +268,16 @@ INSERT INTO t1 VALUES (0),(0),(0),(0),(0),(0),(0);
|
|||||||
ERROR HY000: Got error 1 "Operation not permitted" during COMMIT
|
ERROR HY000: Got error 1 "Operation not permitted" during COMMIT
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-28037 Assertion `trx->bulk_insert' failed in innodb_prepare_commit_versioned
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (c INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t2 (c INT) ENGINE=InnoDB;
|
||||||
|
CREATE TRIGGER tr AFTER INSERT ON t1 FOR EACH ROW UPDATE t2 SET c=1;
|
||||||
|
INSERT INTO t1 VALUES (0);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c
|
||||||
|
0
|
||||||
|
SELECT * FROM t2;
|
||||||
|
c
|
||||||
|
DROP TABLE t2, t1;
|
||||||
|
67
mysql-test/suite/innodb/t/ibuf_delete.test
Normal file
67
mysql-test/suite/innodb/t/ibuf_delete.test
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_sequence.inc
|
||||||
|
|
||||||
|
SET @buffering= @@innodb_change_buffering;
|
||||||
|
SET GLOBAL innodb_change_buffering= deletes;
|
||||||
|
SET @flush= @@innodb_flush_log_at_trx_commit;
|
||||||
|
SET GLOBAL innodb_flush_log_at_trx_commit= 0;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a varchar(1024),
|
||||||
|
b varchar(1024),
|
||||||
|
c varchar(1024),
|
||||||
|
d varchar(1024),
|
||||||
|
e varchar(1024),
|
||||||
|
f varchar(1024),
|
||||||
|
g varchar(1024),
|
||||||
|
h varchar(1024),
|
||||||
|
key (a),
|
||||||
|
key (b),
|
||||||
|
key (c),
|
||||||
|
key (d)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
INSERT INTO t1
|
||||||
|
SELECT REPEAT('x',10), REPEAT('x',13), REPEAT('x',427), REPEAT('x',244),
|
||||||
|
REPEAT('x',9), REPEAT('x',112), REPEAT('x',814), REPEAT('x',633)
|
||||||
|
FROM seq_1_to_1024;
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE t2 (
|
||||||
|
a varchar(1024),
|
||||||
|
b varchar(1024),
|
||||||
|
c varchar(1024),
|
||||||
|
d varchar(1024),
|
||||||
|
e varchar(1024),
|
||||||
|
f varchar(1024),
|
||||||
|
g varchar(1024),
|
||||||
|
h varchar(1024),
|
||||||
|
i varchar(1024),
|
||||||
|
j varchar(1024),
|
||||||
|
k varchar(1024),
|
||||||
|
l varchar(1024),
|
||||||
|
m varchar(1024),
|
||||||
|
key (a),
|
||||||
|
key (b),
|
||||||
|
key (c),
|
||||||
|
key (d),
|
||||||
|
key (e),
|
||||||
|
key (f)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
SET @x=REPEAT('x',512);
|
||||||
|
INSERT INTO t2 SELECT @x, @x, @x, @x, @x, @x, @x, @x, @x, @x, @x, @x, @x
|
||||||
|
FROM seq_1_to_768;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--let $run=1024
|
||||||
|
while ($run)
|
||||||
|
{
|
||||||
|
eval DELETE FROM t1 LIMIT 1 /* $run */;
|
||||||
|
--dec $run
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
SET GLOBAL innodb_change_buffering= @buffering;
|
||||||
|
SET GLOBAL innodb_flush_log_at_trx_commit= @flush;
|
@@ -281,3 +281,14 @@ CREATE TABLE t1 (c0 YEAR UNIQUE) ENGINE=InnoDB;
|
|||||||
INSERT INTO t1 VALUES (0),(0),(0),(0),(0),(0),(0);
|
INSERT INTO t1 VALUES (0),(0),(0),(0),(0),(0),(0);
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-28037 Assertion `trx->bulk_insert' failed in innodb_prepare_commit_versioned
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (c INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t2 (c INT) ENGINE=InnoDB;
|
||||||
|
CREATE TRIGGER tr AFTER INSERT ON t1 FOR EACH ROW UPDATE t2 SET c=1;
|
||||||
|
INSERT INTO t1 VALUES (0);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
DROP TABLE t2, t1;
|
||||||
|
@@ -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
|
||||||
|
@@ -56,3 +56,15 @@ blocking_trx_rows_modified bigint(21) unsigned NO NULL
|
|||||||
sql_kill_blocking_query varchar(32) YES NULL
|
sql_kill_blocking_query varchar(32) YES NULL
|
||||||
sql_kill_blocking_connection varchar(26) YES NULL
|
sql_kill_blocking_connection varchar(26) YES NULL
|
||||||
SELECT * FROM sys.x$innodb_lock_waits;
|
SELECT * FROM sys.x$innodb_lock_waits;
|
||||||
|
#
|
||||||
|
# Start of 10.6 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed
|
||||||
|
#
|
||||||
|
SET SESSION sql_mode='ALLOW_INVALID_DATES';
|
||||||
|
SELECT * FROM sys.x$innodb_lock_waits;
|
||||||
|
SET SESSION sql_mode=DEFAULT;
|
||||||
|
#
|
||||||
|
# End of 10.6 tests
|
||||||
|
#
|
||||||
|
@@ -21,3 +21,21 @@ DESC sys.x$innodb_lock_waits;
|
|||||||
SELECT * FROM sys.x$innodb_lock_waits;
|
SELECT * FROM sys.x$innodb_lock_waits;
|
||||||
--enable_result_log
|
--enable_result_log
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.6 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET SESSION sql_mode='ALLOW_INVALID_DATES';
|
||||||
|
--disable_result_log
|
||||||
|
SELECT * FROM sys.x$innodb_lock_waits;
|
||||||
|
--enable_result_log
|
||||||
|
SET SESSION sql_mode=DEFAULT;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.6 tests
|
||||||
|
--echo #
|
||||||
|
@@ -2788,6 +2788,12 @@ void mysqld_win_set_startup_complete()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mysqld_win_extend_service_timeout(DWORD sec)
|
||||||
|
{
|
||||||
|
my_report_svc_status((DWORD)-1, 0, 2*1000*sec);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void mysqld_win_set_service_name(const char *name)
|
void mysqld_win_set_service_name(const char *name)
|
||||||
{
|
{
|
||||||
if (stricmp(name, "mysql"))
|
if (stricmp(name, "mysql"))
|
||||||
|
@@ -979,6 +979,7 @@ extern int mysqld_main(int argc, char **argv);
|
|||||||
extern HANDLE hEventShutdown;
|
extern HANDLE hEventShutdown;
|
||||||
extern void mysqld_win_initiate_shutdown();
|
extern void mysqld_win_initiate_shutdown();
|
||||||
extern void mysqld_win_set_startup_complete();
|
extern void mysqld_win_set_startup_complete();
|
||||||
|
extern void mysqld_win_extend_service_timeout(DWORD sec);
|
||||||
extern void mysqld_set_service_status_callback(void (*)(DWORD, DWORD, DWORD));
|
extern void mysqld_set_service_status_callback(void (*)(DWORD, DWORD, DWORD));
|
||||||
extern void mysqld_win_set_service_name(const char *name);
|
extern void mysqld_win_set_service_name(const char *name);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -82,7 +82,8 @@ static void report_svc_status(DWORD current_state, DWORD exit_code, DWORD wait_h
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
static DWORD check_point= 1;
|
static DWORD check_point= 1;
|
||||||
svc_status.dwCurrentState= current_state;
|
if (current_state != (DWORD)-1)
|
||||||
|
svc_status.dwCurrentState= current_state;
|
||||||
svc_status.dwWaitHint= wait_hint;
|
svc_status.dwWaitHint= wait_hint;
|
||||||
|
|
||||||
if (exit_code)
|
if (exit_code)
|
||||||
|
@@ -2136,15 +2136,17 @@ void buf_pool_t::watch_unset(const page_id_t id, buf_pool_t::hash_chain &chain)
|
|||||||
if (!watch_is_sentinel(*w))
|
if (!watch_is_sentinel(*w))
|
||||||
{
|
{
|
||||||
no_watch:
|
no_watch:
|
||||||
ut_d(const auto s=) w->unfix();
|
w->unfix();
|
||||||
ut_ad(~buf_page_t::LRU_MASK & s);
|
|
||||||
w= nullptr;
|
w= nullptr;
|
||||||
}
|
}
|
||||||
const auto state= w->state();
|
else
|
||||||
ut_ad(~buf_page_t::LRU_MASK & state);
|
{
|
||||||
ut_ad(state >= buf_page_t::UNFIXED);
|
const auto state= w->state();
|
||||||
if (state != buf_page_t::UNFIXED + 1)
|
ut_ad(~buf_page_t::LRU_MASK & state);
|
||||||
goto no_watch;
|
ut_ad(state >= buf_page_t::UNFIXED + 1);
|
||||||
|
if (state != buf_page_t::UNFIXED + 1)
|
||||||
|
goto no_watch;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!w)
|
if (!w)
|
||||||
|
@@ -68,6 +68,7 @@ Created 1/8/1996 Heikki Tuuri
|
|||||||
#include "srv0mon.h"
|
#include "srv0mon.h"
|
||||||
#include "srv0start.h"
|
#include "srv0start.h"
|
||||||
#include "trx0undo.h"
|
#include "trx0undo.h"
|
||||||
|
#include "trx0purge.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@@ -601,13 +602,13 @@ dict_index_get_nth_field_pos(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Parse the table file name into table name and database name.
|
/** Parse the table file name into table name and database name.
|
||||||
@tparam dict_locked whether dict_sys.lock() was called
|
@tparam dict_frozen whether the caller holds dict_sys.latch
|
||||||
@param[in,out] db_name database name buffer
|
@param[in,out] db_name database name buffer
|
||||||
@param[in,out] tbl_name table name buffer
|
@param[in,out] tbl_name table name buffer
|
||||||
@param[out] db_name_len database name length
|
@param[out] db_name_len database name length
|
||||||
@param[out] tbl_name_len table name length
|
@param[out] tbl_name_len table name length
|
||||||
@return whether the table name is visible to SQL */
|
@return whether the table name is visible to SQL */
|
||||||
template<bool dict_locked>
|
template<bool dict_frozen>
|
||||||
bool dict_table_t::parse_name(char (&db_name)[NAME_LEN + 1],
|
bool dict_table_t::parse_name(char (&db_name)[NAME_LEN + 1],
|
||||||
char (&tbl_name)[NAME_LEN + 1],
|
char (&tbl_name)[NAME_LEN + 1],
|
||||||
size_t *db_name_len, size_t *tbl_name_len) const
|
size_t *db_name_len, size_t *tbl_name_len) const
|
||||||
@@ -615,7 +616,7 @@ bool dict_table_t::parse_name(char (&db_name)[NAME_LEN + 1],
|
|||||||
char db_buf[MAX_DATABASE_NAME_LEN + 1];
|
char db_buf[MAX_DATABASE_NAME_LEN + 1];
|
||||||
char tbl_buf[MAX_TABLE_NAME_LEN + 1];
|
char tbl_buf[MAX_TABLE_NAME_LEN + 1];
|
||||||
|
|
||||||
if (!dict_locked)
|
if (!dict_frozen)
|
||||||
dict_sys.freeze(SRW_LOCK_CALL); /* protect against renaming */
|
dict_sys.freeze(SRW_LOCK_CALL); /* protect against renaming */
|
||||||
ut_ad(dict_sys.frozen());
|
ut_ad(dict_sys.frozen());
|
||||||
const size_t db_len= name.dblen();
|
const size_t db_len= name.dblen();
|
||||||
@@ -635,7 +636,7 @@ bool dict_table_t::parse_name(char (&db_name)[NAME_LEN + 1],
|
|||||||
memcpy(tbl_buf, mdl_name.m_name + db_len + 1, tbl_len);
|
memcpy(tbl_buf, mdl_name.m_name + db_len + 1, tbl_len);
|
||||||
tbl_buf[tbl_len]= 0;
|
tbl_buf[tbl_len]= 0;
|
||||||
|
|
||||||
if (!dict_locked)
|
if (!dict_frozen)
|
||||||
dict_sys.unfreeze();
|
dict_sys.unfreeze();
|
||||||
|
|
||||||
*db_name_len= filename_to_tablename(db_buf, db_name,
|
*db_name_len= filename_to_tablename(db_buf, db_name,
|
||||||
@@ -781,7 +782,7 @@ return_without_mdl:
|
|||||||
|
|
||||||
size_t db1_len, tbl1_len;
|
size_t db1_len, tbl1_len;
|
||||||
|
|
||||||
if (!table->parse_name<!trylock>(db_buf1, tbl_buf1, &db1_len, &tbl1_len))
|
if (!table->parse_name<true>(db_buf1, tbl_buf1, &db1_len, &tbl1_len))
|
||||||
{
|
{
|
||||||
/* The table was renamed to #sql prefix.
|
/* The table was renamed to #sql prefix.
|
||||||
Release MDL (if any) for the old name and return. */
|
Release MDL (if any) for the old name and return. */
|
||||||
@@ -819,12 +820,14 @@ template dict_table_t* dict_acquire_mdl_shared<true>
|
|||||||
(dict_table_t*,THD*,MDL_ticket**,dict_table_op_t);
|
(dict_table_t*,THD*,MDL_ticket**,dict_table_op_t);
|
||||||
|
|
||||||
/** Look up a table by numeric identifier.
|
/** Look up a table by numeric identifier.
|
||||||
|
@tparam purge_thd Whether the function is called by purge thread
|
||||||
@param[in] table_id table identifier
|
@param[in] table_id table identifier
|
||||||
@param[in] dict_locked data dictionary locked
|
@param[in] dict_locked data dictionary locked
|
||||||
@param[in] table_op operation to perform when opening
|
@param[in] table_op operation to perform when opening
|
||||||
@param[in,out] thd background thread, or NULL to not acquire MDL
|
@param[in,out] thd background thread, or NULL to not acquire MDL
|
||||||
@param[out] mdl mdl ticket, or NULL
|
@param[out] mdl mdl ticket, or NULL
|
||||||
@return table, NULL if does not exist */
|
@return table, NULL if does not exist */
|
||||||
|
template <bool purge_thd>
|
||||||
dict_table_t*
|
dict_table_t*
|
||||||
dict_table_open_on_id(table_id_t table_id, bool dict_locked,
|
dict_table_open_on_id(table_id_t table_id, bool dict_locked,
|
||||||
dict_table_op_t table_op, THD *thd,
|
dict_table_op_t table_op, THD *thd,
|
||||||
@@ -837,6 +840,12 @@ dict_table_open_on_id(table_id_t table_id, bool dict_locked,
|
|||||||
|
|
||||||
if (table)
|
if (table)
|
||||||
{
|
{
|
||||||
|
if (purge_thd && purge_sys.must_wait_FTS())
|
||||||
|
{
|
||||||
|
table= nullptr;
|
||||||
|
goto func_exit;
|
||||||
|
}
|
||||||
|
|
||||||
table->acquire();
|
table->acquire();
|
||||||
if (thd && !dict_locked)
|
if (thd && !dict_locked)
|
||||||
table= dict_acquire_mdl_shared<false>(table, thd, mdl, table_op);
|
table= dict_acquire_mdl_shared<false>(table, thd, mdl, table_op);
|
||||||
@@ -853,7 +862,14 @@ dict_table_open_on_id(table_id_t table_id, bool dict_locked,
|
|||||||
? DICT_ERR_IGNORE_RECOVER_LOCK
|
? DICT_ERR_IGNORE_RECOVER_LOCK
|
||||||
: DICT_ERR_IGNORE_FK_NOKEY);
|
: DICT_ERR_IGNORE_FK_NOKEY);
|
||||||
if (table)
|
if (table)
|
||||||
|
{
|
||||||
|
if (purge_thd && purge_sys.must_wait_FTS())
|
||||||
|
{
|
||||||
|
dict_sys.unlock();
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
table->acquire();
|
table->acquire();
|
||||||
|
}
|
||||||
if (!dict_locked)
|
if (!dict_locked)
|
||||||
{
|
{
|
||||||
dict_sys.unlock();
|
dict_sys.unlock();
|
||||||
@@ -867,12 +883,22 @@ dict_table_open_on_id(table_id_t table_id, bool dict_locked,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func_exit:
|
||||||
if (!dict_locked)
|
if (!dict_locked)
|
||||||
dict_sys.unfreeze();
|
dict_sys.unfreeze();
|
||||||
|
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template dict_table_t* dict_table_open_on_id<false>
|
||||||
|
(table_id_t table_id, bool dict_locked,
|
||||||
|
dict_table_op_t table_op, THD *thd,
|
||||||
|
MDL_ticket **mdl);
|
||||||
|
template dict_table_t* dict_table_open_on_id<true>
|
||||||
|
(table_id_t table_id, bool dict_locked,
|
||||||
|
dict_table_op_t table_op, THD *thd,
|
||||||
|
MDL_ticket **mdl);
|
||||||
|
|
||||||
/********************************************************************//**
|
/********************************************************************//**
|
||||||
Looks for column n position in the clustered index.
|
Looks for column n position in the clustered index.
|
||||||
@return position in internal representation of the clustered index */
|
@return position in internal representation of the clustered index */
|
||||||
|
@@ -1555,12 +1555,16 @@ have any other reference count.
|
|||||||
static void fts_table_no_ref_count(const char *table_name)
|
static void fts_table_no_ref_count(const char *table_name)
|
||||||
{
|
{
|
||||||
dict_table_t *table= dict_table_open_on_name(
|
dict_table_t *table= dict_table_open_on_name(
|
||||||
table_name, false, DICT_ERR_IGNORE_TABLESPACE);
|
table_name, true, DICT_ERR_IGNORE_TABLESPACE);
|
||||||
if (!table)
|
if (!table)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
while (table->get_ref_count() > 1)
|
while (table->get_ref_count() > 1)
|
||||||
|
{
|
||||||
|
dict_sys.unlock();
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||||
|
dict_sys.lock(SRW_LOCK_CALL);
|
||||||
|
}
|
||||||
|
|
||||||
table->release();
|
table->release();
|
||||||
}
|
}
|
||||||
@@ -1572,8 +1576,10 @@ and common table associated with the fts table.
|
|||||||
already stopped*/
|
already stopped*/
|
||||||
void purge_sys_t::stop_FTS(const dict_table_t &table, bool already_stopped)
|
void purge_sys_t::stop_FTS(const dict_table_t &table, bool already_stopped)
|
||||||
{
|
{
|
||||||
|
dict_sys.lock(SRW_LOCK_CALL);
|
||||||
if (!already_stopped)
|
if (!already_stopped)
|
||||||
purge_sys.stop_FTS();
|
purge_sys.stop_FTS();
|
||||||
|
|
||||||
fts_table_t fts_table;
|
fts_table_t fts_table;
|
||||||
char table_name[MAX_FULL_NAME_LEN];
|
char table_name[MAX_FULL_NAME_LEN];
|
||||||
|
|
||||||
@@ -1582,28 +1588,31 @@ void purge_sys_t::stop_FTS(const dict_table_t &table, bool already_stopped)
|
|||||||
for (const char **suffix= fts_common_tables; *suffix; suffix++)
|
for (const char **suffix= fts_common_tables; *suffix; suffix++)
|
||||||
{
|
{
|
||||||
fts_table.suffix= *suffix;
|
fts_table.suffix= *suffix;
|
||||||
fts_get_table_name(&fts_table, table_name, false);
|
fts_get_table_name(&fts_table, table_name, true);
|
||||||
fts_table_no_ref_count(table_name);
|
fts_table_no_ref_count(table_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!table.fts)
|
if (table.fts)
|
||||||
return;
|
|
||||||
auto indexes= table.fts->indexes;
|
|
||||||
if (!indexes)
|
|
||||||
return;
|
|
||||||
for (ulint i= 0;i < ib_vector_size(indexes); ++i)
|
|
||||||
{
|
{
|
||||||
const dict_index_t *index= static_cast<const dict_index_t*>(
|
if (auto indexes= table.fts->indexes)
|
||||||
ib_vector_getp(indexes, i));
|
|
||||||
FTS_INIT_INDEX_TABLE(&fts_table, nullptr, FTS_INDEX_TABLE, index);
|
|
||||||
for (const fts_index_selector_t *s= fts_index_selector;
|
|
||||||
s->suffix; s++)
|
|
||||||
{
|
{
|
||||||
fts_table.suffix= s->suffix;
|
for (ulint i= 0;i < ib_vector_size(indexes); ++i)
|
||||||
fts_get_table_name(&fts_table, table_name, false);
|
{
|
||||||
fts_table_no_ref_count(table_name);
|
const dict_index_t *index= static_cast<const dict_index_t*>(
|
||||||
|
ib_vector_getp(indexes, i));
|
||||||
|
FTS_INIT_INDEX_TABLE(&fts_table, nullptr, FTS_INDEX_TABLE, index);
|
||||||
|
for (const fts_index_selector_t *s= fts_index_selector;
|
||||||
|
s->suffix; s++)
|
||||||
|
{
|
||||||
|
fts_table.suffix= s->suffix;
|
||||||
|
fts_get_table_name(&fts_table, table_name, true);
|
||||||
|
fts_table_no_ref_count(table_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dict_sys.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Lock the internal FTS_ tables for table, before fts_drop_tables().
|
/** Lock the internal FTS_ tables for table, before fts_drop_tables().
|
||||||
|
@@ -15788,6 +15788,12 @@ ha_innobase::start_stmt(
|
|||||||
if (!trx->bulk_insert) {
|
if (!trx->bulk_insert) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Trigger could've initiated another stmt.
|
||||||
|
So apply all bulk operation and mark as
|
||||||
|
end bulk insert for all tables */
|
||||||
|
trx->bulk_insert_apply();
|
||||||
|
trx->end_bulk_insert();
|
||||||
trx->bulk_insert = false;
|
trx->bulk_insert = false;
|
||||||
trx->last_sql_stat_start.least_undo_no = trx->undo_no;
|
trx->last_sql_stat_start.least_undo_no = trx->undo_no;
|
||||||
}
|
}
|
||||||
|
@@ -2003,7 +2003,8 @@ inline void buf_page_t::set_state(uint32_t s)
|
|||||||
{
|
{
|
||||||
mysql_mutex_assert_owner(&buf_pool.mutex);
|
mysql_mutex_assert_owner(&buf_pool.mutex);
|
||||||
ut_ad(s <= REMOVE_HASH || s >= UNFIXED);
|
ut_ad(s <= REMOVE_HASH || s >= UNFIXED);
|
||||||
ut_ad(s <= READ_FIX);
|
ut_ad(s < WRITE_FIX);
|
||||||
|
ut_ad(s <= READ_FIX || zip.fix == READ_FIX);
|
||||||
zip.fix= s;
|
zip.fix= s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2013, 2021, MariaDB Corporation.
|
Copyright (c) 2013, 2022, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@@ -146,6 +146,7 @@ dict_acquire_mdl_shared(dict_table_t *table,
|
|||||||
@param[in,out] thd background thread, or NULL to not acquire MDL
|
@param[in,out] thd background thread, or NULL to not acquire MDL
|
||||||
@param[out] mdl mdl ticket, or NULL
|
@param[out] mdl mdl ticket, or NULL
|
||||||
@return table, NULL if does not exist */
|
@return table, NULL if does not exist */
|
||||||
|
template<bool purge_thd= false>
|
||||||
dict_table_t*
|
dict_table_t*
|
||||||
dict_table_open_on_id(table_id_t table_id, bool dict_locked,
|
dict_table_open_on_id(table_id_t table_id, bool dict_locked,
|
||||||
dict_table_op_t table_op, THD *thd= nullptr,
|
dict_table_op_t table_op, THD *thd= nullptr,
|
||||||
@@ -1566,7 +1567,7 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
lock_wait(SRW_LOCK_ARGS(file, line));
|
lock_wait(SRW_LOCK_ARGS(file, line));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef UNIV_PFS_RWLOCK
|
#ifdef UNIV_PFS_RWLOCK
|
||||||
/** Unlock the data dictionary cache. */
|
/** Unlock the data dictionary cache. */
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2013, 2021, MariaDB Corporation.
|
Copyright (c) 2013, 2022, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@@ -1947,17 +1947,17 @@ struct dict_table_t {
|
|||||||
/** For overflow fields returns potential max length stored inline */
|
/** For overflow fields returns potential max length stored inline */
|
||||||
inline size_t get_overflow_field_local_len() const;
|
inline size_t get_overflow_field_local_len() const;
|
||||||
|
|
||||||
/** Parse the table file name into table name and database name.
|
/** Parse the table file name into table name and database name.
|
||||||
@tparam dict_locked whether dict_sys.lock() was called
|
@tparam dict_frozen whether the caller holds dict_sys.latch
|
||||||
@param[in,out] db_name database name buffer
|
@param[in,out] db_name database name buffer
|
||||||
@param[in,out] tbl_name table name buffer
|
@param[in,out] tbl_name table name buffer
|
||||||
@param[out] db_name_len database name length
|
@param[out] db_name_len database name length
|
||||||
@param[out] tbl_name_len table name length
|
@param[out] tbl_name_len table name length
|
||||||
@return whether the table name is visible to SQL */
|
@return whether the table name is visible to SQL */
|
||||||
template<bool dict_locked= false>
|
template<bool dict_frozen= false>
|
||||||
bool parse_name(char (&db_name)[NAME_LEN + 1],
|
bool parse_name(char (&db_name)[NAME_LEN + 1],
|
||||||
char (&tbl_name)[NAME_LEN + 1],
|
char (&tbl_name)[NAME_LEN + 1],
|
||||||
size_t *db_name_len, size_t *tbl_name_len) const;
|
size_t *db_name_len, size_t *tbl_name_len) const;
|
||||||
|
|
||||||
/** Clear the table when rolling back TRX_UNDO_EMPTY */
|
/** Clear the table when rolling back TRX_UNDO_EMPTY */
|
||||||
void clear(que_thr_t *thr);
|
void clear(que_thr_t *thr);
|
||||||
|
@@ -1027,10 +1027,14 @@ row_purge_parse_undo_rec(
|
|||||||
try_again:
|
try_again:
|
||||||
purge_sys.check_stop_FTS();
|
purge_sys.check_stop_FTS();
|
||||||
|
|
||||||
node->table = dict_table_open_on_id(
|
node->table = dict_table_open_on_id<true>(
|
||||||
table_id, false, DICT_TABLE_OP_NORMAL, node->purge_thd,
|
table_id, false, DICT_TABLE_OP_NORMAL, node->purge_thd,
|
||||||
&node->mdl_ticket);
|
&node->mdl_ticket);
|
||||||
|
|
||||||
|
if (!node->table && purge_sys.must_wait_FTS()) {
|
||||||
|
goto try_again;
|
||||||
|
}
|
||||||
|
|
||||||
if (!node->table) {
|
if (!node->table) {
|
||||||
/* The table has been dropped: no need to do purge and
|
/* The table has been dropped: no need to do purge and
|
||||||
release mdl happened as a part of open process itself */
|
release mdl happened as a part of open process itself */
|
||||||
|
@@ -1027,64 +1027,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);
|
DBUG_RETURN(store_error_num);
|
||||||
wide_handler->external_lock_type = lock_type;
|
}
|
||||||
if (
|
|
||||||
/* SQLCOM_RENAME_TABLE and SQLCOM_DROP_DB don't come here */
|
DBUG_ASSERT(wide_handler->sql_command != SQLCOM_RENAME_TABLE &&
|
||||||
wide_handler->sql_command == SQLCOM_DROP_TABLE ||
|
wide_handler->sql_command != SQLCOM_DROP_DB);
|
||||||
wide_handler->sql_command == SQLCOM_ALTER_TABLE
|
|
||||||
) {
|
if (wide_handler->sql_command == SQLCOM_DROP_TABLE ||
|
||||||
if (trx->locked_connections)
|
wide_handler->sql_command == SQLCOM_ALTER_TABLE)
|
||||||
{
|
{
|
||||||
my_message(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM,
|
if (trx->locked_connections)
|
||||||
ER_SPIDER_ALTER_BEFORE_UNLOCK_STR, MYF(0));
|
{
|
||||||
DBUG_RETURN(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM);
|
my_message(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM,
|
||||||
}
|
ER_SPIDER_ALTER_BEFORE_UNLOCK_STR, MYF(0));
|
||||||
DBUG_RETURN(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 (wide_handler->sql_command != SQLCOM_SELECT &&
|
||||||
|
wide_handler->sql_command != SQLCOM_HA_READ)
|
||||||
|
{
|
||||||
|
trx->updated_in_this_trx= TRUE;
|
||||||
|
DBUG_PRINT("info", ("spider trx->updated_in_this_trx=TRUE"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
@@ -1097,12 +1116,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())))
|
||||||
@@ -1110,44 +1127,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:
|
|
||||||
/* nothing to do */
|
|
||||||
break;
|
|
||||||
case SQLCOM_UPDATE:
|
|
||||||
case SQLCOM_UPDATE_MULTI:
|
|
||||||
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:
|
|
||||||
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
|
@@ -26,6 +26,8 @@ Warning 1287 The table parameter 'uhd' is deprecated and will be removed in a fu
|
|||||||
CREATE TABLE tbl_b (a INT) ENGINE=Spider COMMENT='use_handler "3"';
|
CREATE TABLE tbl_b (a INT) ENGINE=Spider COMMENT='use_handler "3"';
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1287 The table parameter 'use_handler' is deprecated and will be removed in a future release
|
Warning 1287 The table parameter 'use_handler' is deprecated and will be removed in a future release
|
||||||
|
DROP TABLE tbl_a;
|
||||||
|
DROP TABLE tbl_b;
|
||||||
# MDEV-28005 Deprecate Spider plugin variables regarding UDFs
|
# MDEV-28005 Deprecate Spider plugin variables regarding UDFs
|
||||||
SET GLOBAL spider_udf_ds_bulk_insert_rows = 1;
|
SET GLOBAL spider_udf_ds_bulk_insert_rows = 1;
|
||||||
Warnings:
|
Warnings:
|
||||||
@@ -57,6 +59,21 @@ Warning 1287 '@@spider_udf_ct_bulk_insert_rows' is deprecated and will be remove
|
|||||||
SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_rows";
|
SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_rows";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
spider_udf_ct_bulk_insert_rows 1
|
spider_udf_ct_bulk_insert_rows 1
|
||||||
|
# MDEV-27981 Deprecate spider_internal_limit
|
||||||
|
SET spider_internal_limit = 1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@spider_internal_limit' is deprecated and will be removed in a future release
|
||||||
|
SHOW VARIABLES LIKE "spider_internal_limit";
|
||||||
|
Variable_name Value
|
||||||
|
spider_internal_limit 9223372032559808513
|
||||||
|
CREATE TABLE tbl_a (a INT) ENGINE=Spider COMMENT='ilm "1"';
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 The table parameter 'ilm' is deprecated and will be removed in a future release
|
||||||
|
CREATE TABLE tbl_b (a INT) ENGINE=Spider COMMENT='internal_limit "1"';
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 The table parameter 'internal_limit' is deprecated and will be removed in a future release
|
||||||
|
DROP TABLE tbl_a;
|
||||||
|
DROP TABLE tbl_b;
|
||||||
DROP DATABASE auto_test_local;
|
DROP DATABASE auto_test_local;
|
||||||
for master_1
|
for master_1
|
||||||
for child2
|
for child2
|
||||||
|
@@ -18,6 +18,9 @@ SHOW VARIABLES LIKE "spider_use_handler";
|
|||||||
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE COMMENT='uhd "3"';
|
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE COMMENT='uhd "3"';
|
||||||
eval CREATE TABLE tbl_b (a INT) $MASTER_1_ENGINE COMMENT='use_handler "3"';
|
eval CREATE TABLE tbl_b (a INT) $MASTER_1_ENGINE COMMENT='use_handler "3"';
|
||||||
|
|
||||||
|
DROP TABLE tbl_a;
|
||||||
|
DROP TABLE tbl_b;
|
||||||
|
|
||||||
--echo # MDEV-28005 Deprecate Spider plugin variables regarding UDFs
|
--echo # MDEV-28005 Deprecate Spider plugin variables regarding UDFs
|
||||||
SET GLOBAL spider_udf_ds_bulk_insert_rows = 1;
|
SET GLOBAL spider_udf_ds_bulk_insert_rows = 1;
|
||||||
SHOW VARIABLES LIKE "spider_udf_ds_bulk_insert_rows";
|
SHOW VARIABLES LIKE "spider_udf_ds_bulk_insert_rows";
|
||||||
@@ -34,6 +37,15 @@ SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_interval";
|
|||||||
SET GLOBAL spider_udf_ct_bulk_insert_rows = 1;
|
SET GLOBAL spider_udf_ct_bulk_insert_rows = 1;
|
||||||
SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_rows";
|
SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_rows";
|
||||||
|
|
||||||
|
--echo # MDEV-27981 Deprecate spider_internal_limit
|
||||||
|
SET spider_internal_limit = 1;
|
||||||
|
SHOW VARIABLES LIKE "spider_internal_limit";
|
||||||
|
eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE COMMENT='ilm "1"';
|
||||||
|
eval CREATE TABLE tbl_b (a INT) $MASTER_1_ENGINE COMMENT='internal_limit "1"';
|
||||||
|
|
||||||
|
DROP TABLE tbl_a;
|
||||||
|
DROP TABLE tbl_b;
|
||||||
|
|
||||||
DROP DATABASE auto_test_local;
|
DROP DATABASE auto_test_local;
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
|
@@ -474,7 +474,7 @@ longlong spider_param_internal_offset(
|
|||||||
*/
|
*/
|
||||||
static MYSQL_THDVAR_LONGLONG(
|
static MYSQL_THDVAR_LONGLONG(
|
||||||
internal_limit, /* name */
|
internal_limit, /* name */
|
||||||
PLUGIN_VAR_RQCMDARG, /* opt */
|
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_DEPRECATED, /* opt */
|
||||||
"Internal limit", /* comment */
|
"Internal limit", /* comment */
|
||||||
NULL, /* check */
|
NULL, /* check */
|
||||||
spider_use_table_value_deprecated, /* update */
|
spider_use_table_value_deprecated, /* update */
|
||||||
|
@@ -2343,6 +2343,7 @@ int spider_parse_connect_info(
|
|||||||
SPIDER_PARAM_LONGLONG("frd", first_read, 0);
|
SPIDER_PARAM_LONGLONG("frd", first_read, 0);
|
||||||
SPIDER_PARAM_INT("isa", init_sql_alloc_size, 0);
|
SPIDER_PARAM_INT("isa", init_sql_alloc_size, 0);
|
||||||
SPIDER_PARAM_INT_WITH_MAX("idl", internal_delayed, 0, 1);
|
SPIDER_PARAM_INT_WITH_MAX("idl", internal_delayed, 0, 1);
|
||||||
|
SPIDER_PARAM_DEPRECATED_WARNING("ilm");
|
||||||
SPIDER_PARAM_LONGLONG("ilm", internal_limit, 0);
|
SPIDER_PARAM_LONGLONG("ilm", internal_limit, 0);
|
||||||
SPIDER_PARAM_LONGLONG("ios", internal_offset, 0);
|
SPIDER_PARAM_LONGLONG("ios", internal_offset, 0);
|
||||||
SPIDER_PARAM_INT_WITH_MAX("iom", internal_optimize, 0, 1);
|
SPIDER_PARAM_INT_WITH_MAX("iom", internal_optimize, 0, 1);
|
||||||
@@ -2522,6 +2523,7 @@ int spider_parse_connect_info(
|
|||||||
error_num = connect_string_parse.print_param_error();
|
error_num = connect_string_parse.print_param_error();
|
||||||
goto error;
|
goto error;
|
||||||
case 14:
|
case 14:
|
||||||
|
SPIDER_PARAM_DEPRECATED_WARNING("internal_limit");
|
||||||
SPIDER_PARAM_LONGLONG("internal_limit", internal_limit, 0);
|
SPIDER_PARAM_LONGLONG("internal_limit", internal_limit, 0);
|
||||||
#ifndef WITHOUT_SPIDER_BG_SEARCH
|
#ifndef WITHOUT_SPIDER_BG_SEARCH
|
||||||
SPIDER_PARAM_LONGLONG("bgs_first_read", bgs_first_read, 0);
|
SPIDER_PARAM_LONGLONG("bgs_first_read", bgs_first_read, 0);
|
||||||
|
@@ -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