mirror of
https://github.com/MariaDB/server.git
synced 2025-11-25 17:25:02 +03:00
Merge 10.3 into 10.4
This commit is contained in:
@@ -195,11 +195,18 @@ IF(MSVC)
|
||||
IF(MYSQL_MAINTAINER_MODE MATCHES "ERR")
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
||||
FOREACH(type EXE SHARED MODULE)
|
||||
FOREACH(cfg RELEASE DEBUG RELWITHDEBINFO)
|
||||
SET(CMAKE_${type}_LINKER_FLAGS_${cfg} "${CMAKE_${type}_LINKER_FLAGS_${cfg}} /WX")
|
||||
ENDFOREACH()
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
IF(MSVC_VERSION LESS 1910)
|
||||
# Noisy warning C4800: 'type': forcing value to bool 'true' or 'false' (performance warning),
|
||||
# removed in VS2017
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800")
|
||||
ELSE()
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /d2OptimizeHugeFunctions")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
|
||||
1
debian/libmariadb3.install
vendored
1
debian/libmariadb3.install
vendored
@@ -3,3 +3,4 @@ usr/lib/mysql/plugin/client_ed25519.so
|
||||
usr/lib/mysql/plugin/dialog.so
|
||||
usr/lib/mysql/plugin/mysql_clear_password.so
|
||||
usr/lib/mysql/plugin/sha256_password.so
|
||||
usr/lib/mysql/plugin/client_ed25519.so
|
||||
|
||||
@@ -942,6 +942,15 @@ def json_depnth 3 10 1 N 32897 0 63
|
||||
json_length json_depnth
|
||||
2 3
|
||||
#
|
||||
# MDEV-19670 json escaped unicode parse error
|
||||
#
|
||||
SELECT json_valid('{"value":"\\ud83d\\ude0a"}');
|
||||
json_valid('{"value":"\\ud83d\\ude0a"}')
|
||||
1
|
||||
SELECT json_valid('{"test": "\\ud83d\\ude0b"}');
|
||||
json_valid('{"test": "\\ud83d\\ude0b"}')
|
||||
1
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
#
|
||||
|
||||
@@ -561,6 +561,13 @@ SELECT
|
||||
--enable_ps_protocol
|
||||
--disable_metadata
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-19670 json escaped unicode parse error
|
||||
--echo #
|
||||
|
||||
SELECT json_valid('{"value":"\\ud83d\\ude0a"}');
|
||||
SELECT json_valid('{"test": "\\ud83d\\ude0b"}');
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
||||
@@ -1557,6 +1557,15 @@ numgtfmt
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-20517 Assertion `!is_expensive()' failed in Item::value_depends_on_sql_mode_const_item
|
||||
#
|
||||
SELECT ( 1 LIKE GET_LOCK( 'foo', 0 ) ) - 2;
|
||||
( 1 LIKE GET_LOCK( 'foo', 0 ) ) - 2
|
||||
-1
|
||||
SELECT RELEASE_LOCK('foo');
|
||||
RELEASE_LOCK('foo')
|
||||
1
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
|
||||
@@ -1192,6 +1192,12 @@ SELECT * FROM v1 WHERE numgtfmt = NAME_CONST('wnumgtfmt',_utf8'QEDITIONS' COLLA
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-20517 Assertion `!is_expensive()' failed in Item::value_depends_on_sql_mode_const_item
|
||||
--echo #
|
||||
|
||||
SELECT ( 1 LIKE GET_LOCK( 'foo', 0 ) ) - 2;
|
||||
SELECT RELEASE_LOCK('foo');
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
|
||||
@@ -7636,7 +7636,7 @@ SELECT 1;
|
||||
1
|
||||
1
|
||||
DROP PROCEDURE sp;
|
||||
CREATE PROCEDURE sp() SHOW USER_STATISTICS;
|
||||
CREATE PROCEDURE sp() SET STATEMENT SQL_SELECT_LIMIT=0 FOR SHOW USER_STATISTICS;
|
||||
CALL sp;
|
||||
User Total_connections Concurrent_connections Connected_time Busy_time Cpu_time Bytes_received Bytes_sent Binlog_bytes_written Rows_read Rows_sent Rows_deleted Rows_inserted Rows_updated Select_commands Update_commands Other_commands Commit_transactions Rollback_transactions Denied_connections Lost_connections Access_denied Empty_queries Total_ssl_connections Max_statement_time_exceeded
|
||||
SELECT 1;
|
||||
|
||||
@@ -9070,7 +9070,7 @@ CREATE PROCEDURE sp() ALTER TABLE non_existing_table OPTIMIZE PARTITION p0;
|
||||
CALL sp;
|
||||
SELECT 1;
|
||||
DROP PROCEDURE sp;
|
||||
CREATE PROCEDURE sp() SHOW USER_STATISTICS;
|
||||
CREATE PROCEDURE sp() SET STATEMENT SQL_SELECT_LIMIT=0 FOR SHOW USER_STATISTICS;
|
||||
CALL sp;
|
||||
SELECT 1;
|
||||
DROP PROCEDURE sp;
|
||||
|
||||
@@ -21,7 +21,6 @@ galera_as_master_gtid_change_master : Requires MySQL GTID
|
||||
galera_as_slave_gtid_replicate_do_db_cc : Requires MySQL GTID
|
||||
galera_as_slave_preordered : wsrep-preordered feature not merged to MariaDB
|
||||
galera_as_slave_replication_bundle : MDEV-15785 OPTION_GTID_BEGIN is set in Gtid_log_event::do_apply_event()
|
||||
galera_autoinc_sst_mariabackup : MDEV-19926 Galera SST tests fail
|
||||
galera_bf_abort_group_commit : MDEV-18282 Galera test failure on galera.galera_bf_abort_group_commit
|
||||
galera_binlog_rows_query_log_events: MariaDB does not support binlog_rows_query_log_events
|
||||
galera_binlog_stmt_autoinc: MDEV-19959 Galera test failure on galera_binlog_stmt_autoinc
|
||||
@@ -35,15 +34,10 @@ galera_kill_largechanges : MDEV-18179 Galera test failure on galera.galera_kill_
|
||||
galera_kill_nochanges : MDEV-18280 Galera test failure on galera_split_brain and galera_kill_nochanges
|
||||
galera_many_tables_nopk : MDEV-18182 Galera test failure on galera.galera_many_tables_nopk
|
||||
galera_migrate : MariaDB does not support START SLAVE USER
|
||||
galera_pc_ignore_sb : MDEV-15811/MDEV-17357 Test failure
|
||||
galera_split_brain : MDEV-18280 Galera test failure on galera_split_brain and galera_kill_nochanges
|
||||
galera_ssl_upgrade : MDEV-13549 Galera test failures
|
||||
galera_sst_mysqldump_with_key : MDEV-16890 Galera test failure
|
||||
galera_var_node_address : MDEV-17151 Galera test failure
|
||||
galera_var_notify_cmd : MDEV-13549 Galera test failures
|
||||
galera_ssl_upgrade : MDEV-19950 Galera test failure on galera_ssl_upgrade
|
||||
galera_var_reject_queries : assertion in inline_mysql_socket_send
|
||||
galera_var_retry_autocommit: MDEV-18181 Galera test failure on galera.galera_var_retry_autocommit
|
||||
galera_sst_mariabackup_encrypt_with_key : MDEV-19926 Galera SST tests fail
|
||||
galera_var_node_address : MDEV-20485 Galera test failure on galera.galera_var_node_address
|
||||
galera_wan : MDEV-17259 Test failure on galera.galera_wan
|
||||
mysql-wsrep#198 : MDEV-18935 Galera test mysql-wsrep#198 sporaric assertion transaction.cpp:362: int wsrep::transaction::before_commit(): Assertion `state() == s_executing || state() == s_committing || state() == s_must_abort || state() == s_replaying' failed.
|
||||
|
||||
122
mysql-test/suite/galera/r/galera_events2.result
Normal file
122
mysql-test/suite/galera/r/galera_events2.result
Normal file
@@ -0,0 +1,122 @@
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE TABLE event_table(a int) engine=innodb;
|
||||
CREATE EVENT event_2 ON SCHEDULE EVERY 1 SECOND
|
||||
ENDS NOW() + INTERVAL 6 SECOND
|
||||
ON COMPLETION NOT PRESERVE
|
||||
DO
|
||||
INSERT INTO event_table VALUES (1);
|
||||
Warnings:
|
||||
Warning 1105 Event scheduler is switched off, use SET GLOBAL event_scheduler=ON to enable it.
|
||||
# node_1 event should be there
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='event_2';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def test event_2 root@localhost SQL INSERT INTO event_table VALUES (1) RECURRING NULL 1 SECOND ENABLED NOT PRESERVE
|
||||
connection node_2;
|
||||
# node_2 event should be there
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='event_2';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def test event_2 root@localhost SQL INSERT INTO event_table VALUES (1) RECURRING NULL 1 SECOND SLAVESIDE_DISABLED NOT PRESERVE
|
||||
connection node_1;
|
||||
SET GLOBAL event_scheduler=ON;
|
||||
SHOW VARIABLES LIKE 'event_scheduler';
|
||||
Variable_name Value
|
||||
event_scheduler ON
|
||||
# node_1 event should be removed
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='event_2';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
connection node_2;
|
||||
# node_2 event should be removed
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='event_2';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
connection node_1;
|
||||
SET GLOBAL event_scheduler=OFF;
|
||||
DROP TABLE event_table;
|
||||
connection node_1;
|
||||
CREATE DATABASE IF NOT EXISTS events_test;
|
||||
use events_test;
|
||||
CREATE USER ev_test@localhost;
|
||||
GRANT ALL ON events_test.* to ev_test@localhost;
|
||||
connect ev_con1,localhost,ev_test,,events_test;
|
||||
CREATE EVENT one_event ON SCHEDULE EVERY 10 SECOND DO SELECT 123;
|
||||
Warnings:
|
||||
Warning 1105 Event scheduler is switched off, use SET GLOBAL event_scheduler=ON to enable it.
|
||||
SHOW EVENTS;
|
||||
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
|
||||
events_test one_event ev_test@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS ORDER BY EVENT_SCHEMA, EVENT_NAME;
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def events_test one_event ev_test@localhost SQL SELECT 123 RECURRING NULL 10 SECOND ENABLED NOT PRESERVE
|
||||
ALTER EVENT one_event ON SCHEDULE EVERY 10 SECOND;
|
||||
"The definer should be ev_test@localhost"
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def events_test one_event ev_test@localhost SQL SELECT 123 RECURRING NULL 10 SECOND ENABLED NOT PRESERVE
|
||||
connection node_2;
|
||||
use events_test;
|
||||
"The definer should be ev_test@localhost"
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def events_test one_event ev_test@localhost SQL SELECT 123 RECURRING NULL 10 SECOND SLAVESIDE_DISABLED NOT PRESERVE
|
||||
connection node_1;
|
||||
disconnect ev_con1;
|
||||
use test;
|
||||
DROP EVENT events_test.one_event;
|
||||
DROP USER ev_test@localhost;
|
||||
DROP DATABASE events_test;
|
||||
connection node_1;
|
||||
use test;
|
||||
CREATE EVENT one_event ON SCHEDULE EVERY 10 SECOND DO SELECT 123;
|
||||
Warnings:
|
||||
Warning 1105 Event scheduler is switched off, use SET GLOBAL event_scheduler=ON to enable it.
|
||||
# node_1 Event should be enabled
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def test one_event root@localhost SQL SELECT 123 RECURRING NULL 10 SECOND ENABLED NOT PRESERVE
|
||||
connection node_2;
|
||||
use test;
|
||||
# node_2 Event should be SERVERSIDE_DISABLED
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def test one_event root@localhost SQL SELECT 123 RECURRING NULL 10 SECOND SLAVESIDE_DISABLED NOT PRESERVE
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1, 'a'), (2, 'a'), (3, 'a');
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 a
|
||||
2 a
|
||||
3 a
|
||||
Shutting down server ...
|
||||
connection node_1;
|
||||
UPDATE t1 SET f2 = 'b' WHERE f1 > 1;
|
||||
UPDATE t1 SET f2 = 'c' WHERE f1 > 2;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 a
|
||||
2 b
|
||||
3 c
|
||||
connection node_2;
|
||||
# Force SST from node_1 to node_2
|
||||
Starting server ...
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 a
|
||||
2 b
|
||||
3 c
|
||||
# node_2 Event should be SERVERSIDE_DISABLED
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def test one_event root@localhost SQL SELECT 123 RECURRING NULL 10 SECOND SLAVESIDE_DISABLED NOT PRESERVE
|
||||
connection node_1;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 a
|
||||
2 b
|
||||
3 c
|
||||
# node_1 Event should be ENABLED
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD STATUS ON_COMPLETION EVENT_COMMENT
|
||||
def test one_event root@localhost SQL SELECT 123 RECURRING NULL 10 SECOND ENABLED NOT PRESERVE
|
||||
DROP TABLE t1;
|
||||
DROP EVENT one_event;
|
||||
@@ -1,19 +1,22 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
call mtr.add_suppression("WSREP: Stray state UUID msg: .* current group state WAIT_STATE_UUID .*");
|
||||
call mtr.add_suppression("WSREP: Protocol violation. JOIN message sender .* is not in state transfer (.*). Message ignored.");
|
||||
call mtr.add_suppression("WSREP: Sending JOIN failed: -[0-9]+ (Transport endpoint is not connected). Will retry in new primary component.");
|
||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 4
|
||||
1
|
||||
call mtr.add_suppression("WSREP: Stray state UUID msg: .*");
|
||||
call mtr.add_suppression("WSREP: Protocol violation. JOIN message sender .*");
|
||||
call mtr.add_suppression("WSREP: Sending JOIN failed: .*");
|
||||
flush tables;
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE
|
||||
4
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=INNODB;
|
||||
connection node_2;
|
||||
set global wsrep_sync_wait=15;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
|
||||
connection node_3;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
COUNT(*) = 1
|
||||
set global wsrep_sync_wait=15;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
connection node_1;
|
||||
DROP TABLE t1;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/big_test.inc
|
||||
--source suite/galera/t/MW-328-header.inc
|
||||
|
||||
--connection node_2
|
||||
|
||||
144
mysql-test/suite/galera/t/galera_events2.test
Normal file
144
mysql-test/suite/galera/t/galera_events2.test
Normal file
@@ -0,0 +1,144 @@
|
||||
--source include/galera_cluster.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
#
|
||||
# Test case 1: "ONE TIME" events should be dropped on slave nodes after expiring on master (event creator node)
|
||||
#
|
||||
|
||||
--connection node_1
|
||||
|
||||
CREATE TABLE event_table(a int) engine=innodb;
|
||||
|
||||
CREATE EVENT event_2 ON SCHEDULE EVERY 1 SECOND
|
||||
ENDS NOW() + INTERVAL 6 SECOND
|
||||
ON COMPLETION NOT PRESERVE
|
||||
DO
|
||||
INSERT INTO event_table VALUES (1);
|
||||
|
||||
--echo # node_1 event should be there
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='event_2';
|
||||
|
||||
--connection node_2
|
||||
--echo # node_2 event should be there
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='event_2';
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL event_scheduler=ON;
|
||||
SHOW VARIABLES LIKE 'event_scheduler';
|
||||
|
||||
# Let event_2 reach the end of its execution interval
|
||||
let $wait_condition=select count(*) = 0 from information_schema.events where event_name='event_2';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo # node_1 event should be removed
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='event_2';
|
||||
|
||||
--connection node_2
|
||||
--echo # node_2 event should be removed
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='event_2';
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL event_scheduler=OFF;
|
||||
DROP TABLE event_table;
|
||||
|
||||
#
|
||||
# Test case 2: After doing ALTER EVENT, slave nodes should have same definer as master
|
||||
#
|
||||
|
||||
--connection node_1
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS events_test;
|
||||
use events_test;
|
||||
CREATE USER ev_test@localhost;
|
||||
GRANT ALL ON events_test.* to ev_test@localhost;
|
||||
connect (ev_con1,localhost,ev_test,,events_test);
|
||||
|
||||
CREATE EVENT one_event ON SCHEDULE EVERY 10 SECOND DO SELECT 123;
|
||||
--replace_column 8 # 9 #
|
||||
SHOW EVENTS;
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS ORDER BY EVENT_SCHEMA, EVENT_NAME;
|
||||
ALTER EVENT one_event ON SCHEDULE EVERY 10 SECOND;
|
||||
--echo "The definer should be ev_test@localhost"
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
|
||||
--connection node_2
|
||||
use events_test;
|
||||
--echo "The definer should be ev_test@localhost"
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
|
||||
--connection node_1
|
||||
--disconnect ev_con1
|
||||
use test;
|
||||
DROP EVENT events_test.one_event;
|
||||
DROP USER ev_test@localhost;
|
||||
DROP DATABASE events_test;
|
||||
|
||||
#
|
||||
# Test case 3: After SST from master node (the one where event is ENABLED) , slave event status should be 'SLAVESIDE_DISABLED'
|
||||
#
|
||||
|
||||
--connection node_1
|
||||
use test;
|
||||
CREATE EVENT one_event ON SCHEDULE EVERY 10 SECOND DO SELECT 123;
|
||||
|
||||
--echo # node_1 Event should be enabled
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
|
||||
--connection node_2
|
||||
use test;
|
||||
--echo # node_2 Event should be SERVERSIDE_DISABLED
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1, 'a'), (2, 'a'), (3, 'a');
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
# Initiate normal shutdown on the node 2 and wait until shutdown has been completed:
|
||||
|
||||
--echo Shutting down server ...
|
||||
--source include/shutdown_mysqld.inc
|
||||
|
||||
--connection node_1
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
UPDATE t1 SET f2 = 'b' WHERE f1 > 1;
|
||||
UPDATE t1 SET f2 = 'c' WHERE f1 > 2;
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
--connection node_2
|
||||
|
||||
# Remove the "grastate.dat" file (to initiate new SST) and restart node 2
|
||||
|
||||
--remove_file $MYSQLTEST_VARDIR/mysqld.2/data/grastate.dat
|
||||
|
||||
--echo # Force SST from node_1 to node_2
|
||||
--let $start_mysqld_params=
|
||||
--echo Starting server ...
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Sanity check (node 2 is running now and can perform SQL operators):
|
||||
|
||||
SELECT * FROM t1;
|
||||
--echo # node_2 Event should be SERVERSIDE_DISABLED
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
|
||||
--connection node_1
|
||||
SELECT * FROM t1;
|
||||
--echo # node_1 Event should be ENABLED
|
||||
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_DEFINITION, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='one_event';
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP EVENT one_event;
|
||||
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
@@ -6,27 +6,27 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
call mtr.add_suppression("WSREP: Stray state UUID msg: .* current group state WAIT_STATE_UUID .*");
|
||||
call mtr.add_suppression("WSREP: Protocol violation. JOIN message sender .* is not in state transfer (.*). Message ignored.");
|
||||
call mtr.add_suppression("WSREP: Sending JOIN failed: -[0-9]+ (Transport endpoint is not connected). Will retry in new primary component.");
|
||||
call mtr.add_suppression("WSREP: Stray state UUID msg: .*");
|
||||
call mtr.add_suppression("WSREP: Protocol violation. JOIN message sender .*");
|
||||
call mtr.add_suppression("WSREP: Sending JOIN failed: .*");
|
||||
flush tables;
|
||||
|
||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=INNODB;
|
||||
|
||||
--connection node_2
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1';
|
||||
--source include/wait_condition.inc
|
||||
set global wsrep_sync_wait=15;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
|
||||
--connection node_3
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1';
|
||||
--source include/wait_condition.inc
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
set global wsrep_sync_wait=15;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1;
|
||||
|
||||
@@ -6,11 +6,11 @@ SET debug_sync= "ib_open_after_dict_open SIGNAL delete_open WAIT_FOR another_ope
|
||||
DELETE FROM t1;
|
||||
connection default;
|
||||
SET debug_sync= "now WAIT_FOR delete_open";
|
||||
SET debug_sync= "ib_open_after_dict_open SIGNAL another_open";
|
||||
SELECT a FROM t1;
|
||||
a
|
||||
NULL
|
||||
NULL
|
||||
SET debug_sync= "now SIGNAL another_open";
|
||||
connection con1;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
|
||||
@@ -112,7 +112,7 @@ count(*)
|
||||
drop table t1;
|
||||
drop procedure populate_t1;
|
||||
create temporary table t1 (t1_i int, t1_f float) engine = innodb;
|
||||
insert into t1 values (1, 1.1), (2, 2.2), (3, 2.2), (4, 4.4);
|
||||
insert into t1 values (1, 1.1), (2, 2.5), (3, 2.5), (4, 4.4);
|
||||
explain select * from t1 where t1_i = 1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
@@ -124,22 +124,22 @@ select * from t1 where t1_i = 1;
|
||||
t1_i t1_f
|
||||
1 1.1
|
||||
alter table t1 add unique index sec_index(t1_f);
|
||||
ERROR 23000: Duplicate entry '2.2' for key 'sec_index'
|
||||
ERROR 23000: Duplicate entry '2.5' for key 'sec_index'
|
||||
alter table t1 add index sec_index(t1_f);
|
||||
explain select * from t1 where t1_f > 2.2;
|
||||
explain select * from t1 where t1_f >= 2.5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL sec_index NULL NULL NULL 4 Using where
|
||||
select * from t1 where t1_f > 2.2;
|
||||
select * from t1 where t1_f >= 2.5;
|
||||
t1_i t1_f
|
||||
2 2.2
|
||||
3 2.2
|
||||
2 2.5
|
||||
3 2.5
|
||||
4 4.4
|
||||
alter table t1 add column (t1_c char(10));
|
||||
select * from t1;
|
||||
t1_i t1_f t1_c
|
||||
1 1.1 NULL
|
||||
2 2.2 NULL
|
||||
3 2.2 NULL
|
||||
2 2.5 NULL
|
||||
3 2.5 NULL
|
||||
4 4.4 NULL
|
||||
insert into t1 values (5, 5.5, 'krunal');
|
||||
alter table t1 drop column t1_f;
|
||||
@@ -150,7 +150,7 @@ t1 CREATE TEMPORARY TABLE `t1` (
|
||||
`t1_c` char(10) DEFAULT NULL,
|
||||
UNIQUE KEY `pri_index` (`t1_i`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
select * from t1 where t1_f > 2.2;
|
||||
select * from t1 where t1_f >= 2.5;
|
||||
ERROR 42S22: Unknown column 't1_f' in 'where clause'
|
||||
alter table t1 add index sec_index2(t1_c), algorithm=inplace;
|
||||
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
|
||||
|
||||
@@ -15,8 +15,8 @@ SET debug_sync= "ib_open_after_dict_open SIGNAL delete_open WAIT_FOR another_ope
|
||||
DELETE FROM t1;
|
||||
--connection default
|
||||
SET debug_sync= "now WAIT_FOR delete_open";
|
||||
SET debug_sync= "ib_open_after_dict_open SIGNAL another_open";
|
||||
SELECT a FROM t1;
|
||||
SET debug_sync= "now SIGNAL another_open";
|
||||
--connection con1
|
||||
--reap
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ drop procedure populate_t1;
|
||||
# 3. Alter of temp-table.
|
||||
#
|
||||
create temporary table t1 (t1_i int, t1_f float) engine = innodb;
|
||||
insert into t1 values (1, 1.1), (2, 2.2), (3, 2.2), (4, 4.4);
|
||||
insert into t1 values (1, 1.1), (2, 2.5), (3, 2.5), (4, 4.4);
|
||||
#
|
||||
explain select * from t1 where t1_i = 1;
|
||||
alter table t1 add unique index pri_index(t1_i);
|
||||
@@ -110,8 +110,8 @@ select * from t1 where t1_i = 1;
|
||||
--error ER_DUP_ENTRY
|
||||
alter table t1 add unique index sec_index(t1_f);
|
||||
alter table t1 add index sec_index(t1_f);
|
||||
explain select * from t1 where t1_f > 2.2;
|
||||
select * from t1 where t1_f > 2.2;
|
||||
explain select * from t1 where t1_f >= 2.5;
|
||||
select * from t1 where t1_f >= 2.5;
|
||||
#
|
||||
alter table t1 add column (t1_c char(10));
|
||||
select * from t1;
|
||||
@@ -120,7 +120,7 @@ insert into t1 values (5, 5.5, 'krunal');
|
||||
alter table t1 drop column t1_f;
|
||||
show create table t1;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
select * from t1 where t1_f > 2.2;
|
||||
select * from t1 where t1_f >= 2.5;
|
||||
#
|
||||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||||
alter table t1 add index sec_index2(t1_c), algorithm=inplace;
|
||||
|
||||
@@ -57,6 +57,9 @@ ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||
);
|
||||
Warnings:
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
|
||||
160
mysql-test/suite/parts/r/reorganize_partition_innodb.result
Normal file
160
mysql-test/suite/parts/r/reorganize_partition_innodb.result
Normal file
@@ -0,0 +1,160 @@
|
||||
#
|
||||
# MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir
|
||||
#
|
||||
CREATE TABLE t (
|
||||
a INT NOT NULL
|
||||
) ENGINE=INNODB
|
||||
PARTITION BY HASH (a) (
|
||||
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
|
||||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB
|
||||
);
|
||||
INSERT INTO t VALUES (1);
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY HASH (`a`)
|
||||
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||
PARTITION `p2` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB)
|
||||
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||
Warnings:
|
||||
Warning 1280 Name 'pk' ignored for PRIMARY key.
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) NOT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY HASH (`a`)
|
||||
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||
PARTITION `p2` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB)
|
||||
ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY;
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY HASH (`a`)
|
||||
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||
PARTITION `p2` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB)
|
||||
SET @TMP = @@GLOBAL.INNODB_FILE_PER_TABLE;
|
||||
SET GLOBAL INNODB_FILE_PER_TABLE=OFF;
|
||||
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||
Warnings:
|
||||
Warning 1280 Name 'pk' ignored for PRIMARY key.
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) NOT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY HASH (`a`)
|
||||
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||
PARTITION `p2` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB)
|
||||
SET GLOBAL INNODB_FILE_PER_TABLE=@TMP;
|
||||
ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||
);
|
||||
Warnings:
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) NOT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY HASH (`a`)
|
||||
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||
PARTITION `p2` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB)
|
||||
ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/',
|
||||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
);
|
||||
Warnings:
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) NOT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY HASH (`a`)
|
||||
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||
PARTITION `p2` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB)
|
||||
ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||
PARTITION p1 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||
PARTITION p2 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||
);
|
||||
Warnings:
|
||||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) NOT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY HASH (`a`)
|
||||
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||
PARTITION `p2` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB)
|
||||
DROP TABLE t;
|
||||
SET @strict = @@innodb_strict_mode;
|
||||
SET innodb_strict_mode=OFF;
|
||||
CREATE TABLE t (
|
||||
a INT NOT NULL
|
||||
) ENGINE=INNODB
|
||||
PARTITION BY RANGE (a)
|
||||
SUBPARTITION BY HASH (a)
|
||||
SUBPARTITIONS 2
|
||||
(
|
||||
PARTITION p1 VALUES LESS THAN (7)
|
||||
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
|
||||
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
|
||||
ENGINE = INNODB,
|
||||
PARTITION p2 VALUES LESS THAN MAXVALUE
|
||||
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
|
||||
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
|
||||
ENGINE = INNODB
|
||||
);
|
||||
Warnings:
|
||||
Warning 1618 <INDEX DIRECTORY> option ignored
|
||||
Warning 1618 <INDEX DIRECTORY> option ignored
|
||||
Warning 1618 <INDEX DIRECTORY> option ignored
|
||||
Warning 1618 <INDEX DIRECTORY> option ignored
|
||||
SET innodb_strict_mode=@strict;
|
||||
ALTER TABLE t
|
||||
REORGANIZE PARTITION p1,p2 INTO
|
||||
(
|
||||
PARTITION p1 VALUES LESS THAN (7)
|
||||
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
ENGINE = INNODB,
|
||||
PARTITION p2 VALUES LESS THAN MAXVALUE
|
||||
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
ENGINE = INNODB
|
||||
);
|
||||
Warnings:
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition
|
||||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY RANGE (`a`)
|
||||
SUBPARTITION BY HASH (`a`)
|
||||
SUBPARTITIONS 2
|
||||
(PARTITION `p1` VALUES LESS THAN (7) DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = InnoDB,
|
||||
PARTITION `p2` VALUES LESS THAN MAXVALUE DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = InnoDB)
|
||||
DROP TABLE t;
|
||||
103
mysql-test/suite/parts/t/reorganize_partition_innodb.test
Normal file
103
mysql-test/suite/parts/t/reorganize_partition_innodb.test
Normal file
@@ -0,0 +1,103 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_partition.inc
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir
|
||||
--echo #
|
||||
|
||||
mkdir $MYSQLTEST_VARDIR/tmp/partitions_here;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t (
|
||||
a INT NOT NULL
|
||||
) ENGINE=INNODB
|
||||
PARTITION BY HASH (a) (
|
||||
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
|
||||
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB
|
||||
);
|
||||
INSERT INTO t VALUES (1);
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SHOW CREATE TABLE t;
|
||||
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SHOW CREATE TABLE t;
|
||||
ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SHOW CREATE TABLE t;
|
||||
SET @TMP = @@GLOBAL.INNODB_FILE_PER_TABLE;
|
||||
SET GLOBAL INNODB_FILE_PER_TABLE=OFF;
|
||||
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SHOW CREATE TABLE t;
|
||||
SET GLOBAL INNODB_FILE_PER_TABLE=@TMP;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||
);
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SHOW CREATE TABLE t;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/',
|
||||
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
);
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SHOW CREATE TABLE t;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||
PARTITION p1 INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||
PARTITION p2 INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||
);
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SHOW CREATE TABLE t;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
SET @strict = @@innodb_strict_mode;
|
||||
SET innodb_strict_mode=OFF;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t (
|
||||
a INT NOT NULL
|
||||
) ENGINE=INNODB
|
||||
PARTITION BY RANGE (a)
|
||||
SUBPARTITION BY HASH (a)
|
||||
SUBPARTITIONS 2
|
||||
(
|
||||
PARTITION p1 VALUES LESS THAN (7)
|
||||
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
|
||||
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
|
||||
ENGINE = INNODB,
|
||||
PARTITION p2 VALUES LESS THAN MAXVALUE
|
||||
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
|
||||
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
|
||||
ENGINE = INNODB
|
||||
);
|
||||
SET innodb_strict_mode=@strict;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval ALTER TABLE t
|
||||
REORGANIZE PARTITION p1,p2 INTO
|
||||
(
|
||||
PARTITION p1 VALUES LESS THAN (7)
|
||||
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
ENGINE = INNODB,
|
||||
PARTITION p2 VALUES LESS THAN MAXVALUE
|
||||
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
|
||||
ENGINE = INNODB
|
||||
);
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SHOW CREATE TABLE t;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
rmdir $MYSQLTEST_VARDIR/tmp/partitions_here/test;
|
||||
rmdir $MYSQLTEST_VARDIR/tmp/partitions_here;
|
||||
|
||||
@@ -52,14 +52,12 @@ INSERT DELAYED INTO t1 VALUES('39','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('40','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('41','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('42','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('43','1','1');|
|
||||
INSERT DELAYED INTO t1 VALUES('43','1','1');
|
||||
connection con0;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
connection default;
|
||||
** Wait till con0 is blocked **
|
||||
UNLOCK TABLES;
|
||||
connection con1;
|
||||
Asynchronous "reap" result
|
||||
connection con0;
|
||||
Asynchronous "reap" result
|
||||
The next result suffers from
|
||||
@@ -85,7 +83,6 @@ INSERT INTO t1 VALUES('5');
|
||||
INSERT INTO t1 VALUES('6');
|
||||
LOCK TABLE v1 READ;
|
||||
connection con1;
|
||||
Asynchronous execute
|
||||
INSERT DELAYED INTO t1 VALUES('7');
|
||||
INSERT DELAYED INTO t1 VALUES('8');
|
||||
INSERT DELAYED INTO t1 VALUES('9');
|
||||
@@ -101,23 +98,22 @@ INSERT DELAYED INTO t1 VALUES('18');
|
||||
INSERT DELAYED INTO t1 VALUES('19');
|
||||
INSERT DELAYED INTO t1 VALUES('20');
|
||||
INSERT DELAYED INTO t1 VALUES('21');
|
||||
INSERT DELAYED INTO t1 VALUES('22');|
|
||||
INSERT DELAYED INTO t1 VALUES('22');
|
||||
connection con0;
|
||||
Asynchronous execute
|
||||
SELECT COUNT(*) BETWEEN 6 AND 22 FROM t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
connection default;
|
||||
** Wait till con0 is blocked **
|
||||
UNLOCK TABLES;
|
||||
connection con1;
|
||||
connection con0;
|
||||
Asynchronous "reap" result
|
||||
COUNT(*) BETWEEN 6 AND 22
|
||||
1
|
||||
COUNT(*)
|
||||
22
|
||||
connection default;
|
||||
Checking if the delayed insert gives the same result afterwards
|
||||
SELECT COUNT(*) BETWEEN 6 AND 22 FROM t1;
|
||||
COUNT(*) BETWEEN 6 AND 22
|
||||
1
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
22
|
||||
connection default;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
|
||||
@@ -55,6 +55,12 @@ Warnings:
|
||||
Warning 1292 Truncated incorrect innodb_change_buffering_debug value: '-2'
|
||||
set global innodb_change_buffering_debug=1e1;
|
||||
ERROR 42000: Incorrect argument type to variable 'innodb_change_buffering_debug'
|
||||
set global innodb_change_buffering_debug=2;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect innodb_change_buffering_debug value: '2'
|
||||
select @@global.innodb_change_buffering_debug;
|
||||
@@global.innodb_change_buffering_debug
|
||||
1
|
||||
SET @@global.innodb_change_buffering_debug = @start_global_value;
|
||||
SELECT @@global.innodb_change_buffering_debug;
|
||||
@@global.innodb_change_buffering_debug
|
||||
|
||||
@@ -326,9 +326,9 @@ SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
VARIABLE_TYPE INT UNSIGNED
|
||||
VARIABLE_COMMENT Debug flags for InnoDB change buffering (0=none, 2=crash at merge)
|
||||
VARIABLE_COMMENT Debug flags for InnoDB change buffering (0=none, 1=try to buffer)
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 2
|
||||
NUMERIC_MAX_VALUE 1
|
||||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
|
||||
@@ -63,8 +63,6 @@ LOCK TABLE v1 READ;
|
||||
|
||||
connection con1;
|
||||
|
||||
delimiter |;
|
||||
send
|
||||
INSERT DELAYED INTO t1 VALUES('7','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('8','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('9','1','1');
|
||||
@@ -101,8 +99,7 @@ INSERT DELAYED INTO t1 VALUES('39','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('40','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('41','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('42','1','1');
|
||||
INSERT DELAYED INTO t1 VALUES('43','1','1');|
|
||||
delimiter ;|
|
||||
INSERT DELAYED INTO t1 VALUES('43','1','1');
|
||||
|
||||
connection con0;
|
||||
let $wait_condition=
|
||||
@@ -121,10 +118,6 @@ let $wait_condition=
|
||||
--source include/wait_condition.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
connection con1;
|
||||
--echo Asynchronous "reap" result
|
||||
reap;
|
||||
|
||||
connection con0;
|
||||
--echo Asynchronous "reap" result
|
||||
--echo The next result suffers from
|
||||
@@ -161,10 +154,6 @@ LOCK TABLE v1 READ;
|
||||
|
||||
connection con1;
|
||||
|
||||
--echo Asynchronous execute
|
||||
delimiter |;
|
||||
|
||||
send
|
||||
INSERT DELAYED INTO t1 VALUES('7');
|
||||
INSERT DELAYED INTO t1 VALUES('8');
|
||||
INSERT DELAYED INTO t1 VALUES('9');
|
||||
@@ -180,9 +169,7 @@ INSERT DELAYED INTO t1 VALUES('18');
|
||||
INSERT DELAYED INTO t1 VALUES('19');
|
||||
INSERT DELAYED INTO t1 VALUES('20');
|
||||
INSERT DELAYED INTO t1 VALUES('21');
|
||||
INSERT DELAYED INTO t1 VALUES('22');|
|
||||
|
||||
delimiter ;|
|
||||
INSERT DELAYED INTO t1 VALUES('22');
|
||||
|
||||
connection con0;
|
||||
let $wait_condition=
|
||||
@@ -192,7 +179,7 @@ let $wait_condition=
|
||||
--echo Asynchronous execute
|
||||
# Due to performance and server behaveiour the test observes values between 6 and 22.
|
||||
# In any case the value must not be outside of that range.
|
||||
let $my_select= SELECT COUNT(*) BETWEEN 6 AND 22 FROM t1;
|
||||
let $my_select= SELECT COUNT(*) FROM t1;
|
||||
send;
|
||||
eval $my_select;
|
||||
|
||||
@@ -204,9 +191,6 @@ let $wait_condition=
|
||||
--source include/wait_condition.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
connection con1;
|
||||
reap;
|
||||
|
||||
connection con0;
|
||||
--echo Asynchronous "reap" result
|
||||
reap;
|
||||
|
||||
@@ -48,9 +48,8 @@ set global innodb_change_buffering_debug='foo';
|
||||
set global innodb_change_buffering_debug=-2;
|
||||
--error ER_WRONG_TYPE_FOR_VAR
|
||||
set global innodb_change_buffering_debug=1e1;
|
||||
# The value 2 is supposed to kill the server if there are unmerged changes.
|
||||
# Do not try to set the value to 2 or anything that can be clamped to 2.
|
||||
#set global innodb_change_buffering_debug=2;
|
||||
set global innodb_change_buffering_debug=2;
|
||||
select @@global.innodb_change_buffering_debug;
|
||||
|
||||
#
|
||||
# Cleanup
|
||||
|
||||
@@ -642,3 +642,45 @@ create or replace table t1 (f1 int) with system versioning;
|
||||
alter table t1 drop system versioning, add f2 int with system versioning;
|
||||
ERROR HY000: Table `t1` is not system-versioned
|
||||
drop table t1;
|
||||
# MDEV-16490 It's possible to make a system versioned table without any versioning field
|
||||
set @@system_versioning_alter_history=keep;
|
||||
create or replace table t (a int) with system versioning engine=innodb;
|
||||
alter table t change column a a int without system versioning;
|
||||
ERROR HY000: Table `t` must have at least one versioned column
|
||||
alter table t
|
||||
change column a a int without system versioning,
|
||||
add column b int with system versioning;
|
||||
show create table t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING,
|
||||
`b` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
|
||||
alter table t
|
||||
change column a new_a int,
|
||||
drop system versioning;
|
||||
show create table t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`new_a` int(11) DEFAULT NULL,
|
||||
`b` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
alter table t add system versioning;
|
||||
alter table t change column new_a a int without system versioning;
|
||||
show create table t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`a` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING,
|
||||
`b` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
|
||||
alter table t
|
||||
add column c int,
|
||||
change column c c int without system versioning,
|
||||
change column b b int without system versioning;
|
||||
ERROR HY000: Table `t` must have at least one versioned column
|
||||
alter table t
|
||||
add column c int without system versioning,
|
||||
change column c c int,
|
||||
change column b b int without system versioning;
|
||||
drop database test;
|
||||
create database test;
|
||||
|
||||
@@ -527,3 +527,13 @@ row_end datetime(6) generated always as row end,
|
||||
period for system_time(row_start, row_end)
|
||||
) with system versioning;
|
||||
ERROR HY000: `row_start` must be of type TIMESTAMP(6) for system-versioned table `t`
|
||||
# MDEV-16490 It's possible to make a system versioned table without any versioning field
|
||||
create or replace table t1 (x int without system versioning)
|
||||
with system versioning
|
||||
select 1 as y;
|
||||
create or replace table t1 (x int without system versioning)
|
||||
with system versioning
|
||||
select 1 as x;
|
||||
ERROR HY000: Table `t1` must have at least one versioned column
|
||||
drop database test;
|
||||
create database test;
|
||||
|
||||
@@ -543,3 +543,37 @@ alter table t1 drop system versioning, add f2 int with system versioning;
|
||||
|
||||
drop table t1;
|
||||
--source suite/versioning/common_finish.inc
|
||||
--echo # MDEV-16490 It's possible to make a system versioned table without any versioning field
|
||||
|
||||
set @@system_versioning_alter_history=keep;
|
||||
create or replace table t (a int) with system versioning engine=innodb;
|
||||
--error ER_VERS_TABLE_MUST_HAVE_COLUMNS
|
||||
alter table t change column a a int without system versioning;
|
||||
|
||||
alter table t
|
||||
change column a a int without system versioning,
|
||||
add column b int with system versioning;
|
||||
show create table t;
|
||||
|
||||
alter table t
|
||||
change column a new_a int,
|
||||
drop system versioning;
|
||||
show create table t;
|
||||
|
||||
alter table t add system versioning;
|
||||
alter table t change column new_a a int without system versioning;
|
||||
show create table t;
|
||||
|
||||
--error ER_VERS_TABLE_MUST_HAVE_COLUMNS
|
||||
alter table t
|
||||
add column c int,
|
||||
change column c c int without system versioning,
|
||||
change column b b int without system versioning;
|
||||
|
||||
alter table t
|
||||
add column c int without system versioning,
|
||||
change column c c int,
|
||||
change column b b int without system versioning;
|
||||
|
||||
drop database test;
|
||||
create database test;
|
||||
|
||||
@@ -396,3 +396,14 @@ create table t (
|
||||
) with system versioning;
|
||||
|
||||
--source suite/versioning/common_finish.inc
|
||||
--echo # MDEV-16490 It's possible to make a system versioned table without any versioning field
|
||||
create or replace table t1 (x int without system versioning)
|
||||
with system versioning
|
||||
select 1 as y;
|
||||
--error ER_VERS_TABLE_MUST_HAVE_COLUMNS
|
||||
create or replace table t1 (x int without system versioning)
|
||||
with system versioning
|
||||
select 1 as x;
|
||||
|
||||
drop database test;
|
||||
create database test;
|
||||
|
||||
@@ -11,6 +11,4 @@
|
||||
##############################################################################
|
||||
|
||||
foreign_key : Sporadic failure "WSREP has not yet prepared node for application use"
|
||||
variables : MDEV-19746 Galera test failures because of wsrep_slave_threads identification
|
||||
wsrep.pool_of_threads : Sporadic failure "WSREP has not yet prepared node for application use"
|
||||
wsrep.variables : Global wsrep_on manipulation causes debug asserts
|
||||
|
||||
@@ -210,9 +210,9 @@ IF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS)
|
||||
# without necessity.E.g source modifications, that do not
|
||||
# change list of exported symbols, will not result in a relink for plugins.
|
||||
|
||||
SET(MYSQLD_DEF ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.def)
|
||||
SET(MYSQLD_EXP ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.exp)
|
||||
SET(MYSQLD_LIB ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.lib)
|
||||
SET(MYSQLD_DEF ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib${CMAKE_CFG_INTDIR}.def)
|
||||
SET(MYSQLD_EXP ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib${CMAKE_CFG_INTDIR}.exp)
|
||||
SET(MYSQLD_LIB ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib${CMAKE_CFG_INTDIR}.lib)
|
||||
SET(MYSQLD_CORELIBS sql mysys dbug strings)
|
||||
FOREACH (CORELIB ${MYSQLD_CORELIBS})
|
||||
SET (LIB_LOCATIONS ${LIB_LOCATIONS} $<TARGET_FILE:${CORELIB}>)
|
||||
@@ -225,12 +225,12 @@ IF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS)
|
||||
# Create a cmake script to generate import and export libs
|
||||
# from a .def file
|
||||
SET(CMAKE_CONFIGURABLE_FILE_CONTENT "
|
||||
IF ((mysqld_lib.def IS_NEWER_THAN mysqld_lib.lib) OR
|
||||
(mysqld_lib.def IS_NEWER_THAN mysqld_lib.exp))
|
||||
FILE(REMOVE mysqld_lib.lib mysqld_lib.exp)
|
||||
IF ((mysqld_lib\${CFG}.def IS_NEWER_THAN mysqld_lib\${CFG}.lib) OR
|
||||
(mysqld_lib\${CFG}.def IS_NEWER_THAN mysqld_lib\${CFG}.exp))
|
||||
FILE(REMOVE mysqld_lib\${CFG}.lib mysqld_lib\${CFG}.exp)
|
||||
SET(ENV{VS_UNICODE_OUTPUT})
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND \"${CMAKE_LINKER}\" /lib /NAME:mysqld.exe \"/DEF:${MYSQLD_DEF}\" /MACHINE:${_PLATFORM}
|
||||
COMMAND \"${CMAKE_LINKER}\" /lib /NAME:mysqld.exe \"/DEF:${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib\${CFG}.def\" /MACHINE:${_PLATFORM}
|
||||
RESULT_VARIABLE ret)
|
||||
IF(NOT ret EQUAL 0)
|
||||
MESSAGE(FATAL_ERROR \"process failed ret=\${ret}\")
|
||||
@@ -240,41 +240,22 @@ IF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS)
|
||||
|
||||
CONFIGURE_FILE(
|
||||
${PROJECT_SOURCE_DIR}/cmake/configurable_file_content.in
|
||||
make_mysqld_lib.cmake)
|
||||
make_mysqld_lib.cmake
|
||||
@ONLY)
|
||||
|
||||
IF(CMAKE_VERSION VERSION_GREATER "3.2.0")
|
||||
SET(MYSQLD_LIB_BYPRODUCTS BYPRODUCTS ${MYSQLD_DEF} ${MYSQLD_LIB} ${MYSQLD_EXP})
|
||||
ENDIF()
|
||||
|
||||
# Create a cmake script to generate import and export libs
|
||||
# from a .def file
|
||||
SET(CMAKE_CONFIGURABLE_FILE_CONTENT "
|
||||
IF ((mysqld_lib.def IS_NEWER_THAN mysqld_lib.lib) OR
|
||||
(mysqld_lib.def IS_NEWER_THAN mysqld_lib.exp))
|
||||
FILE(REMOVE mysqld_lib.lib mysqld_lib.exp)
|
||||
SET(ENV{VS_UNICODE_OUTPUT})
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND \"${CMAKE_LINKER}\" /lib /NAME:mysqld.exe \"/DEF:${MYSQLD_DEF}\" /MACHINE:${_PLATFORM}
|
||||
RESULT_VARIABLE ret)
|
||||
IF(NOT ret EQUAL 0)
|
||||
MESSAGE(FATAL_ERROR \"process failed ret=\${ret}\")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
")
|
||||
|
||||
CONFIGURE_FILE(
|
||||
${PROJECT_SOURCE_DIR}/cmake/configurable_file_content.in
|
||||
make_mysqld_lib.cmake)
|
||||
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.stamp
|
||||
${MYSQLD_LIB_BYPRODUCTS}
|
||||
COMMENT "Generating mysqld_lib.def, mysqld_lib.lib, mysqld_lib.exp"
|
||||
COMMENT "Generating ${MYSQLD_DEF}, ${MYSQLD_LIB}, ${MYSQLD_EXP}"
|
||||
COMMAND cscript //nologo ${PROJECT_SOURCE_DIR}/win/create_def_file.js
|
||||
${_PLATFORM} /forLib ${LIB_LOCATIONS} > mysqld_lib.def.tmp
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different mysqld_lib.def.tmp mysqld_lib.def
|
||||
COMMAND ${CMAKE_COMMAND} -E remove mysqld_lib.def.tmp
|
||||
COMMAND ${CMAKE_COMMAND} -P make_mysqld_lib.cmake
|
||||
${_PLATFORM} /forLib ${LIB_LOCATIONS} > ${MYSQLD_DEF}.tmp
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MYSQLD_DEF}.tmp ${MYSQLD_DEF}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove ${MYSQLD_DEF}.tmp
|
||||
COMMAND ${CMAKE_COMMAND} "-DCFG=${CMAKE_CFG_INTDIR}" -P make_mysqld_lib.cmake
|
||||
COMMAND ${CMAKE_COMMAND} -E touch mysqld_lib.stamp
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
DEPENDS ${MYSQLD_CORELIBS}
|
||||
|
||||
@@ -1202,6 +1202,46 @@ Events::load_events_from_db(THD *thd)
|
||||
delete et;
|
||||
goto end;
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
/**
|
||||
IF SST is done from a galera node that is also acting as MASTER
|
||||
newly synced node in galera eco-system will also copy-over the event state
|
||||
enabling duplicate event in galera eco-system.
|
||||
DISABLE such events if the current node is not event orginator.
|
||||
(Also, make sure you skip disabling it if is already disabled to avoid
|
||||
creation of redundant action)
|
||||
NOTE:
|
||||
This complete system relies on server-id. Ideally server-id should be
|
||||
same for all nodes of galera eco-system but they aren't same.
|
||||
Infact, based on galera use-case it seems like it recommends to have each
|
||||
node with different server-id.
|
||||
*/
|
||||
if (et->originator != thd->variables.server_id)
|
||||
{
|
||||
if (et->status == Event_parse_data::SLAVESIDE_DISABLED)
|
||||
continue;
|
||||
|
||||
store_record(table, record[1]);
|
||||
table->field[ET_FIELD_STATUS]->
|
||||
store((longlong) Event_parse_data::SLAVESIDE_DISABLED,
|
||||
TRUE);
|
||||
|
||||
/* All the dmls to mysql.events tables are stmt bin-logged. */
|
||||
bool save_binlog_row_based;
|
||||
if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row()))
|
||||
thd->set_current_stmt_binlog_format_stmt();
|
||||
|
||||
(void) table->file->ha_update_row(table->record[1], table->record[0]);
|
||||
|
||||
if (save_binlog_row_based)
|
||||
thd->set_current_stmt_binlog_format_row();
|
||||
|
||||
delete et;
|
||||
continue;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/**
|
||||
Since the Event_queue_element object could be deleted inside
|
||||
Event_queue::create_event we should save the value of dropped flag
|
||||
|
||||
103
sql/handler.cc
103
sql/handler.cc
@@ -7375,8 +7375,7 @@ bool Vers_parse_info::fix_implicit(THD *thd, Alter_info *alter_info)
|
||||
|
||||
|
||||
bool Table_scope_and_contents_source_st::vers_fix_system_fields(
|
||||
THD *thd, Alter_info *alter_info, const TABLE_LIST &create_table,
|
||||
bool create_select)
|
||||
THD *thd, Alter_info *alter_info, const TABLE_LIST &create_table)
|
||||
{
|
||||
DBUG_ASSERT(!(alter_info->flags & ALTER_DROP_SYSTEM_VERSIONING));
|
||||
|
||||
@@ -7416,41 +7415,59 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
|
||||
if (vers_info.fix_implicit(thd, alter_info))
|
||||
return true;
|
||||
|
||||
int plain_cols= 0; // columns don't have WITH or WITHOUT SYSTEM VERSIONING
|
||||
int vers_cols= 0; // columns have WITH SYSTEM VERSIONING
|
||||
it.rewind();
|
||||
while (const Create_field *f= it++)
|
||||
{
|
||||
if (vers_info.is_start(*f) || vers_info.is_end(*f))
|
||||
continue;
|
||||
|
||||
if (f->versioning == Column_definition::VERSIONING_NOT_SET)
|
||||
plain_cols++;
|
||||
else if (f->versioning == Column_definition::WITH_VERSIONING)
|
||||
vers_cols++;
|
||||
}
|
||||
|
||||
if (!thd->lex->tmp_table() &&
|
||||
// CREATE from SELECT (Create_fields are not yet added)
|
||||
!create_select && vers_cols == 0 && (plain_cols == 0 || !vers_info))
|
||||
{
|
||||
my_error(ER_VERS_TABLE_MUST_HAVE_COLUMNS, MYF(0),
|
||||
create_table.table_name.str);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Table_scope_and_contents_source_st::vers_check_system_fields(
|
||||
THD *thd, Alter_info *alter_info, const TABLE_LIST &create_table)
|
||||
THD *thd, Alter_info *alter_info, const Lex_table_name &table_name,
|
||||
const Lex_table_name &db, int select_count)
|
||||
{
|
||||
if (!(options & HA_VERSIONED_TABLE))
|
||||
return false;
|
||||
return vers_info.check_sys_fields(
|
||||
create_table.table_name, create_table.db, alter_info,
|
||||
ha_check_storage_engine_flag(db_type, HTON_NATIVE_SYS_VERSIONING));
|
||||
|
||||
if (!(alter_info->flags & ALTER_DROP_SYSTEM_VERSIONING))
|
||||
{
|
||||
uint versioned_fields= 0;
|
||||
uint fieldnr= 0;
|
||||
List_iterator<Create_field> field_it(alter_info->create_list);
|
||||
while (Create_field *f= field_it++)
|
||||
{
|
||||
/*
|
||||
The field from the CREATE part can be duplicated in the SELECT part of
|
||||
CREATE...SELECT. In that case double counts should be avoided.
|
||||
select_create::create_table_from_items just pushes the fields back into
|
||||
the create_list, without additional manipulations, so the fields from
|
||||
SELECT go last there.
|
||||
*/
|
||||
bool is_dup= false;
|
||||
if (fieldnr >= alter_info->create_list.elements - select_count)
|
||||
{
|
||||
List_iterator<Create_field> dup_it(alter_info->create_list);
|
||||
for (Create_field *dup= dup_it++; !is_dup && dup != f; dup= dup_it++)
|
||||
is_dup= my_strcasecmp(default_charset_info,
|
||||
dup->field_name.str, f->field_name.str) == 0;
|
||||
}
|
||||
|
||||
if (!(f->flags & VERS_UPDATE_UNVERSIONED_FLAG) && !is_dup)
|
||||
versioned_fields++;
|
||||
fieldnr++;
|
||||
}
|
||||
if (versioned_fields == VERSIONING_FIELDS)
|
||||
{
|
||||
my_error(ER_VERS_TABLE_MUST_HAVE_COLUMNS, MYF(0), table_name.str);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING))
|
||||
return false;
|
||||
|
||||
bool can_native= ha_check_storage_engine_flag(db_type,
|
||||
HTON_NATIVE_SYS_VERSIONING)
|
||||
|| db_type->db_type == DB_TYPE_PARTITION_DB;
|
||||
|
||||
return vers_info.check_sys_fields(table_name, db, alter_info, can_native);
|
||||
}
|
||||
|
||||
|
||||
@@ -7554,20 +7571,7 @@ bool Vers_parse_info::fix_alter_info(THD *thd, Alter_info *alter_info,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fix_implicit(thd, alter_info))
|
||||
return true;
|
||||
|
||||
if (alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING)
|
||||
{
|
||||
const bool can_native=
|
||||
ha_check_storage_engine_flag(create_info->db_type,
|
||||
HTON_NATIVE_SYS_VERSIONING) ||
|
||||
create_info->db_type->db_type == DB_TYPE_PARTITION_DB;
|
||||
if (check_sys_fields(table_name, share->db, alter_info, can_native))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return fix_implicit(thd, alter_info);
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -7774,10 +7778,12 @@ bool Table_period_info::check_field(const Create_field* f,
|
||||
}
|
||||
|
||||
bool Table_scope_and_contents_source_st::check_fields(
|
||||
THD *thd, Alter_info *alter_info, TABLE_LIST &create_table)
|
||||
THD *thd, Alter_info *alter_info,
|
||||
const Lex_table_name &table_name, const Lex_table_name &db, int select_count)
|
||||
{
|
||||
return vers_check_system_fields(thd, alter_info, create_table)
|
||||
|| check_period_fields(thd, alter_info);
|
||||
return vers_check_system_fields(thd, alter_info,
|
||||
table_name, db, select_count) ||
|
||||
check_period_fields(thd, alter_info);
|
||||
}
|
||||
|
||||
bool Table_scope_and_contents_source_st::check_period_fields(
|
||||
@@ -7826,10 +7832,9 @@ bool Table_scope_and_contents_source_st::check_period_fields(
|
||||
bool
|
||||
Table_scope_and_contents_source_st::fix_create_fields(THD *thd,
|
||||
Alter_info *alter_info,
|
||||
const TABLE_LIST &create_table,
|
||||
bool create_select)
|
||||
const TABLE_LIST &create_table)
|
||||
{
|
||||
return vers_fix_system_fields(thd, alter_info, create_table, create_select)
|
||||
return vers_fix_system_fields(thd, alter_info, create_table)
|
||||
|| fix_period_fields(thd, alter_info);
|
||||
}
|
||||
|
||||
|
||||
@@ -2163,18 +2163,22 @@ struct Table_scope_and_contents_source_st:
|
||||
}
|
||||
|
||||
bool fix_create_fields(THD *thd, Alter_info *alter_info,
|
||||
const TABLE_LIST &create_table,
|
||||
bool create_select= false);
|
||||
const TABLE_LIST &create_table);
|
||||
bool fix_period_fields(THD *thd, Alter_info *alter_info);
|
||||
bool check_fields(THD *thd, Alter_info *alter_info, TABLE_LIST &create_table);
|
||||
bool check_fields(THD *thd, Alter_info *alter_info,
|
||||
const Lex_table_name &table_name,
|
||||
const Lex_table_name &db,
|
||||
int select_count= 0);
|
||||
bool check_period_fields(THD *thd, Alter_info *alter_info);
|
||||
|
||||
bool vers_fix_system_fields(THD *thd, Alter_info *alter_info,
|
||||
const TABLE_LIST &create_table,
|
||||
bool create_select= false);
|
||||
const TABLE_LIST &create_table);
|
||||
|
||||
bool vers_check_system_fields(THD *thd, Alter_info *alter_info,
|
||||
const TABLE_LIST &create_table);
|
||||
const Lex_table_name &table_name,
|
||||
const Lex_table_name &db,
|
||||
int select_count= 0);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1223,17 +1223,22 @@ bool Item_func_minus::fix_length_and_dec()
|
||||
if (Item_func_minus::type_handler()->Item_func_minus_fix_length_and_dec(this))
|
||||
DBUG_RETURN(TRUE);
|
||||
DBUG_PRINT("info", ("Type: %s", type_handler()->name().ptr()));
|
||||
m_sql_mode_dependency= Item_func::value_depends_on_sql_mode();
|
||||
if (unsigned_flag)
|
||||
{
|
||||
m_sql_mode_dependency|= Sql_mode_dependency(0,MODE_NO_UNSIGNED_SUBTRACTION);
|
||||
if (current_thd->variables.sql_mode & MODE_NO_UNSIGNED_SUBTRACTION)
|
||||
if ((m_depends_on_sql_mode_no_unsigned_subtraction= unsigned_flag) &&
|
||||
(current_thd->variables.sql_mode & MODE_NO_UNSIGNED_SUBTRACTION))
|
||||
unsigned_flag= false;
|
||||
}
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
|
||||
Sql_mode_dependency Item_func_minus::value_depends_on_sql_mode() const
|
||||
{
|
||||
Sql_mode_dependency dep= Item_func_additive_op::value_depends_on_sql_mode();
|
||||
if (m_depends_on_sql_mode_no_unsigned_subtraction)
|
||||
dep|= Sql_mode_dependency(0, MODE_NO_UNSIGNED_SUBTRACTION);
|
||||
return dep;
|
||||
}
|
||||
|
||||
|
||||
double Item_func_minus::real_op()
|
||||
{
|
||||
double value= args[0]->val_real() - args[1]->val_real();
|
||||
|
||||
@@ -1327,16 +1327,15 @@ public:
|
||||
|
||||
class Item_func_minus :public Item_func_additive_op
|
||||
{
|
||||
Sql_mode_dependency m_sql_mode_dependency;
|
||||
bool m_depends_on_sql_mode_no_unsigned_subtraction;
|
||||
public:
|
||||
Item_func_minus(THD *thd, Item *a, Item *b):
|
||||
Item_func_additive_op(thd, a, b) {}
|
||||
Item_func_additive_op(thd, a, b),
|
||||
m_depends_on_sql_mode_no_unsigned_subtraction(false)
|
||||
{ }
|
||||
const char *func_name() const { return "-"; }
|
||||
enum precedence precedence() const { return ADD_PRECEDENCE; }
|
||||
Sql_mode_dependency value_depends_on_sql_mode() const
|
||||
{
|
||||
return m_sql_mode_dependency;
|
||||
}
|
||||
Sql_mode_dependency value_depends_on_sql_mode() const;
|
||||
longlong int_op();
|
||||
double real_op();
|
||||
my_decimal *decimal_op(my_decimal *);
|
||||
|
||||
@@ -7340,6 +7340,8 @@ ER_NO_EIS_FOR_FIELD
|
||||
ER_WARN_AGGFUNC_DEPENDENCE
|
||||
eng "Aggregate function '%-.192s)' of SELECT #%d belongs to SELECT #%d"
|
||||
ukr "Агрегатна функція '%-.192s)' з SELECTу #%d належить до SELECTу #%d"
|
||||
WARN_INNODB_PARTITION_OPTION_IGNORED
|
||||
eng "<%-.64s> option ignored for InnoDB partition"
|
||||
|
||||
#
|
||||
# Internal errors, not used
|
||||
|
||||
@@ -4202,7 +4202,7 @@ TABLE *select_create::create_table_from_items(THD *thd, List<Item> *items,
|
||||
if (!opt_explicit_defaults_for_timestamp)
|
||||
promote_first_timestamp_column(&alter_info->create_list);
|
||||
|
||||
if (create_info->fix_create_fields(thd, alter_info, *create_table, true))
|
||||
if (create_info->fix_create_fields(thd, alter_info, *create_table))
|
||||
DBUG_RETURN(NULL);
|
||||
|
||||
while ((item=it++))
|
||||
@@ -4241,7 +4241,10 @@ TABLE *select_create::create_table_from_items(THD *thd, List<Item> *items,
|
||||
alter_info->create_list.push_back(cr_field, thd->mem_root);
|
||||
}
|
||||
|
||||
if (create_info->check_fields(thd, alter_info, *create_table))
|
||||
if (create_info->check_fields(thd, alter_info,
|
||||
create_table->table_name,
|
||||
create_table->db,
|
||||
select_field_count))
|
||||
DBUG_RETURN(NULL);
|
||||
|
||||
DEBUG_SYNC(thd,"create_table_select_before_create");
|
||||
|
||||
@@ -4790,6 +4790,69 @@ bool compare_partition_options(HA_CREATE_INFO *table_create_info,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Check if the ALTER command tries to change DATA DIRECTORY
|
||||
or INDEX DIRECTORY for its partitions and warn if so.
|
||||
@param thd THD
|
||||
@param part_elem partition_element to check
|
||||
*/
|
||||
static void warn_if_datadir_altered(THD *thd,
|
||||
const partition_element *part_elem)
|
||||
{
|
||||
DBUG_ASSERT(part_elem);
|
||||
|
||||
if (part_elem->engine_type &&
|
||||
part_elem->engine_type->db_type != DB_TYPE_INNODB)
|
||||
return;
|
||||
|
||||
if (part_elem->data_file_name)
|
||||
{
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
WARN_INNODB_PARTITION_OPTION_IGNORED,
|
||||
ER(WARN_INNODB_PARTITION_OPTION_IGNORED),
|
||||
"DATA DIRECTORY");
|
||||
}
|
||||
if (part_elem->index_file_name)
|
||||
{
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
WARN_INNODB_PARTITION_OPTION_IGNORED,
|
||||
ER(WARN_INNODB_PARTITION_OPTION_IGNORED),
|
||||
"INDEX DIRECTORY");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Currently changing DATA DIRECTORY and INDEX DIRECTORY for InnoDB partitions is
|
||||
not possible. This function checks it and warns on that case.
|
||||
@param thd THD
|
||||
@param tab_part_info old partition info
|
||||
@param alt_part_info new partition info
|
||||
*/
|
||||
static void check_datadir_altered_for_innodb(THD *thd,
|
||||
partition_info *tab_part_info,
|
||||
partition_info *alt_part_info)
|
||||
{
|
||||
if (tab_part_info->default_engine_type->db_type != DB_TYPE_INNODB)
|
||||
return;
|
||||
|
||||
for (List_iterator_fast<partition_element> it(alt_part_info->partitions);
|
||||
partition_element *part_elem= it++;)
|
||||
{
|
||||
if (alt_part_info->is_sub_partitioned())
|
||||
{
|
||||
for (List_iterator_fast<partition_element> it2(part_elem->subpartitions);
|
||||
const partition_element *sub_part_elem= it2++;)
|
||||
{
|
||||
warn_if_datadir_altered(thd, sub_part_elem);
|
||||
}
|
||||
}
|
||||
else
|
||||
warn_if_datadir_altered(thd, part_elem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Prepare for ALTER TABLE of partition structure
|
||||
|
||||
@@ -5625,6 +5688,8 @@ state of p1.
|
||||
{
|
||||
goto err;
|
||||
}
|
||||
check_datadir_altered_for_innodb(thd, tab_part_info, alt_part_info);
|
||||
|
||||
/*
|
||||
Online handling:
|
||||
REORGANIZE PARTITION:
|
||||
|
||||
@@ -8697,13 +8697,6 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
}
|
||||
}
|
||||
|
||||
if (table->versioned() && !(alter_info->flags & ALTER_DROP_SYSTEM_VERSIONING) &&
|
||||
new_create_list.elements == VERSIONING_FIELDS)
|
||||
{
|
||||
my_error(ER_VERS_TABLE_MUST_HAVE_COLUMNS, MYF(0), table->s->table_name.str);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!create_info->comment.str)
|
||||
{
|
||||
create_info->comment.str= table->s->comment.str;
|
||||
@@ -9787,8 +9780,9 @@ do_continue:;
|
||||
|
||||
set_table_default_charset(thd, create_info, alter_ctx.db);
|
||||
|
||||
if (create_info->check_period_fields(thd, alter_info)
|
||||
|| create_info->fix_period_fields(thd, alter_info))
|
||||
if (create_info->check_fields(thd, alter_info,
|
||||
table_list->table_name, table_list->db) ||
|
||||
create_info->fix_period_fields(thd, alter_info))
|
||||
DBUG_RETURN(true);
|
||||
|
||||
if (!opt_explicit_defaults_for_timestamp)
|
||||
@@ -11409,7 +11403,8 @@ bool Sql_cmd_create_table_like::execute(THD *thd)
|
||||
else
|
||||
{
|
||||
if (create_info.fix_create_fields(thd, &alter_info, *create_table) ||
|
||||
create_info.check_fields(thd, &alter_info, *create_table))
|
||||
create_info.check_fields(thd, &alter_info,
|
||||
create_table->table_name, create_table->db))
|
||||
goto end_with_restore_list;
|
||||
|
||||
/*
|
||||
|
||||
@@ -7134,7 +7134,8 @@ field_length:
|
||||
'(' LONG_NUM ')' { $$= $2.str; }
|
||||
| '(' ULONGLONG_NUM ')' { $$= $2.str; }
|
||||
| '(' DECIMAL_NUM ')' { $$= $2.str; }
|
||||
| '(' NUM ')' { $$= $2.str; };
|
||||
| '(' NUM ')' { $$= $2.str; }
|
||||
;
|
||||
|
||||
opt_field_length:
|
||||
/* empty */ { $$= (char*) 0; /* use default length */ }
|
||||
@@ -7753,7 +7754,8 @@ string_list:
|
||||
text_string
|
||||
{ Lex->last_field->interval_list.push_back($1, thd->mem_root); }
|
||||
| string_list ',' text_string
|
||||
{ Lex->last_field->interval_list.push_back($3, thd->mem_root); };
|
||||
{ Lex->last_field->interval_list.push_back($3, thd->mem_root); }
|
||||
;
|
||||
|
||||
/*
|
||||
** Alter table
|
||||
@@ -14921,7 +14923,8 @@ line_term:
|
||||
opt_xml_rows_identified_by:
|
||||
/* empty */ { }
|
||||
| ROWS_SYM IDENTIFIED_SYM BY text_string
|
||||
{ Lex->exchange->line_term = $4; };
|
||||
{ Lex->exchange->line_term = $4; }
|
||||
;
|
||||
|
||||
opt_ignore_lines:
|
||||
/* empty */
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
|
||||
|
||||
/* sql_yacc.yy */
|
||||
|
||||
@@ -7195,7 +7195,8 @@ field_length:
|
||||
'(' LONG_NUM ')' { $$= $2.str; }
|
||||
| '(' ULONGLONG_NUM ')' { $$= $2.str; }
|
||||
| '(' DECIMAL_NUM ')' { $$= $2.str; }
|
||||
| '(' NUM ')' { $$= $2.str; };
|
||||
| '(' NUM ')' { $$= $2.str; }
|
||||
;
|
||||
|
||||
opt_field_length:
|
||||
/* empty */ { $$= (char*) 0; /* use default length */ }
|
||||
@@ -7854,7 +7855,8 @@ string_list:
|
||||
text_string
|
||||
{ Lex->last_field->interval_list.push_back($1, thd->mem_root); }
|
||||
| string_list ',' text_string
|
||||
{ Lex->last_field->interval_list.push_back($3, thd->mem_root); };
|
||||
{ Lex->last_field->interval_list.push_back($3, thd->mem_root); }
|
||||
;
|
||||
|
||||
/*
|
||||
** Alter table
|
||||
@@ -15053,7 +15055,8 @@ line_term:
|
||||
opt_xml_rows_identified_by:
|
||||
/* empty */ { }
|
||||
| ROWS_SYM IDENTIFIED_SYM BY text_string
|
||||
{ Lex->exchange->line_term = $4; };
|
||||
{ Lex->exchange->line_term = $4; }
|
||||
;
|
||||
|
||||
opt_ignore_lines:
|
||||
/* empty */
|
||||
|
||||
@@ -294,6 +294,7 @@ TP_connection_win::~TP_connection_win()
|
||||
|
||||
if (timer)
|
||||
{
|
||||
SetThreadpoolTimer(timer, 0, 0, 0);
|
||||
WaitForThreadpoolTimerCallbacks(timer, TRUE);
|
||||
CloseThreadpoolTimer(timer);
|
||||
}
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
#include <string>
|
||||
#include "log_event.h"
|
||||
#include <slave.h>
|
||||
#include "sql_plugin.h" /* wsrep_plugins_pre_init() */
|
||||
|
||||
#include <sstream>
|
||||
|
||||
|
||||
@@ -73,10 +73,6 @@ ELSE(NOT UNIX)
|
||||
tabwmi.cpp tabwmi.h tabmac.cpp tabmac.h macutil.cpp macutil.h)
|
||||
# Add exception handling to the CONNECT project)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
||||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
|
||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
|
||||
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MD")
|
||||
SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MD")
|
||||
SET(IPHLPAPI_LIBRARY iphlpapi.lib)
|
||||
IF(MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES Clang))
|
||||
# Connect does not work with clang-cl
|
||||
@@ -322,20 +318,20 @@ ENDIF(CONNECT_WITH_MONGO)
|
||||
OPTION(CONNECT_WITH_REST "Compile CONNECT storage engine with REST support" ON)
|
||||
|
||||
IF(CONNECT_WITH_REST)
|
||||
MESSAGE(STATUS "=====> REST support is ON")
|
||||
FIND_PACKAGE(cpprestsdk)
|
||||
FIND_PACKAGE(cpprestsdk QUIET)
|
||||
IF (cpprestsdk_FOUND)
|
||||
MESSAGE(STATUS "=====> cpprestsdk found")
|
||||
IF(UNIX)
|
||||
# INCLUDE_DIRECTORIES(${CPPRESTSDK_INCLUDE_DIR})
|
||||
# If needed edit next line to set the path to libcpprest.so
|
||||
SET(REST_LIBRARY -lcpprest)
|
||||
MESSAGE (STATUS ${REST_LIBRARY})
|
||||
# MESSAGE (STATUS ${REST_LIBRARY})
|
||||
ENDIF(UNIX)
|
||||
IF(REST_LIBRARY)
|
||||
SET(CONNECT_SOURCES ${CONNECT_SOURCES} tabrest.cpp restget.cpp tabrest.h)
|
||||
add_definitions(-DREST_SUPPORT)
|
||||
ENDIF()
|
||||
ELSE(NOT cpprestsdk_FOUND)
|
||||
MESSAGE(STATUS "=====> cpprestsdk package not found")
|
||||
# MESSAGE(STATUS "=====> cpprestsdk package not found")
|
||||
ENDIF (cpprestsdk_FOUND)
|
||||
ENDIF(CONNECT_WITH_REST)
|
||||
|
||||
|
||||
@@ -2972,7 +2972,7 @@ btr_cur_open_at_rnd_pos_func(
|
||||
index->table->file_unreadable = true;
|
||||
}
|
||||
|
||||
goto exit_loop;
|
||||
break;
|
||||
}
|
||||
|
||||
page = buf_block_get_frame(block);
|
||||
@@ -3129,12 +3129,11 @@ btr_cur_open_at_rnd_pos_func(
|
||||
n_blocks++;
|
||||
}
|
||||
|
||||
exit_loop:
|
||||
if (UNIV_LIKELY_NULL(heap)) {
|
||||
mem_heap_free(heap);
|
||||
}
|
||||
|
||||
return(true);
|
||||
return err == DB_SUCCESS;
|
||||
}
|
||||
|
||||
/*==================== B-TREE INSERT =========================*/
|
||||
|
||||
@@ -19439,8 +19439,8 @@ static MYSQL_SYSVAR_ENUM(stats_method, srv_innodb_stats_method,
|
||||
#if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
|
||||
static MYSQL_SYSVAR_UINT(change_buffering_debug, ibuf_debug,
|
||||
PLUGIN_VAR_RQCMDARG,
|
||||
"Debug flags for InnoDB change buffering (0=none, 2=crash at merge)",
|
||||
NULL, NULL, 0, 0, 2, 0);
|
||||
"Debug flags for InnoDB change buffering (0=none, 1=try to buffer)",
|
||||
NULL, NULL, 0, 0, 1, 0);
|
||||
|
||||
static MYSQL_SYSVAR_BOOL(disable_background_merge,
|
||||
srv_ibuf_disable_background_merge,
|
||||
|
||||
@@ -4187,23 +4187,6 @@ ibuf_delete_rec(
|
||||
ut_ad(ibuf_rec_get_page_no(mtr, btr_pcur_get_rec(pcur)) == page_no);
|
||||
ut_ad(ibuf_rec_get_space(mtr, btr_pcur_get_rec(pcur)) == space);
|
||||
|
||||
#if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
|
||||
if (ibuf_debug == 2) {
|
||||
/* Inject a fault (crash). We do this before trying
|
||||
optimistic delete, because a pessimistic delete in the
|
||||
change buffer would require a larger test case. */
|
||||
|
||||
/* Flag the buffered record as processed, to avoid
|
||||
an assertion failure after crash recovery. */
|
||||
btr_cur_set_deleted_flag_for_ibuf(
|
||||
btr_pcur_get_rec(pcur), NULL, TRUE, mtr);
|
||||
|
||||
ibuf_mtr_commit(mtr);
|
||||
log_write_up_to(LSN_MAX, true);
|
||||
DBUG_SUICIDE();
|
||||
}
|
||||
#endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */
|
||||
|
||||
success = btr_cur_optimistic_delete(btr_pcur_get_btr_cur(pcur),
|
||||
0, mtr);
|
||||
|
||||
|
||||
@@ -2005,7 +2005,7 @@ dberr_t trx_undo_report_rename(trx_t* trx, const dict_table_t* table)
|
||||
ut_ad(err == DB_SUCCESS);
|
||||
ut_ad(undo);
|
||||
for (ut_d(int loop_count = 0);;) {
|
||||
ut_ad(++loop_count < 2);
|
||||
ut_ad(loop_count++ < 2);
|
||||
ut_ad(undo->last_page_no == block->page.id.page_no());
|
||||
|
||||
if (ulint offset = trx_undo_page_report_rename(
|
||||
|
||||
@@ -320,15 +320,17 @@ static int json_handle_esc(json_string_t *s)
|
||||
if (s->c_next != '\\')
|
||||
return s->error= JE_SYN;
|
||||
|
||||
s->c_str+= c_len;
|
||||
if ((c_len= json_next_char(s)) <= 0)
|
||||
return s->error= json_eos(s) ? JE_EOS : JE_BAD_CHR;
|
||||
if (s->c_next != 'u')
|
||||
return s->error= JE_SYN;
|
||||
s->c_str+= c_len;
|
||||
|
||||
if (read_4_hexdigits(s, code+2))
|
||||
return 1;
|
||||
|
||||
if ((c_len= my_utf16_uni(0, &s->c_next, code, code+4)) == 2)
|
||||
if ((c_len= my_utf16_uni(0, &s->c_next, code, code+4)) == 4)
|
||||
return 0;
|
||||
}
|
||||
return s->error= JE_BAD_CHR;
|
||||
|
||||
Reference in New Issue
Block a user