mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
0f6047e455
The patch for WL 1563 added a new duplicate key error message so that the key name could be provided instead of the key number. But the error code for the new message was used even though that did not need to change. This could cause unnecessary problems for applications that used the old ER_DUP_ENTRY error code to detect duplicate key errors. mysql-test/t/auto_increment.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/create.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/create_select_tmp.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/ctype_ucs2_def.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/ctype_utf8.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/delayed.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/heap.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/heap_btree.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/heap_hash.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/innodb.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/insert_select.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/insert_update.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/join_outer.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/key.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/merge.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/myisam.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/ndb_basic.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/ndb_charset.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/ndb_index_unique.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/ndb_insert.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/ndb_replace.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/ndb_update.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/replace.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/rpl_err_ignoredtable.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/rpl_ndb_do_table.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/rpl_row_create_table.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/rpl_sp.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/show_check.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/sp-error.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/sp.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/sp_trans.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/sp_trans_log.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/temp_table.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/type_binary.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/type_bit.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/type_bit_innodb.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/type_blob.test: Update ER_DUP_ENTRY-related error message values mysql-test/t/type_varchar.test: Update ER_DUP_ENTRY-related error message values mysql-test/r/create.result: Update ER_DUP_ENTRY-related error message values mysql-test/r/rpl_sp.result: Update ER_DUP_ENTRY-related error message values mysql-test/r/sp.result: Update ER_DUP_ENTRY-related error message values mysql-test/include/mix1.inc: Update ER_DUP_ENTRY-related error message values mysql-test/include/mix2.inc: Update ER_DUP_ENTRY-related error message values mysql-test/include/ps_modify.inc: Update ER_DUP_ENTRY-related error message values mysql-test/include/query_cache.inc: Update ER_DUP_ENTRY-related error message values mysql-test/include/varchar.inc: Update ER_DUP_ENTRY-related error message values mysql-test/extra/binlog_tests/insert_select-binlog.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_auto_increment.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_foreign_key.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_insert_delayed.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_insert_id.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_insert_id_pk.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_loaddata.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_row_basic.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test: Update ER_DUP_ENTRY-related error message values mysql-test/extra/rpl_tests/rpl_trig004.test: Update ER_DUP_ENTRY-related error message values sql/handler.cc: Restore use of ER_DUP_ENTRY error code even when ER_DUP_ENTRY_WITH_KEY_NAME error message is being used. (Bug #28842)
286 lines
8.8 KiB
Text
286 lines
8.8 KiB
Text
#
|
|
# Test of heap tables.
|
|
#
|
|
|
|
--disable_warnings
|
|
drop table if exists t1,t2;
|
|
--enable_warnings
|
|
|
|
create table t1 (a int not null,b int not null, primary key using HASH (a)) engine=heap comment="testing heaps" avg_row_length=100 min_rows=1 max_rows=100;
|
|
insert into t1 values(1,1),(2,2),(3,3),(4,4);
|
|
delete from t1 where a=1 or a=0;
|
|
#show table status like "t1";
|
|
show keys from t1;
|
|
select * from t1;
|
|
select * from t1 where a=4;
|
|
update t1 set b=5 where a=4;
|
|
update t1 set b=b+1 where a>=3;
|
|
replace t1 values (3,3);
|
|
select * from t1;
|
|
alter table t1 add c int not null, add key using HASH (c,a);
|
|
drop table t1;
|
|
|
|
create table t1 (a int not null,b int not null, primary key using HASH (a)) engine=heap comment="testing heaps";
|
|
insert into t1 values(1,1),(2,2),(3,3),(4,4);
|
|
delete from t1 where a > 0;
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
create table t1 (a int not null,b int not null, primary key using HASH (a)) engine=heap comment="testing heaps";
|
|
insert into t1 values(1,1),(2,2),(3,3),(4,4);
|
|
alter table t1 modify a int not null auto_increment, engine=myisam, comment="new myisam table";
|
|
#show table status like "t1";
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
create table t1 (a int not null) engine=heap;
|
|
insert into t1 values (869751),(736494),(226312),(802616),(728912);
|
|
select * from t1 where a > 736494;
|
|
alter table t1 add unique uniq_id using HASH (a);
|
|
select * from t1 where a > 736494;
|
|
select * from t1 where a = 736494;
|
|
select * from t1 where a=869751 or a=736494;
|
|
select * from t1 where a in (869751,736494,226312,802616);
|
|
alter table t1 engine=myisam;
|
|
explain select * from t1 where a in (869751,736494,226312,802616);
|
|
drop table t1;
|
|
|
|
create table t1 (x int not null, y int not null, key x using HASH (x), unique y using HASH (y))
|
|
engine=heap;
|
|
insert into t1 values (1,1),(2,2),(1,3),(2,4),(2,5),(2,6);
|
|
select * from t1 where x=1;
|
|
select * from t1,t1 as t2 where t1.x=t2.y;
|
|
explain select * from t1,t1 as t2 where t1.x=t2.y;
|
|
drop table t1;
|
|
|
|
create table t1 (a int) engine=heap;
|
|
insert into t1 values(1);
|
|
select max(a) from t1;
|
|
drop table t1;
|
|
|
|
CREATE TABLE t1 ( a int not null default 0, b int not null default 0, key using HASH (a), key using HASH (b) ) ENGINE=HEAP;
|
|
insert into t1 values(1,1),(1,2),(2,3),(1,3),(1,4),(1,5),(1,6);
|
|
select * from t1 where a=1;
|
|
insert into t1 values(1,1),(1,2),(2,3),(1,3),(1,4),(1,5),(1,6);
|
|
select * from t1 where a=1;
|
|
drop table t1;
|
|
|
|
create table t1 (id int unsigned not null, primary key using HASH (id)) engine=HEAP;
|
|
insert into t1 values(1);
|
|
select max(id) from t1;
|
|
insert into t1 values(2);
|
|
select max(id) from t1;
|
|
replace into t1 values(1);
|
|
drop table t1;
|
|
|
|
create table t1 (n int) engine=heap;
|
|
drop table t1;
|
|
|
|
create table t1 (n int) engine=heap;
|
|
drop table if exists t1;
|
|
|
|
# Test of non unique index
|
|
|
|
CREATE table t1(f1 int not null,f2 char(20) not
|
|
null,index(f2)) engine=heap;
|
|
INSERT into t1 set f1=12,f2="bill";
|
|
INSERT into t1 set f1=13,f2="bill";
|
|
INSERT into t1 set f1=14,f2="bill";
|
|
INSERT into t1 set f1=15,f2="bill";
|
|
INSERT into t1 set f1=16,f2="ted";
|
|
INSERT into t1 set f1=12,f2="ted";
|
|
INSERT into t1 set f1=12,f2="ted";
|
|
INSERT into t1 set f1=12,f2="ted";
|
|
INSERT into t1 set f1=12,f2="ted";
|
|
delete from t1 where f2="bill";
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
#
|
|
# Test when using part key searches
|
|
#
|
|
|
|
create table t1 (btn char(10) not null, key using HASH (btn)) engine=heap;
|
|
insert into t1 values ("hello"),("hello"),("hello"),("hello"),("hello"),("a"),("b"),("c"),("d"),("e"),("f"),("g"),("h"),("i");
|
|
explain select * from t1 where btn like "q%";
|
|
select * from t1 where btn like "q%";
|
|
alter table t1 add column new_col char(1) not null, add key using HASH (btn,new_col), drop key btn;
|
|
update t1 set new_col=left(btn,1);
|
|
explain select * from t1 where btn="a";
|
|
explain select * from t1 where btn="a" and new_col="a";
|
|
drop table t1;
|
|
|
|
#
|
|
# Test of NULL keys
|
|
#
|
|
|
|
CREATE TABLE t1 (
|
|
a int default NULL,
|
|
b int default NULL,
|
|
KEY a using HASH (a),
|
|
UNIQUE b using HASH (b)
|
|
) engine=heap;
|
|
INSERT INTO t1 VALUES (NULL,99),(99,NULL),(1,1),(2,2),(1,3);
|
|
SELECT * FROM t1 WHERE a=NULL;
|
|
explain SELECT * FROM t1 WHERE a IS NULL;
|
|
SELECT * FROM t1 WHERE a<=>NULL;
|
|
SELECT * FROM t1 WHERE b=NULL;
|
|
explain SELECT * FROM t1 WHERE b IS NULL;
|
|
SELECT * FROM t1 WHERE b<=>NULL;
|
|
|
|
--error ER_DUP_ENTRY
|
|
INSERT INTO t1 VALUES (1,3);
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Test when deleting all rows
|
|
#
|
|
|
|
CREATE TABLE t1 (a int not null, primary key using HASH (a)) engine=heap;
|
|
INSERT into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11);
|
|
DELETE from t1 where a < 100;
|
|
SELECT * from t1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
#
|
|
# Hash index # records estimate test
|
|
#
|
|
create table t1
|
|
(
|
|
a char(8) not null,
|
|
b char(20) not null,
|
|
c int not null,
|
|
key (a)
|
|
) engine=heap;
|
|
|
|
insert into t1 values ('aaaa', 'prefill-hash=5',0);
|
|
insert into t1 values ('aaab', 'prefill-hash=0',0);
|
|
insert into t1 values ('aaac', 'prefill-hash=7',0);
|
|
insert into t1 values ('aaad', 'prefill-hash=2',0);
|
|
insert into t1 values ('aaae', 'prefill-hash=1',0);
|
|
insert into t1 values ('aaaf', 'prefill-hash=4',0);
|
|
insert into t1 values ('aaag', 'prefill-hash=3',0);
|
|
insert into t1 values ('aaah', 'prefill-hash=6',0);
|
|
|
|
explain select * from t1 where a='aaaa';
|
|
explain select * from t1 where a='aaab';
|
|
explain select * from t1 where a='aaac';
|
|
explain select * from t1 where a='aaad';
|
|
insert into t1 select * from t1;
|
|
|
|
# avoid statistics differences between normal and ps-protocol tests
|
|
flush tables;
|
|
explain select * from t1 where a='aaaa';
|
|
explain select * from t1 where a='aaab';
|
|
explain select * from t1 where a='aaac';
|
|
explain select * from t1 where a='aaad';
|
|
|
|
# a known effect: table reload causes statistics to be updated:
|
|
flush tables;
|
|
explain select * from t1 where a='aaaa';
|
|
explain select * from t1 where a='aaab';
|
|
explain select * from t1 where a='aaac';
|
|
explain select * from t1 where a='aaad';
|
|
|
|
# Check if delete_all_rows() updates #hash_buckets
|
|
create table t2 as select * from t1;
|
|
delete from t1;
|
|
insert into t1 select * from t2;
|
|
explain select * from t1 where a='aaaa';
|
|
explain select * from t1 where a='aaab';
|
|
explain select * from t1 where a='aaac';
|
|
explain select * from t1 where a='aaad';
|
|
drop table t1, t2;
|
|
|
|
|
|
# Btree and hash index use costs.
|
|
create table t1 (
|
|
id int unsigned not null primary key auto_increment,
|
|
name varchar(20) not null,
|
|
index heap_idx(name),
|
|
index btree_idx using btree(name)
|
|
) engine=heap;
|
|
|
|
create table t2 (
|
|
id int unsigned not null primary key auto_increment,
|
|
name varchar(20) not null,
|
|
index btree_idx using btree(name),
|
|
index heap_idx(name)
|
|
) engine=heap;
|
|
|
|
insert into t1 (name) values ('Matt'), ('Lilu'), ('Corbin'), ('Carly'),
|
|
('Suzy'), ('Hoppy'), ('Burrito'), ('Mimi'), ('Sherry'), ('Ben'), ('Phil'),
|
|
('Emily'), ('Mike');
|
|
insert into t2 select * from t1;
|
|
explain select * from t1 where name='matt';
|
|
explain select * from t2 where name='matt';
|
|
|
|
explain select * from t1 where name='Lilu';
|
|
explain select * from t2 where name='Lilu';
|
|
|
|
explain select * from t1 where name='Phil';
|
|
explain select * from t2 where name='Phil';
|
|
|
|
explain select * from t1 where name='Lilu';
|
|
explain select * from t2 where name='Lilu';
|
|
|
|
insert into t1 (name) select name from t2;
|
|
insert into t1 (name) select name from t2;
|
|
insert into t1 (name) select name from t2;
|
|
insert into t1 (name) select name from t2;
|
|
insert into t1 (name) select name from t2;
|
|
insert into t1 (name) select name from t2;
|
|
flush tables;
|
|
select count(*) from t1 where name='Matt';
|
|
explain select * from t1 ignore index (btree_idx) where name='matt';
|
|
show index from t1;
|
|
|
|
show index from t1;
|
|
|
|
create table t3
|
|
(
|
|
a varchar(20) not null,
|
|
b varchar(20) not null,
|
|
key (a,b)
|
|
) engine=heap;
|
|
insert into t3 select name, name from t1;
|
|
show index from t3;
|
|
show index from t3;
|
|
|
|
# test rec_per_key use for joins.
|
|
explain select * from t1 ignore key(btree_idx), t3 where t1.name='matt' and t3.a = concat('',t1.name) and t3.b=t1.name;
|
|
|
|
drop table t1, t2, t3;
|
|
|
|
# Fix for BUG#8371: wrong rec_per_key value for hash index on temporary table
|
|
create temporary table t1 ( a int, index (a) ) engine=memory;
|
|
insert into t1 values (1),(2),(3),(4),(5);
|
|
select a from t1 where a in (1,3);
|
|
explain select a from t1 where a in (1,3);
|
|
drop table t1;
|
|
|
|
--echo End of 4.1 tests
|
|
|
|
#
|
|
# Bug #27643: query failed : 1114 (The table '' is full)
|
|
#
|
|
# Check that HASH indexes disregard trailing spaces when comparing
|
|
# strings with binary collations
|
|
|
|
CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
|
|
col2 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
|
|
UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
|
|
INSERT INTO t1 VALUES('A', 'A');
|
|
--error ER_DUP_ENTRY
|
|
INSERT INTO t1 VALUES('A ', 'A ');
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
|
|
col2 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
|
|
UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
|
|
INSERT INTO t1 VALUES('A', 'A');
|
|
--error ER_DUP_ENTRY
|
|
INSERT INTO t1 VALUES('A ', 'A ');
|
|
DROP TABLE t1;
|
|
|
|
--echo End of 5.0 tests
|