Merge branch '10.4' into bb-10.4-mdev16188
This commit is contained in:
commit
a44f2c3ee8
@ -111,3 +111,20 @@ long_enough_name CREATE TABLE `long_enough_name` (
|
|||||||
CONSTRAINT `constr` CHECK (`f6` >= 0)
|
CONSTRAINT `constr` CHECK (`f6` >= 0)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
DROP TABLE long_enough_name;
|
DROP TABLE long_enough_name;
|
||||||
|
create table t1 (a int check (a>10)) select 100 as 'a';
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL CHECK (`a` > 10)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (a text default(length(now())) check (length(a) > 1));
|
||||||
|
insert into t1 values ();
|
||||||
|
insert into t1 values ("ccc");
|
||||||
|
insert into t1 values ("");
|
||||||
|
ERROR 23000: CONSTRAINT `t1.a` failed for `test`.`t1`
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
19
|
||||||
|
ccc
|
||||||
|
drop table t1;
|
||||||
|
@ -102,3 +102,23 @@ SELECT * FROM long_enough_name AS tbl;
|
|||||||
SHOW CREATE TABLE long_enough_name;
|
SHOW CREATE TABLE long_enough_name;
|
||||||
|
|
||||||
DROP TABLE long_enough_name;
|
DROP TABLE long_enough_name;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that we don't loose constraints as part of CREATE ... SELECT
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (a int check (a>10)) select 100 as 'a';
|
||||||
|
show create table t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that we constraints on field with default expressions work
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (a text default(length(now())) check (length(a) > 1));
|
||||||
|
insert into t1 values ();
|
||||||
|
insert into t1 values ("ccc");
|
||||||
|
--error ER_CONSTRAINT_FAILED
|
||||||
|
insert into t1 values ("");
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
@ -1,3 +1 @@
|
|||||||
mysql-wsrep-features#29 : binlog_format=STATEMENT not supported with SR
|
galera_sr_table_contents : missing file
|
||||||
GCF-574 : CTAS is not supported together with SR
|
|
||||||
galera_sr_sbr : binlog_format=STATEMENT not supported with SR
|
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB;
|
|
||||||
INSERT INTO ten VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
|
||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;
|
|
||||||
wsrep_last_committed_delta
|
|
||||||
1
|
|
||||||
SELECT COUNT(*) = 10000 FROM t1;
|
|
||||||
COUNT(*) = 10000
|
|
||||||
1
|
|
||||||
DROP TABLE t1;
|
|
||||||
DROP TABLE ten;
|
|
@ -1,5 +1,7 @@
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
|
connection node_1;
|
||||||
|
connection node_2;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log;
|
SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
|
connection node_1;
|
||||||
|
connection node_2;
|
||||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
SET SESSION wsrep_trx_fragment_size = 1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
|
@ -10,4 +10,5 @@ COUNT(*) = 20000
|
|||||||
1
|
1
|
||||||
wsrep_last_committed_diff
|
wsrep_last_committed_diff
|
||||||
1
|
1
|
||||||
|
connection node_1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
CREATE TABLE t1 (id INT) ENGINE=InnoDB;
|
|
||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
|
||||||
SET SESSION BINLOG_FORMAT='STATEMENT';
|
|
||||||
SET AUTOCOMMIT=OFF;
|
|
||||||
START TRANSACTION;
|
|
||||||
INSERT INTO t1 VALUES (1);
|
|
||||||
INSERT INTO t1 VALUES (2);
|
|
||||||
INSERT INTO t1 VALUES (3);
|
|
||||||
INSERT INTO t1 VALUES (4);
|
|
||||||
INSERT INTO t1 VALUES (5);
|
|
||||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
||||||
COMMIT;
|
|
||||||
SELECT COUNT(*) = 5 FROM t1;
|
|
||||||
COUNT(*) = 5
|
|
||||||
1
|
|
||||||
DROP TABLE t1;
|
|
@ -6,9 +6,7 @@ CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB;
|
|||||||
INSERT INTO t2 VALUES (6),(7),(8),(9),(10),(1);
|
INSERT INTO t2 VALUES (6),(7),(8),(9),(10),(1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_slave_threads = 2;
|
SET GLOBAL wsrep_slave_threads = 2;
|
||||||
SET GLOBAL DEBUG = 'd,sync.wsrep_apply_cb';
|
SET GLOBAL debug_dbug = 'd,sync.wsrep_apply_cb';
|
||||||
Warnings:
|
|
||||||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead
|
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
SET SESSION wsrep_trx_fragment_size = 1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
@ -28,9 +26,7 @@ connection node_1;
|
|||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_slave_threads = 1;
|
SET GLOBAL wsrep_slave_threads = 1;
|
||||||
SET GLOBAL DEBUG = '';
|
SET GLOBAL debug_dbug = '';
|
||||||
Warnings:
|
|
||||||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead
|
|
||||||
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
||||||
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
||||||
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
||||||
@ -40,3 +36,4 @@ COUNT(*) = 10
|
|||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
|
SET DEBUG_SYNC = RESET;
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
|
||||||
SET SESSION binlog_format = STATEMENT;
|
|
||||||
create table t1 (id int not null, f_id int not null, f int not null,
|
|
||||||
primary key(f_id, id)) engine=innodb;
|
|
||||||
create table t2 (id int not null,s_id int not null,s varchar(200),
|
|
||||||
primary key(id)) engine=innodb;
|
|
||||||
INSERT INTO t1 VALUES (8, 1, 3);
|
|
||||||
INSERT INTO t1 VALUES (1, 2, 1);
|
|
||||||
INSERT INTO t2 VALUES (1, 0, '');
|
|
||||||
INSERT INTO t2 VALUES (8, 1, '');
|
|
||||||
DELETE ml.* FROM t1 AS ml LEFT JOIN t2 AS mm ON (mm.id=ml.id)
|
|
||||||
WHERE mm.id IS NULL;
|
|
||||||
DROP TABLE t1;
|
|
||||||
DROP TABLE t2;
|
|
@ -1,27 +0,0 @@
|
|||||||
--source include/galera_cluster.inc
|
|
||||||
--source include/have_innodb.inc
|
|
||||||
|
|
||||||
#
|
|
||||||
# Test CREATE TABLE ... SELECT with Streaming Replication
|
|
||||||
#
|
|
||||||
|
|
||||||
--connection node_1
|
|
||||||
CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB;
|
|
||||||
INSERT INTO ten VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
|
||||||
|
|
||||||
--let $wsrep_last_committed_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
|
||||||
|
|
||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;
|
|
||||||
|
|
||||||
--let $wsrep_last_committed_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
|
||||||
--disable_query_log
|
|
||||||
--eval SELECT ($wsrep_last_committed_after - $wsrep_last_committed_before) > 1 AS wsrep_last_committed_delta;
|
|
||||||
--enable_query_log
|
|
||||||
|
|
||||||
--connection node_2
|
|
||||||
SELECT COUNT(*) = 10000 FROM t1;
|
|
||||||
|
|
||||||
--connection node_1
|
|
||||||
DROP TABLE t1;
|
|
||||||
DROP TABLE ten;
|
|
@ -7,6 +7,11 @@
|
|||||||
# leave the cluster.
|
# leave the cluster.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Save original auto_increment_offset values.
|
||||||
|
--let $node_1=node_1
|
||||||
|
--let $node_2=node_2
|
||||||
|
--source ../../galera/include/auto_increment_offset_save.inc
|
||||||
|
|
||||||
# Start with a clean slate
|
# Start with a clean slate
|
||||||
--connection node_2
|
--connection node_2
|
||||||
SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log;
|
SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log;
|
||||||
@ -95,3 +100,6 @@ SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
CALL mtr.add_suppression("points to own listening address, blacklisting");
|
CALL mtr.add_suppression("points to own listening address, blacklisting");
|
||||||
|
|
||||||
|
# Restore original auto_increment_offset values.
|
||||||
|
--source ../../galera/include/auto_increment_offset_restore.inc
|
||||||
|
@ -2,3 +2,7 @@
|
|||||||
|
|
||||||
[mysqld.1]
|
[mysqld.1]
|
||||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.recovery=false'
|
wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.recovery=false'
|
||||||
|
auto_increment_offset=1
|
||||||
|
|
||||||
|
[mysqld.2]
|
||||||
|
auto_increment_offset=2
|
||||||
|
@ -6,6 +6,11 @@
|
|||||||
--source include/galera_cluster.inc
|
--source include/galera_cluster.inc
|
||||||
--source include/big_test.inc
|
--source include/big_test.inc
|
||||||
|
|
||||||
|
# Save original auto_increment_offset values.
|
||||||
|
--let $node_1=node_1
|
||||||
|
--let $node_2=node_2
|
||||||
|
--source ../../galera/include/auto_increment_offset_save.inc
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
SET SESSION wsrep_trx_fragment_size = 1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
@ -50,4 +55,6 @@ SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|||||||
SELECT COUNT(*) = 0 FROM t1;
|
SELECT COUNT(*) = 0 FROM t1;
|
||||||
SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log;
|
SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log;
|
||||||
|
|
||||||
|
--source ../../galera/include/auto_increment_offset_restore.inc
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -24,6 +24,9 @@ CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
|||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
|
--disable_warnings
|
||||||
|
set global wsrep_load_data_splitting=ON;
|
||||||
|
--enable_warnings
|
||||||
--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/galera_sr_load_data.csv' INTO TABLE t1;
|
--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/galera_sr_load_data.csv' INTO TABLE t1;
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
@ -36,4 +39,11 @@ SELECT COUNT(*) = 20000 FROM t1;
|
|||||||
--eval SELECT $wsrep_last_committed_after - $wsrep_last_committed_before = 3 AS wsrep_last_committed_diff
|
--eval SELECT $wsrep_last_committed_after - $wsrep_last_committed_before = 3 AS wsrep_last_committed_diff
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
|
--connection node_1
|
||||||
|
--disable_query_log
|
||||||
|
--disable_warnings
|
||||||
|
set global wsrep_load_data_splitting=OFF;
|
||||||
|
--enable_warnings
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
--source include/galera_cluster.inc
|
|
||||||
--source include/have_innodb.inc
|
|
||||||
|
|
||||||
#
|
|
||||||
# Test that SR does not assert in the presence of statement-based replication events
|
|
||||||
#
|
|
||||||
|
|
||||||
--connection node_1
|
|
||||||
CREATE TABLE t1 (id INT) ENGINE=InnoDB;
|
|
||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
|
||||||
SET SESSION BINLOG_FORMAT='STATEMENT';
|
|
||||||
SET AUTOCOMMIT=OFF;
|
|
||||||
START TRANSACTION;
|
|
||||||
INSERT INTO t1 VALUES (1);
|
|
||||||
INSERT INTO t1 VALUES (2);
|
|
||||||
INSERT INTO t1 VALUES (3);
|
|
||||||
INSERT INTO t1 VALUES (4);
|
|
||||||
INSERT INTO t1 VALUES (5);
|
|
||||||
|
|
||||||
--connection node_2
|
|
||||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
||||||
--let $wait_condition = SELECT COUNT(*) > 0 FROM t1;
|
|
||||||
--source include/wait_condition.inc
|
|
||||||
|
|
||||||
--connection node_1
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
--connection node_2
|
|
||||||
SELECT COUNT(*) = 5 FROM t1;
|
|
||||||
|
|
||||||
DROP TABLE t1;
|
|
@ -16,7 +16,7 @@ INSERT INTO t2 VALUES (6),(7),(8),(9),(10),(1);
|
|||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
SET GLOBAL wsrep_slave_threads = 2;
|
SET GLOBAL wsrep_slave_threads = 2;
|
||||||
SET GLOBAL DEBUG = 'd,sync.wsrep_apply_cb';
|
SET GLOBAL debug_dbug = 'd,sync.wsrep_apply_cb';
|
||||||
|
|
||||||
# Begin SR transaction
|
# Begin SR transaction
|
||||||
--connection node_1
|
--connection node_1
|
||||||
@ -48,7 +48,7 @@ COMMIT;
|
|||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
SET GLOBAL wsrep_slave_threads = 1;
|
SET GLOBAL wsrep_slave_threads = 1;
|
||||||
SET GLOBAL DEBUG = '';
|
SET GLOBAL debug_dbug = '';
|
||||||
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
||||||
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
||||||
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
|
||||||
@ -58,3 +58,5 @@ SELECT COUNT(*) = 10 FROM t1;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
|
|
||||||
|
SET DEBUG_SYNC = RESET;
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
#
|
|
||||||
# mysql-wsrep-features#29 Unwarranted deadlock error with SR and a single-node cluster
|
|
||||||
#
|
|
||||||
|
|
||||||
SET SESSION wsrep_trx_fragment_size = 1;
|
|
||||||
SET SESSION binlog_format = STATEMENT;
|
|
||||||
|
|
||||||
create table t1 (id int not null, f_id int not null, f int not null,
|
|
||||||
primary key(f_id, id)) engine=innodb;
|
|
||||||
|
|
||||||
create table t2 (id int not null,s_id int not null,s varchar(200),
|
|
||||||
primary key(id)) engine=innodb;
|
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (8, 1, 3);
|
|
||||||
INSERT INTO t1 VALUES (1, 2, 1);
|
|
||||||
INSERT INTO t2 VALUES (1, 0, '');
|
|
||||||
INSERT INTO t2 VALUES (8, 1, '');
|
|
||||||
|
|
||||||
DELETE ml.* FROM t1 AS ml LEFT JOIN t2 AS mm ON (mm.id=ml.id)
|
|
||||||
WHERE mm.id IS NULL;
|
|
||||||
|
|
||||||
DROP TABLE t1;
|
|
||||||
DROP TABLE t2;
|
|
@ -734,6 +734,9 @@ INSERT INTO t1 VALUES (1,1);
|
|||||||
ALTER TABLE t1 ADD COLUMN f INT AFTER a;
|
ALTER TABLE t1 ADD COLUMN f INT AFTER a;
|
||||||
ALTER TABLE t1 DROP b, DROP f;
|
ALTER TABLE t1 DROP b, DROP f;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(t TEXT NOT NULL, FULLTEXT(t)) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN t TEXT;
|
||||||
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1
|
CREATE TABLE t1
|
||||||
(id INT PRIMARY KEY, c2 INT UNIQUE,
|
(id INT PRIMARY KEY, c2 INT UNIQUE,
|
||||||
c3 POINT NOT NULL DEFAULT ST_GeomFromText('POINT(3 4)'),
|
c3 POINT NOT NULL DEFAULT ST_GeomFromText('POINT(3 4)'),
|
||||||
@ -1414,6 +1417,9 @@ INSERT INTO t1 VALUES (1,1);
|
|||||||
ALTER TABLE t1 ADD COLUMN f INT AFTER a;
|
ALTER TABLE t1 ADD COLUMN f INT AFTER a;
|
||||||
ALTER TABLE t1 DROP b, DROP f;
|
ALTER TABLE t1 DROP b, DROP f;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(t TEXT NOT NULL, FULLTEXT(t)) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN t TEXT;
|
||||||
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1
|
CREATE TABLE t1
|
||||||
(id INT PRIMARY KEY, c2 INT UNIQUE,
|
(id INT PRIMARY KEY, c2 INT UNIQUE,
|
||||||
c3 POINT NOT NULL DEFAULT ST_GeomFromText('POINT(3 4)'),
|
c3 POINT NOT NULL DEFAULT ST_GeomFromText('POINT(3 4)'),
|
||||||
@ -2094,10 +2100,13 @@ INSERT INTO t1 VALUES (1,1);
|
|||||||
ALTER TABLE t1 ADD COLUMN f INT AFTER a;
|
ALTER TABLE t1 ADD COLUMN f INT AFTER a;
|
||||||
ALTER TABLE t1 DROP b, DROP f;
|
ALTER TABLE t1 DROP b, DROP f;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(t TEXT NOT NULL, FULLTEXT(t)) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN t TEXT;
|
||||||
|
DROP TABLE t1;
|
||||||
disconnect analyze;
|
disconnect analyze;
|
||||||
SELECT variable_value-@old_instant instants
|
SELECT variable_value-@old_instant instants
|
||||||
FROM information_schema.global_status
|
FROM information_schema.global_status
|
||||||
WHERE variable_name = 'innodb_instant_alter_column';
|
WHERE variable_name = 'innodb_instant_alter_column';
|
||||||
instants
|
instants
|
||||||
170
|
171
|
||||||
SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency;
|
SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency;
|
||||||
|
@ -633,6 +633,11 @@ ALTER TABLE t1 ADD COLUMN f INT AFTER a;
|
|||||||
ALTER TABLE t1 DROP b, DROP f;
|
ALTER TABLE t1 DROP b, DROP f;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# MDEV-18579 Assertion !ctx->online || num_fts_index == 0
|
||||||
|
eval CREATE TABLE t1(t TEXT NOT NULL, FULLTEXT(t)) $engine;
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN t TEXT;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
dec $format;
|
dec $format;
|
||||||
}
|
}
|
||||||
disconnect analyze;
|
disconnect analyze;
|
||||||
|
@ -89,10 +89,7 @@ int my_close(File fd, myf MyFlags)
|
|||||||
my_file_info[fd].type= UNOPEN;
|
my_file_info[fd].type= UNOPEN;
|
||||||
}
|
}
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
do
|
err= close(fd);
|
||||||
{
|
|
||||||
err= close(fd);
|
|
||||||
} while (err == -1 && errno == EINTR);
|
|
||||||
#else
|
#else
|
||||||
err= my_win_close(fd);
|
err= my_win_close(fd);
|
||||||
#endif
|
#endif
|
||||||
|
@ -6330,17 +6330,17 @@ Item_func_sp::fix_fields(THD *thd, Item **ref)
|
|||||||
|
|
||||||
if (m_sp->agg_type() == GROUP_AGGREGATE)
|
if (m_sp->agg_type() == GROUP_AGGREGATE)
|
||||||
{
|
{
|
||||||
List<Item> list;
|
|
||||||
list.empty();
|
|
||||||
for (uint i=0; i < arg_count; i++)
|
|
||||||
list.push_back(*(args+i));
|
|
||||||
|
|
||||||
Item_sum_sp *item_sp;
|
Item_sum_sp *item_sp;
|
||||||
Query_arena *arena, backup;
|
Query_arena *arena, backup;
|
||||||
arena= thd->activate_stmt_arena_if_needed(&backup);
|
arena= thd->activate_stmt_arena_if_needed(&backup);
|
||||||
|
|
||||||
if (arg_count)
|
if (arg_count)
|
||||||
|
{
|
||||||
|
List<Item> list;
|
||||||
|
for (uint i= 0; i < arg_count; i++)
|
||||||
|
list.push_back(args[i]);
|
||||||
item_sp= new (thd->mem_root) Item_sum_sp(thd, context, m_name, sp, list);
|
item_sp= new (thd->mem_root) Item_sum_sp(thd, context, m_name, sp, list);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
item_sp= new (thd->mem_root) Item_sum_sp(thd, context, m_name, sp);
|
item_sp= new (thd->mem_root) Item_sum_sp(thd, context, m_name, sp);
|
||||||
|
|
||||||
@ -6354,7 +6354,6 @@ Item_func_sp::fix_fields(THD *thd, Item **ref)
|
|||||||
if (err)
|
if (err)
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
list.empty();
|
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +81,6 @@ extern uchar *hp_search(HP_INFO *info,HP_KEYDEF *keyinfo,const uchar *key,
|
|||||||
uint nextflag);
|
uint nextflag);
|
||||||
extern uchar *hp_search_next(HP_INFO *info, HP_KEYDEF *keyinfo,
|
extern uchar *hp_search_next(HP_INFO *info, HP_KEYDEF *keyinfo,
|
||||||
const uchar *key, HASH_INFO *pos);
|
const uchar *key, HASH_INFO *pos);
|
||||||
extern ulong hp_hashnr(HP_KEYDEF *keyinfo,const uchar *key);
|
|
||||||
extern ulong hp_rec_hashnr(HP_KEYDEF *keyinfo,const uchar *rec);
|
extern ulong hp_rec_hashnr(HP_KEYDEF *keyinfo,const uchar *rec);
|
||||||
extern void hp_movelink(HASH_INFO *pos,HASH_INFO *next_link,
|
extern void hp_movelink(HASH_INFO *pos,HASH_INFO *next_link,
|
||||||
HASH_INFO *newlink);
|
HASH_INFO *newlink);
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "heapdef.h"
|
#include "heapdef.h"
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
|
|
||||||
|
static ulong hp_hashnr(HP_KEYDEF *keydef, const uchar *key);
|
||||||
/*
|
/*
|
||||||
Find out how many rows there is in the given range
|
Find out how many rows there is in the given range
|
||||||
|
|
||||||
@ -209,11 +210,9 @@ void hp_movelink(HASH_INFO *pos, HASH_INFO *next_link, HASH_INFO *newlink)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NEW_HASH_FUNCTION
|
|
||||||
|
|
||||||
/* Calc hashvalue for a key */
|
/* Calc hashvalue for a key */
|
||||||
|
|
||||||
ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key)
|
static ulong hp_hashnr(HP_KEYDEF *keydef, const uchar *key)
|
||||||
{
|
{
|
||||||
/*register*/
|
/*register*/
|
||||||
ulong nr=1, nr2=4;
|
ulong nr=1, nr2=4;
|
||||||
@ -350,136 +349,6 @@ ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec)
|
|||||||
return(nr);
|
return(nr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Fowler/Noll/Vo hash
|
|
||||||
*
|
|
||||||
* The basis of the hash algorithm was taken from an idea sent by email to the
|
|
||||||
* IEEE Posix P1003.2 mailing list from Phong Vo (kpv@research.att.com) and
|
|
||||||
* Glenn Fowler (gsf@research.att.com). Landon Curt Noll (chongo@toad.com)
|
|
||||||
* later improved on their algorithm.
|
|
||||||
*
|
|
||||||
* The magic is in the interesting relationship between the special prime
|
|
||||||
* 16777619 (2^24 + 403) and 2^32 and 2^8.
|
|
||||||
*
|
|
||||||
* This hash produces the fewest collisions of any function that we've seen so
|
|
||||||
* far, and works well on both numbers and strings.
|
|
||||||
*/
|
|
||||||
|
|
||||||
ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
Note, if a key consists of a combination of numeric and
|
|
||||||
a text columns, it most likely won't work well.
|
|
||||||
Making text columns work with NEW_HASH_FUNCTION
|
|
||||||
needs also changes in strings/ctype-xxx.c.
|
|
||||||
*/
|
|
||||||
ulong nr= 1, nr2= 4;
|
|
||||||
HA_KEYSEG *seg,*endseg;
|
|
||||||
|
|
||||||
for (seg=keydef->seg,endseg=seg+keydef->keysegs ; seg < endseg ; seg++)
|
|
||||||
{
|
|
||||||
uchar *pos=(uchar*) key;
|
|
||||||
key+=seg->length;
|
|
||||||
if (seg->null_bit)
|
|
||||||
{
|
|
||||||
key++;
|
|
||||||
if (*pos)
|
|
||||||
{
|
|
||||||
nr^= (nr << 1) | 1;
|
|
||||||
/* Add key pack length (2) to key for VARCHAR segments */
|
|
||||||
if (seg->type == HA_KEYTYPE_VARTEXT1)
|
|
||||||
key+= 2;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
if (seg->type == HA_KEYTYPE_TEXT)
|
|
||||||
{
|
|
||||||
seg->charset->coll->hash_sort(seg->charset, pos, ((uchar*)key)-pos,
|
|
||||||
&nr, &nr2);
|
|
||||||
}
|
|
||||||
else if (seg->type == HA_KEYTYPE_VARTEXT1) /* Any VARCHAR segments */
|
|
||||||
{
|
|
||||||
uint pack_length= 2; /* Key packing is constant */
|
|
||||||
uint length= uint2korr(pos);
|
|
||||||
seg->charset->coll->hash_sort(seg->charset, pos+pack_length, length,
|
|
||||||
&nr, &nr2);
|
|
||||||
key+= pack_length;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for ( ; pos < (uchar*) key ; pos++)
|
|
||||||
{
|
|
||||||
nr *=16777619;
|
|
||||||
nr ^=(uint) *pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef ONLY_FOR_HASH_DEBUGGING
|
|
||||||
DBUG_PRINT("exit", ("hash: 0x%lx", nr));
|
|
||||||
#endif
|
|
||||||
return(nr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Calc hashvalue for a key in a record */
|
|
||||||
|
|
||||||
ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec)
|
|
||||||
{
|
|
||||||
ulong nr= 1, nr2= 4;
|
|
||||||
HA_KEYSEG *seg,*endseg;
|
|
||||||
|
|
||||||
for (seg=keydef->seg,endseg=seg+keydef->keysegs ; seg < endseg ; seg++)
|
|
||||||
{
|
|
||||||
uchar *pos=(uchar*) rec+seg->start;
|
|
||||||
if (seg->null_bit)
|
|
||||||
{
|
|
||||||
if (rec[seg->null_pos] & seg->null_bit)
|
|
||||||
{
|
|
||||||
nr^= (nr << 1) | 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (seg->type == HA_KEYTYPE_TEXT)
|
|
||||||
{
|
|
||||||
uint char_length= seg->length; /* TODO: fix to use my_charpos() */
|
|
||||||
seg->charset->coll->hash_sort(seg->charset, pos, char_length,
|
|
||||||
&nr, &nr2);
|
|
||||||
}
|
|
||||||
else if (seg->type == HA_KEYTYPE_VARTEXT1) /* Any VARCHAR segments */
|
|
||||||
{
|
|
||||||
uint pack_length= seg->bit_start;
|
|
||||||
uint length= (pack_length == 1 ? (uint) *(uchar*) pos : uint2korr(pos));
|
|
||||||
seg->charset->coll->hash_sort(seg->charset, pos+pack_length,
|
|
||||||
length, &nr, &nr2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
uchar *end= pos+seg->length;
|
|
||||||
if (seg->type == HA_KEYTYPE_BIT && seg->bit_length)
|
|
||||||
{
|
|
||||||
uchar bits= get_rec_bits(rec + seg->bit_pos,
|
|
||||||
seg->bit_start, seg->bit_length);
|
|
||||||
nr *=16777619;
|
|
||||||
nr ^=(uint) bits;
|
|
||||||
end--;
|
|
||||||
}
|
|
||||||
for ( ; pos < end ; pos++)
|
|
||||||
{
|
|
||||||
nr *=16777619;
|
|
||||||
nr ^=(uint) *pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef ONLY_FOR_HASH_DEBUGGING
|
|
||||||
DBUG_PRINT("exit", ("hash: 0x%lx", nr));
|
|
||||||
#endif
|
|
||||||
return(nr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Compare keys for two records. Returns 0 if they are identical
|
Compare keys for two records. Returns 0 if they are identical
|
||||||
|
@ -1472,7 +1472,8 @@ instant_alter_column_possible(
|
|||||||
& (ALTER_STORED_COLUMN_ORDER | ALTER_DROP_STORED_COLUMN
|
& (ALTER_STORED_COLUMN_ORDER | ALTER_DROP_STORED_COLUMN
|
||||||
| ALTER_ADD_STORED_BASE_COLUMN)) {
|
| ALTER_ADD_STORED_BASE_COLUMN)) {
|
||||||
#if 1 // MDEV-17459: adjust fts_fetch_doc_from_rec() and friends; remove this
|
#if 1 // MDEV-17459: adjust fts_fetch_doc_from_rec() and friends; remove this
|
||||||
if (ib_table.fts) return false;
|
if (ib_table.fts || innobase_fulltext_exist(altered_table))
|
||||||
|
return false;
|
||||||
#endif
|
#endif
|
||||||
#if 1 // MDEV-17468: fix bugs with indexed virtual columns & remove this
|
#if 1 // MDEV-17468: fix bugs with indexed virtual columns & remove this
|
||||||
for (const dict_index_t* index = ib_table.indexes.start;
|
for (const dict_index_t* index = ib_table.indexes.start;
|
||||||
@ -6408,11 +6409,7 @@ new_clustered_failed:
|
|||||||
|| !ctx->new_table->persistent_autoinc);
|
|| !ctx->new_table->persistent_autoinc);
|
||||||
|
|
||||||
if (ctx->need_rebuild() && instant_alter_column_possible(
|
if (ctx->need_rebuild() && instant_alter_column_possible(
|
||||||
*user_table, ha_alter_info, old_table, altered_table)
|
*user_table, ha_alter_info, old_table, altered_table)) {
|
||||||
#if 1 // MDEV-17459: adjust fts_fetch_doc_from_rec() and friends; remove this
|
|
||||||
&& !innobase_fulltext_exist(altered_table)
|
|
||||||
#endif
|
|
||||||
) {
|
|
||||||
for (uint a = 0; a < ctx->num_to_add_index; a++) {
|
for (uint a = 0; a < ctx->num_to_add_index; a++) {
|
||||||
ctx->add_index[a]->table = ctx->new_table;
|
ctx->add_index[a]->table = ctx->new_table;
|
||||||
ctx->add_index[a] = dict_index_add_to_cache(
|
ctx->add_index[a] = dict_index_add_to_cache(
|
||||||
|
@ -3071,10 +3071,12 @@ recv_init_missing_space(dberr_t err, const recv_spaces_t::const_iterator& i)
|
|||||||
{
|
{
|
||||||
if (srv_operation == SRV_OPERATION_RESTORE
|
if (srv_operation == SRV_OPERATION_RESTORE
|
||||||
|| srv_operation == SRV_OPERATION_RESTORE_EXPORT) {
|
|| srv_operation == SRV_OPERATION_RESTORE_EXPORT) {
|
||||||
ib::warn() << "Tablespace " << i->first << " was not"
|
if (i->second.name.find(TEMP_TABLE_PATH_PREFIX) != std::string::npos) {
|
||||||
" found at " << i->second.name << " when"
|
ib::warn() << "Tablespace " << i->first << " was not"
|
||||||
" restoring a (partial?) backup. All redo log"
|
" found at " << i->second.name << " when"
|
||||||
" for this file will be ignored!";
|
" restoring a (partial?) backup. All redo log"
|
||||||
|
" for this file will be ignored!";
|
||||||
|
}
|
||||||
return(err);
|
return(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user