summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/handler/heap.test
blob: d60f92daa76b0f1d64043bc8b7efbf94a1785f4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# test of HANDLER with HEAP tables
#

let $engine_type= MEMORY;

--source init.inc
--source handler.inc

#
# Test what happens if table is changed (Unique test for HEAP)
#

connect (con1,localhost,root,,);
connection default;

CREATE TABLE t1(a INT, b INT, KEY(a), KEY b using btree (b), KEY ab using btree(a, b)) engine=memory;

INSERT INTO t1 VALUES (2, 20), (2,20), (1, 10), (4, 40), (3, 30), (5,50), (6,50);

HANDLER t1 OPEN;
HANDLER t1 READ a=(2) limit 3;
HANDLER t1 READ a PREV;
HANDLER t1 READ a PREV;
HANDLER t1 READ a PREV;
HANDLER t1 READ b>=(20) limit 3;
HANDLER t1 READ b PREV;
HANDLER t1 READ b PREV LIMIT 2;
HANDLER t1 READ ab=(3,30) limit 3;
HANDLER t1 READ ab>=(3,30) limit 3;

# Test FIRST/LAST on hash and btree keys
--error ER_ILLEGAL_HA
HANDLER t1 READ a FIRST;
--error ER_ILLEGAL_HA
HANDLER t1 READ a LAST;
HANDLER t1 READ b FIRST LIMIT 2;
HANDLER t1 READ ab LAST LIMIT 2; 

# Table scan
HANDLER t1 READ FIRST LIMIT 10;
# Index scan
HANDLER t1 READ b FIRST;
insert into t1 values (7,50);
--error ER_CHECKREAD
HANDLER t1 READ b NEXT;

HANDLER t1 READ b FIRST;
connection con1;
insert into t1 values (7,50);
connection default;
--error ER_CHECKREAD
HANDLER t1 READ b NEXT;

HANDLER t1 READ FIRST;
connection con1;
insert into t1 values (8,50);
connection default;
HANDLER t1 READ NEXT;
connection con1;
delete from t1 where a=3;
connection default;
HANDLER t1 READ NEXT LIMIT 2;
connection con1;
delete from t1;
connection default;
--error ER_CHECKREAD
HANDLER t1 READ NEXT LIMIT 2;
HANDLER t1 CLOSE;
DROP TABLE t1;
disconnect con1;

#
# LP#702786 Two handler read f1 next gives different errors
#
create table t1 (f1 integer not null, key (f1)) engine=Memory;
insert into t1 values (1);
HANDLER t1 OPEN;
--error 1031
HANDLER t1 READ f1 NEXT;
--error 1031
HANDLER t1 READ f1 NEXT;
--error 1031
HANDLER t1 READ f1 NEXT;
HANDLER t1 CLOSE;
DROP TABLE t1;

--echo End of 5.3 tests

--echo #
--echo # MDEV-15813 ASAN use-after-poison in hp_hashnr upon
--echo #            HANDLER READ on a versioned HEAP table
--echo #

CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, CONSTRAINT PRIMARY KEY (a, b), UNIQUE ba(b, a) USING HASH) ENGINE=HEAP;
INSERT INTO t1 VALUES (1, 10), (2, 20), (3,30), (4,40);
HANDLER t1 OPEN AS m;
HANDLER m READ `PRIMARY`= (3,30);
--error ER_KEY_DOESNT_SUPPORT
HANDLER m READ `PRIMARY`> (3,30);
HANDLER m READ `ba`= (30,3);
--error ER_KEY_DOESNT_SUPPORT
HANDLER m READ `ba`= (30);
HANDLER m CLOSE;
DROP TABLE t1;