# Testing of potential problems in Aria and alter table -- source include/have_maria.inc -- source include/have_innodb.inc -- source include/have_sequence.inc drop table if exists t1; # # MDEV-4970 Wrong result with Aria table populated with disabled keys # CREATE TABLE t1 (pk INT, d DATETIME, PRIMARY KEY(pk), KEY(d)) ENGINE=Aria; ALTER TABLE t1 DISABLE KEYS; INSERT INTO t1 VALUES (1,'2000-01-01 22:22:22'),(2,'2012-12-21 12:12:12'); INSERT INTO t1 VALUES (3, '2008-07-24'); ALTER TABLE t1 ENABLE KEYS; SELECT t1a.pk FROM t1 AS t1a LEFT JOIN t1 AS t1b ON t1a.pk = t1b.pk; SELECT * FROM t1 AS t1a LEFT JOIN t1 AS t1b ON t1a.pk = t1b.pk; DROP TABLE t1; CREATE TABLE t1 (pk INT PRIMARY KEY, i INT, KEY(i)) ENGINE=Aria; ALTER TABLE t1 DISABLE KEYS; INSERT INTO t1 VALUES (1,11); INSERT INTO t1 VALUES (2,0),(3,33),(4,0),(5,55),(6,66),(7,0),(8,88),(9,99); ALTER TABLE t1 ENABLE KEYS; SELECT * FROM t1 WHERE i = 0 OR pk BETWEEN 6 AND 10; DROP TABLE t1; # # MDEV-14943 # Assertion `block->type == PAGECACHE_EMPTY_PAGE || block->type == type || # type == PAGECACHE_LSN_PAGE || type == PAGECACHE_READ_UNKNOWN_PAGE || # block->type == PAGECACHE_READ_UNKNOWN_PAGE' failed in pagecache_read upon # CREATE ... SELECT from Aria table # CREATE TABLE t1 (f INT) ENGINE=Aria transactional=1; SHOW CREATE TABLE t1; INSERT INTO t1 VALUES (1),(2); --error ER_BAD_FIELD_ERROR ALTER TABLE t1 ORDER BY unknown_column; SHOW CREATE TABLE t1; CREATE TABLE t2 SELECT * FROM t1; DROP TABLE t1, t2; --echo # --echo # MDEV-19055 Assertion `(_my_thread_var())->thr_errno != 0' failed in pagecache_read --echo # --disable_warnings CREATE OR REPLACE TABLE t1 (x INT) ENGINE=Aria; CREATE TEMPORARY TABLE t2 (a TIME) ENGINE=Aria; ALTER TABLE t2 ADD b DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP; ALTER TABLE t2 ADD CHECK (b = 4); INSERT IGNORE INTO t2 () VALUES (),(),(),(); ALTER IGNORE TABLE t2 ADD c INT; SELECT count(a),sum(a) FROM t2; DELETE FROM t2 ORDER BY c LIMIT 1; INSERT IGNORE INTO t2 SELECT * FROM t2; OPTIMIZE TABLE t2; SELECT count(a),sum(a) FROM t2; INSERT IGNORE INTO t2 SELECT * FROM t2; SET SQL_MODE= 'STRICT_ALL_TABLES'; SELECT count(a),sum(a) FROM t2; --error ER_TRUNCATED_WRONG_VALUE ALTER TABLE t2 CHANGE IF EXISTS d c INT; SELECT count(a),sum(a) FROM t2; ALTER IGNORE TABLE t2 ADD IF NOT EXISTS e BIT; ALTER TABLE t1 MODIFY IF EXISTS xx INT; INSERT IGNORE INTO t2 () VALUES (),(),(),(); SELECT count(a),sum(a) FROM t2; --enable_warnings check table t1; check table t2; DROP TABLE t1,t2; --echo # --echo # MDEV-17576 --echo # Assertion `share->reopen == 1' failed in maria_extra upon ALTER on --echo # Aria table with triggers and locks --echo # CREATE TABLE t1 (a INT) ENGINE=Aria; CREATE TRIGGER tr BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t1 SELECT * FROM t1; LOCK TABLE t1 WRITE; ALTER TABLE t1 FORCE, LOCK=EXCLUSIVE; DROP TRIGGER tr; DROP TABLE t1; --echo # --echo # End of 10.2 test --echo # --echo # --echo # MDEV-17665 Assertion `!share || share->page_type == PAGECACHE_LSN_PAGE', --echo # `type != PAGECACHE_READ_UNKNOWN_PAGE' and similar ones upon concurrent --echo # Aria operations --echo # CREATE TABLE t1 (pk INT PRIMARY KEY, a INT, KEY(a)) ENGINE=Aria; ALTER TABLE t1 DISABLE KEYS; INSERT INTO t1 SELECT seq, seq FROM seq_1_to_100; --connect (con1,localhost,root,,test) --connect (con2,localhost,root,,test) --send INSERT INTO t1 SELECT seq, seq FROM seq_1_to_100; --connection con1 --send FLUSH TABLES; --connection default --error ER_WRONG_VALUE_COUNT_ON_ROW INSERT INTO t1 SELECT 1; # Cleanup --connection con2 --error ER_DUP_ENTRY --reap --disconnect con2 --connection con1 --reap --disconnect con1 --connection default DROP TABLE t1; --echo # --echo # MDEV-22674 Server crash in compare_bin, ASAN heap-buffer-overflow in --echo # _ma_dpointer, Assertion `!info->s->have_versioning || --echo # info->s->lock_key_trees' failed in restore_table_state_after_repair --echo # CREATE TABLE t1 (id INT, d DATETIME, PRIMARY KEY(d,id),INDEX(d)) ENGINE=Aria; INSERT INTO t1 SELECT seq, NOW() FROM seq_1_to_500; CREATE TABLE t2 (a INT) ENGINE=InnoDB; INSERT INTO t2 VALUES (1); --connect (con1,localhost,root,,test) ALTER TABLE t1 DISABLE KEYS; --send INSERT INTO t1 (id) SELECT b FROM t2; --connection default --error ER_WRONG_VALUE_COUNT_ON_ROW INSERT INTO t1 SELECT a FROM t2; # Cleanup --connection con1 --error ER_BAD_FIELD_ERROR --reap --disconnect con1 --connection default drop table t1, t2; --echo # This is also in MDEV-22674 CREATE TABLE t1 (id INT, d DATETIME, PRIMARY KEY(d,id),INDEX(d)) ENGINE=Aria; INSERT INTO t1 SELECT seq, NOW() FROM seq_1_to_500; CREATE TABLE t2 (a INT) ENGINE=InnoDB; INSERT INTO t2 VALUES (1); ALTER TABLE t1 DISABLE KEYS; --error ER_BAD_FIELD_ERROR INSERT INTO t1 (id) SELECT b FROM t2; --error ER_WRONG_VALUE_COUNT_ON_ROW INSERT INTO t1 SELECT a FROM t2; SELECT COUNT(*) FROM t1; DROP TABLE t1,t2; --echo # --echo # MDEV-23296 Assertion `block->type == PAGECACHE_EMPTY_PAGE || --echo # block->type == PAGECACHE_READ_UNKNOWN_PAGE || block->type == type || --echo # (block->type == PAGECACHE_PLAIN_PAGE && type == PAGECACHE_LSN_PAGE)' --echo # with aria_max_sort_file_size --echo # SET @max_size.save= @@aria_max_sort_file_size; SET GLOBAL aria_max_sort_file_size= 0; CREATE TABLE t1 (pk INT PRIMARY KEY, a CHAR(255), KEY(a)) ENGINE=Aria; ALTER TABLE t1 DISABLE KEYS; INSERT INTO t1 VALUES (1,'foo'),(2,'bar'); ALTER TABLE t1 ENABLE KEYS; INSERT INTO t1 VALUES (3,'nice try'); SELECT * FROM t1; DROP TABLE t1; SET GLOBAL aria_max_sort_file_size= @max_size.save; --echo # --echo # End of 10.4 test --echo # --echo # --echo # MDEV-25505 Assertion `old_flags == ((my_flags & 0x10000U) ? 1 : 0)' --echo # failed in my_realloc --echo # CREATE TABLE t1 (pk int, c text, primary key (pk), key(c(32))) ENGINE=Aria ROW_FORMAT=DYNAMIC; ALTER TABLE t1 DISABLE KEYS; INSERT INTO t1 VALUES (1, 'Nine chars or more'); ALTER TABLE t1 ENABLE KEYS; DROP TABLE t1; --echo # --echo # MDEV-25923 Memory not freed or Assertion `old_flags == ((my_flags & --echo # 0x10000U) ? 1 : 0)' failed in my_realloc upon ALTER on Aria table --echo # with GIS column --echo # CREATE TABLE t1 (pk INT PRIMARY KEY, a POINT DEFAULT ST_GEOMFROMTEXT('Point(1 1)')) ENGINE=Aria; INSERT INTO t1 (pk) SELECT seq FROM seq_1_to_100; SET @old_threads= @@SESSION.aria_repair_threads; SET SESSION aria_repair_threads= 2; ALTER TABLE t1 ROW_FORMAT=DYNAMIC; DROP TABLE t1; --echo # --echo # MDEV-33562: Assertion `(old_flags & 1) == ((my_flags & 0x10000U) ? --echo # 1 : 0)' failed in my_realloc from sort_get_next_record on INSERT --echo # SET @old_mode= @@SESSION.sql_mode; SET sql_mode=''; CREATE TEMPORARY TABLE t (b TEXT, INDEX s(b(300))) ROW_FORMAT=DYNAMIC ENGINE=Aria; INSERT INTO t VALUES (REPEAT ('a',10000000)); CREATE TABLE ti LIKE t; INSERT INTO ti SELECT * FROM t; DROP TABLE t, ti; SET SESSION aria_repair_threads= @old_threads; SET SESSION sql_mode= @old_mode;