~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
## Bug#12713 (Error in a stored function called from a SELECT doesn't cause
2
##    ROLLBACK of statem)
3
4
##
5
## Pre-Requisites :
6
## - $engine_type should be set
7
##
8
9
eval set storage_engine = $engine_type;
10
set autocommit=1;
11
12
--disable_warnings
13
drop table if exists t1;
14
drop table if exists t2;
15
drop table if exists t3;
16
--enable_warnings
17
18
create table t1 (a int);
19
create table t2 (a int unique);
20
create table t3 (a int);
21
22
insert into t1 (a) values (1), (2);
23
insert into t3 (a) values (1), (2);
24
25
##============================================================================
26
## Design notes
27
##
28
## In each case, statement rollback is expected.
29
## for transactional engines, the rollback should be properly executed
30
## for non transactional engines, the rollback may cause warnings.
31
##
32
## The test pattern is as follows
33
## - insert 1000+N
34
## - statement with a side effect, that fails to insert N twice
35
## - a statement rollback is expected (expecting 1 row 1000+N only) in t2
36
## - a rollback is performed
37
## - expecting a clean table t2.
38
##============================================================================
39
40
insert into t2 (a) values (1001);
520.1.10 by Brian Aker
Adding back more tests.
41
insert into t1 (a) values (1);
1 by brian
clean slate
42
select * from t2;
43
rollback;
44
select * from t2;
45
46
insert into t2 (a) values (1002);
47
select * from t2;
48
rollback;
49
select * from t2;
50
51
insert into t2 (a) values (1003);
520.1.10 by Brian Aker
Adding back more tests.
52
update t1 set a= a + 3;
1 by brian
clean slate
53
select * from t2;
54
rollback;
55
select * from t2;
56
57
insert into t2 (a) values (1004);
520.1.10 by Brian Aker
Adding back more tests.
58
update t1, t3 set t1.a = 0, t3.a = 0 where (4 = 4) and (t1.a = t3.a);
1 by brian
clean slate
59
select * from t2;
60
rollback;
61
select * from t2;
62
63
insert into t2 (a) values (1005);
520.1.10 by Brian Aker
Adding back more tests.
64
delete from t1 where (a = 5);
1 by brian
clean slate
65
select * from t2;
66
rollback;
67
select * from t2;
68
69
insert into t2 (a) values (1006);
520.1.10 by Brian Aker
Adding back more tests.
70
delete from t1, t3 using t1, t3 where (6 = 6) ;
1 by brian
clean slate
71
select * from t2;
72
rollback;
73
select * from t2;
74
75
insert into t2 (a) values (1007);
520.1.10 by Brian Aker
Adding back more tests.
76
replace t1 values (7);
1 by brian
clean slate
77
select * from t2;
78
rollback;
79
select * from t2;
80
81
insert into t2 (a) values (1008);
520.1.10 by Brian Aker
Adding back more tests.
82
replace into t3 (a) select 8 from t1;
1 by brian
clean slate
83
select * from t2;
84
rollback;
85
select * from t2;
86
87
insert into t2 (a) values (1009);
520.1.10 by Brian Aker
Adding back more tests.
88
select 9 from t1 ;
1 by brian
clean slate
89
select * from t2;
90
rollback;
91
select * from t2;
92
93
insert into t2 (a) values (1010);
94
select * from t2;
95
rollback;
96
select * from t2;
97
98
insert into t2 (a) values (1011);
99
select * from t2;
100
rollback;
101
select * from t2;
102
103
select * from t2;
104
105
insert into t2 (a) values (1013);
106
select * from t2;
107
rollback;
108
select * from t2;
109
110
insert into t2 (a) values (1014);
520.1.10 by Brian Aker
Adding back more tests.
111
show open tables;
1 by brian
clean slate
112
select * from t2;
113
rollback;
114
select * from t2;
115
116
insert into t2 (a) values (1015);
117
select * from t2;
118
rollback;
119
select * from t2;
120
121
insert into t2 (a) values (1016);
122
select * from t2;
123
rollback;
124
select * from t2;
125
126
insert into t2 (a) values (1017);
127
select * from t2;
128
rollback;
129
select * from t2;
130
131
insert into t2 (a) values (1018);
132
select * from t2;
133
rollback;
134
select * from t2;
135
136
insert into t2 (a) values (1019);
137
select * from t2;
138
rollback;
139
select * from t2;
140
141
select * from t2;
142
rollback;
143
select * from t2;
144
145
insert into t2 (a) values (1021);
146
select * from t2;
147
rollback;
148
select * from t2;
149
150
insert into t2 (a) values (1022);
151
select * from t2;
152
rollback;
153
select * from t2;
154
155
insert into t2 (a) values (1023);
156
select * from t2;
157
rollback;
158
select * from t2;
159
160
--echo =======================================================================
161
--echo Testing select_to_file
162
--echo =======================================================================
163
164
insert into t2 (a) values (1025);
165
166
--replace_result $MYSQLTEST_VARDIR ..
520.1.10 by Brian Aker
Adding back more tests.
167
eval select 25 into outfile "$MYSQLTEST_VARDIR/tmp/dml.out" from t1;
1 by brian
clean slate
168
select * from t2;
169
rollback;
170
select * from t2;
171
--remove_file $MYSQLTEST_VARDIR/tmp/dml.out
172
173
insert into t2 (a) values (1026);
174
--replace_result $MYSQLTEST_VARDIR ..
520.1.10 by Brian Aker
Adding back more tests.
175
--error 1366
176
eval load data infile "../std_data_ln/words.dat" into table t1 (a) set a:=26;
1 by brian
clean slate
177
178
select * from t2;
179
rollback;
180
select * from t2;
181
182
--echo =======================================================================
183
--echo Testing select_dumpvar
184
--echo =======================================================================
185
186
insert into t2 (a) values (1027);
520.1.10 by Brian Aker
Adding back more tests.
187
select 27 into @foo;
188
select * from t2;
1 by brian
clean slate
189
rollback;
190
select * from t2;
191
192
--echo =======================================================================
193
--echo Cleanup
194
--echo =======================================================================
195
196
set autocommit=default;
197
198
drop table t1;
199
drop table t2;
200
drop table t3;
201
--echo #
202
--echo # Bug#12713 Error in a stored function called from a SELECT doesn't
203
--echo # cause ROLLBACK of statem
204
--echo #
205
--echo # Verify that two-phase commit is not issued for read-only
206
--echo # transactions.
207
--echo #
208
--echo # Verify that two-phase commit is issued for read-write transactions,
209
--echo # even if the change is done inside a stored function called from
210
--echo # SELECT or SHOW statement.
211
--echo #
212
set autocommit=0;
213
--disable_warnings
214
drop table if exists t1;
215
drop table if exists t2;
520.1.10 by Brian Aker
Adding back more tests.
216
drop table if exists t3;
1 by brian
clean slate
217
--enable_warnings