~jlukas79/+junk/mysql-server

« back to all changes in this revision

Viewing changes to mysql-test/t/ps_ddl.test

manual merge 6.0-main --> 6.0-bka-review

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
# - Part 20: Special tables (log tables)
48
48
# - Part 21: Special tables (system tables)
49
49
# - Part 22: Special tables (views temp tables)
50
 
# - Part 23: Special tables (internal join tables)
51
 
# - Part 24: Special statements
52
 
# - Part 25: Testing the strength of TABLE_SHARE version
53
 
 
54
 
let $base_count = SELECT VARIABLE_VALUE from
55
 
INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
56
 
into @base_count ;
57
 
 
58
 
let $check = SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
59
 
  WHEN 0 THEN "PASSED"
60
 
  ELSE "FAILED"
61
 
  END
62
 
 AS `CHECK`, 
63
 
 (VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
64
 
 from INFORMATION_SCHEMA.SESSION_STATUS
65
 
 where variable_name='COM_STMT_REPREPARE' ;
66
 
 
67
 
eval $base_count;
68
 
set @expected = 0;
69
 
 
70
 
# Maintainer:
71
 
# When not expecting a re-prepare, write the test like this:
72
 
#   execute stmt;
73
 
#   eval $check;
74
 
#
75
 
# When expecting a re-prepare, write the test like this:
76
 
#   set @expected = @expected + 1;
77
 
#   execute stmt;
78
 
#   eval $check;
79
 
#
80
 
 
81
 
--echo =====================================================================
82
 
--echo Testing 1: NOTHING -> TABLE transitions
83
 
--echo =====================================================================
84
 
 
 
50
# - Part 23: Special statements
 
51
# - Part 24: Testing the strength of TABLE_SHARE version
85
52
--disable_warnings
86
 
drop table if exists t1;
 
53
drop temporary table if exists t1, t2, t3;
 
54
drop table if exists t1, t2, t3;
 
55
drop procedure if exists p_verify_reprepare_count;
 
56
drop procedure if exists p1;
 
57
drop function if exists f1;
 
58
drop view if exists v1, v2;
87
59
--enable_warnings
88
60
 
 
61
delimiter |;
 
62
create procedure p_verify_reprepare_count(expected int)
 
63
begin
 
64
  declare old_reprepare_count int default @reprepare_count;
 
65
 
 
66
  select variable_value from
 
67
  information_schema.session_status where
 
68
  variable_name='com_stmt_reprepare'
 
69
  into @reprepare_count;
 
70
 
 
71
  if old_reprepare_count + expected <> @reprepare_count then
 
72
    select concat("Expected: ", expected,
 
73
                   ", actual: ", @reprepare_count - old_reprepare_count)
 
74
    as "ERROR";
 
75
  else
 
76
    select '' as "SUCCESS";
 
77
  end if;
 
78
end|
 
79
delimiter ;|
 
80
set @reprepare_count= 0;
 
81
flush status;
 
82
 
 
83
--echo =====================================================================
 
84
--echo Part 1: NOTHING -> TABLE transitions
 
85
--echo =====================================================================
 
86
 
89
87
# can not be tested since prepare failed
90
88
--error ER_NO_SUCH_TABLE
91
 
prepare stmt from 'select * from t1';
92
 
 
93
 
--echo =====================================================================
94
 
--echo Testing 2: NOTHING -> TEMPORARY TABLE transitions
95
 
--echo =====================================================================
96
 
 
97
 
# can not be tested
98
 
 
99
 
--echo =====================================================================
100
 
--echo Testing 3: NOTHING -> VIEW transitions
101
 
--echo =====================================================================
102
 
 
103
 
# can not be tested
104
 
 
105
 
--echo =====================================================================
106
 
--echo Testing 4: TABLE -> NOTHING transitions
107
 
--echo =====================================================================
108
 
 
109
 
--disable_warnings
110
 
drop table if exists t4;
111
 
--enable_warnings
112
 
 
113
 
create table t4(a int);
114
 
 
115
 
prepare stmt from 'select * from t4';
116
 
execute stmt;
117
 
eval $check;
118
 
execute stmt;
119
 
eval $check;
120
 
 
121
 
drop table t4;
122
 
--error ER_NO_SUCH_TABLE
123
 
execute stmt;
124
 
eval $check;
125
 
--error ER_NO_SUCH_TABLE
126
 
execute stmt;
127
 
eval $check;
128
 
 
129
 
--echo =====================================================================
130
 
--echo Testing 5: TABLE -> TABLE (DDL) transitions
131
 
--echo =====================================================================
132
 
 
133
 
--disable_warnings
134
 
drop table if exists t5;
135
 
--enable_warnings
136
 
 
137
 
create table t5(a int);
138
 
 
139
 
prepare stmt from 'select a from t5';
140
 
execute stmt;
141
 
eval $check;
142
 
execute stmt;
143
 
eval $check;
144
 
 
145
 
alter table t5 add column (b int);
146
 
 
147
 
set @expected = @expected + 1;
148
 
execute stmt;
149
 
eval $check;
150
 
execute stmt;
151
 
eval $check;
152
 
 
153
 
drop table t5;
154
 
 
155
 
--echo =====================================================================
156
 
--echo Testing 6: TABLE -> TABLE (TRIGGER) transitions
157
 
--echo =====================================================================
158
 
 
159
 
#
160
 
# Test 6-a: adding a relevant trigger
161
 
# Test 6-b: adding an irrelevant trigger
162
 
# Test 6-c: changing a relevant trigger
163
 
# Test 6-d: changing an irrelevant trigger
164
 
# Test 6-e: removing a relevant trigger
165
 
# Test 6-f: removing an irrelevant trigger
166
 
#
167
 
 
168
 
--disable_warnings
169
 
drop table if exists t6;
170
 
--enable_warnings
171
 
 
172
 
create table t6(a int);
173
 
 
174
 
prepare stmt from 'insert into t6(a) value (?)';
 
89
prepare stmt from "select * from t1";
 
90
 
 
91
--echo =====================================================================
 
92
--echo Part 2: NOTHING -> TEMPORARY TABLE transitions
 
93
--echo =====================================================================
 
94
 
 
95
# can not be tested
 
96
 
 
97
--echo =====================================================================
 
98
--echo Part 3: NOTHING -> VIEW transitions
 
99
--echo =====================================================================
 
100
 
 
101
# can not be tested
 
102
 
 
103
--echo =====================================================================
 
104
--echo Part 4: TABLE -> NOTHING transitions
 
105
--echo =====================================================================
 
106
 
 
107
--echo # Test 4-a: select ... from <table>
 
108
create table t1 (a int);
 
109
 
 
110
prepare stmt from "select * from t1";
 
111
execute stmt;
 
112
call p_verify_reprepare_count(0);
 
113
execute stmt;
 
114
call p_verify_reprepare_count(0);
 
115
 
 
116
drop table t1;
 
117
--error ER_NO_SUCH_TABLE
 
118
execute stmt;
 
119
call p_verify_reprepare_count(0);
 
120
--error ER_NO_SUCH_TABLE
 
121
execute stmt;
 
122
call p_verify_reprepare_count(0);
 
123
deallocate prepare stmt;
 
124
 
 
125
--echo # Test 4-b: TABLE -> NOTHING by renaming the table
 
126
create table t1 (a int);
 
127
prepare stmt from "select * from t1";
 
128
execute stmt;
 
129
call p_verify_reprepare_count(0);
 
130
execute stmt;
 
131
call p_verify_reprepare_count(0);
 
132
 
 
133
rename table t1 to t2;
 
134
--error ER_NO_SUCH_TABLE
 
135
execute stmt;
 
136
call p_verify_reprepare_count(0);
 
137
--error ER_NO_SUCH_TABLE
 
138
execute stmt;
 
139
call p_verify_reprepare_count(0);
 
140
 
 
141
deallocate prepare stmt;
 
142
drop table t2;
 
143
 
 
144
--echo =====================================================================
 
145
--echo Part 5: TABLE -> TABLE (DDL) transitions
 
146
--echo =====================================================================
 
147
 
 
148
create table t1 (a int);
 
149
 
 
150
prepare stmt from "select a from t1";
 
151
execute stmt;
 
152
call p_verify_reprepare_count(0);
 
153
execute stmt;
 
154
call p_verify_reprepare_count(0);
 
155
 
 
156
alter table t1 add column (b int);
 
157
 
 
158
execute stmt;
 
159
call p_verify_reprepare_count(1);
 
160
execute stmt;
 
161
call p_verify_reprepare_count(0);
 
162
 
 
163
drop table t1;
 
164
deallocate prepare stmt;
 
165
 
 
166
 
 
167
--echo =====================================================================
 
168
--echo Part 6: TABLE -> TABLE (TRIGGER) transitions
 
169
--echo =====================================================================
 
170
 
 
171
--echo # Test 6-a: adding a relevant trigger
 
172
 
 
173
create table t1 (a int);
 
174
 
 
175
prepare stmt from "insert into t1 (a) value (?)";
175
176
set @val=1;
176
177
execute stmt using @val;
177
 
eval $check;
 
178
call p_verify_reprepare_count(0);
 
179
 
 
180
# Relevant trigger: execute should reprepare
 
181
create trigger t1_bi before insert on t1 for each row
 
182
  set @message= new.a;
 
183
 
178
184
set @val=2;
179
185
execute stmt using @val;
180
 
eval $check;
181
 
 
182
 
# Relevant trigger: execute should reprepare
183
 
delimiter $$;
184
 
create trigger t6_bi before insert on t6 for each row
185
 
  begin
186
 
    set @message= "t6_bi";
187
 
  end
188
 
$$
189
 
delimiter ;$$
190
 
 
191
 
set @message="none";
 
186
call p_verify_reprepare_count(1);
 
187
select @message;
192
188
set @val=3;
193
 
set @expected = @expected + 1;
194
189
execute stmt using @val;
195
 
eval $check;
 
190
call p_verify_reprepare_count(0);
196
191
select @message;
 
192
 
 
193
prepare stmt from "insert into t1 (a) value (?)";
197
194
set @val=4;
198
195
execute stmt using @val;
199
 
eval $check;
 
196
call p_verify_reprepare_count(0);
200
197
select @message;
201
198
 
202
 
prepare stmt from 'insert into t6(a) value (?)';
203
 
set @message="none";
 
199
--echo # Test 6-b: adding an irrelevant trigger
 
200
 
 
201
# Unrelated trigger: reprepare may or may not happen, implementation dependent
 
202
create trigger t1_bd before delete on t1 for each row
 
203
  set @message= old.a;
 
204
 
204
205
set @val=5;
205
206
execute stmt using @val;
206
 
eval $check;
 
207
call p_verify_reprepare_count(1);
207
208
select @message;
208
 
set @message="none";
209
209
set @val=6;
210
210
execute stmt using @val;
211
 
eval $check;
 
211
call p_verify_reprepare_count(0);
212
212
select @message;
213
213
 
214
 
# Unrelated trigger: execute can pass of fail, implementation dependent
215
 
delimiter $$;
216
 
create trigger t6_bd before delete on t6 for each row
217
 
  begin
218
 
    set @message= "t6_bd";
219
 
  end
220
 
$$
221
 
delimiter ;$$
222
 
 
223
 
set @message="none";
 
214
prepare stmt from "insert into t1 (a) value (?)";
224
215
set @val=7;
225
 
set @expected = @expected + 1;
226
216
execute stmt using @val;
227
 
eval $check;
 
217
call p_verify_reprepare_count(0);
228
218
select @message;
229
 
set @message="none";
 
219
 
 
220
--echo # Test 6-c: changing a relevant trigger
 
221
 
 
222
# Relevant trigger: execute should reprepare
 
223
drop trigger t1_bi;
 
224
create trigger t1_bi before insert on t1 for each row
 
225
  set @message= concat("new trigger: ", new.a);
 
226
 
230
227
set @val=8;
231
228
execute stmt using @val;
232
 
eval $check;
 
229
call p_verify_reprepare_count(1);
233
230
select @message;
234
 
 
235
 
prepare stmt from 'insert into t6(a) value (?)';
236
 
set @message="none";
237
231
set @val=9;
238
232
execute stmt using @val;
239
 
eval $check;
 
233
call p_verify_reprepare_count(0);
240
234
select @message;
241
 
set @message="none";
 
235
 
 
236
prepare stmt from "insert into t1 (a) value (?)";
242
237
set @val=10;
243
238
execute stmt using @val;
244
 
eval $check;
 
239
call p_verify_reprepare_count(0);
245
240
select @message;
246
241
 
247
 
# Relevant trigger: execute should reprepare
248
 
drop trigger t6_bi;
249
 
delimiter $$;
250
 
create trigger t6_bi before insert on t6 for each row
251
 
  begin
252
 
    set @message= "t6_bi (2)";
253
 
  end
254
 
$$
255
 
delimiter ;$$
256
 
 
257
 
set @message="none";
 
242
--echo # Test 6-d: changing an irrelevant trigger
 
243
 
 
244
# Unrelated trigger: reprepare may or may not happen, implementation dependent
 
245
drop trigger t1_bd;
 
246
 
258
247
set @val=11;
259
 
set @expected = @expected + 1;
260
248
execute stmt using @val;
261
 
eval $check;
 
249
call p_verify_reprepare_count(1);
262
250
select @message;
 
251
 
 
252
--echo Test 6-e: removing a relevant trigger
 
253
 
 
254
drop trigger t1_bi;
 
255
 
263
256
set @val=12;
264
257
execute stmt using @val;
265
 
eval $check;
 
258
call p_verify_reprepare_count(1);
266
259
select @message;
267
 
 
268
 
prepare stmt from 'insert into t6(a) value (?)';
269
 
set @message="none";
270
260
set @val=13;
271
261
execute stmt using @val;
272
 
eval $check;
 
262
call p_verify_reprepare_count(0);
273
263
select @message;
274
 
set @message="none";
 
264
 
 
265
prepare stmt from "insert into t1 (a) value (?)";
275
266
set @val=14;
276
267
execute stmt using @val;
277
 
eval $check;
278
 
select @message;
279
 
 
280
 
# Unrelated trigger: execute can pass of fail, implementation dependent
281
 
drop trigger t6_bd;
282
 
delimiter $$;
283
 
create trigger t6_bd before delete on t6 for each row
284
 
  begin
285
 
    set @message= "t6_bd (2)";
286
 
  end
287
 
$$
288
 
delimiter ;$$
289
 
 
290
 
set @message="none";
291
 
set @val=15;
292
 
set @expected = @expected + 1;
293
 
execute stmt using @val;
294
 
eval $check;
295
 
select @message;
296
 
set @message="none";
297
 
set @val=16;
298
 
execute stmt using @val;
299
 
eval $check;
300
 
select @message;
301
 
 
302
 
prepare stmt from 'insert into t6(a) value (?)';
303
 
set @message="none";
304
 
set @val=17;
305
 
execute stmt using @val;
306
 
eval $check;
307
 
select @message;
308
 
set @message="none";
309
 
set @val=18;
310
 
execute stmt using @val;
311
 
eval $check;
312
 
select @message;
313
 
 
314
 
drop trigger t6_bi;
315
 
 
316
 
set @message="none";
317
 
set @val=19;
318
 
set @expected = @expected + 1;
319
 
execute stmt using @val;
320
 
eval $check;
321
 
select @message;
322
 
set @val=20;
323
 
execute stmt using @val;
324
 
eval $check;
325
 
select @message;
326
 
 
327
 
prepare stmt from 'insert into t6(a) value (?)';
328
 
set @message="none";
329
 
set @val=21;
330
 
execute stmt using @val;
331
 
eval $check;
332
 
select @message;
333
 
set @val=22;
334
 
execute stmt using @val;
335
 
eval $check;
336
 
select @message;
337
 
 
338
 
drop trigger t6_bd;
339
 
 
340
 
set @val=23;
341
 
set @expected = @expected + 1;
342
 
execute stmt using @val;
343
 
eval $check;
344
 
select @message;
345
 
set @val=24;
346
 
execute stmt using @val;
347
 
eval $check;
348
 
select @message;
349
 
 
350
 
select * from t6 order by a;
351
 
drop table t6;
352
 
 
353
 
--echo =====================================================================
354
 
--echo Testing 7: TABLE -> TABLE (TRIGGER dependencies) transitions
355
 
--echo =====================================================================
356
 
 
357
 
#
358
 
# Test 7-a: dependent PROCEDURE has changed
359
 
# Test 7-b: dependent FUNCTION has changed
360
 
# Test 7-c: dependent VIEW has changed
361
 
# Test 7-d: dependent TABLE has changed
362
 
# Test 7-e: dependent TABLE TRIGGER has changed
363
 
#
364
 
 
365
 
--disable_warnings
366
 
drop table if exists t7_proc;
367
 
drop table if exists t7_func;
368
 
drop table if exists t7_view;
369
 
drop table if exists t7_table;
370
 
drop table if exists t7_dependent_table;
371
 
drop table if exists t7_table_trigger;
372
 
drop table if exists t7_audit;
373
 
drop procedure if exists audit_proc;
374
 
drop function if exists audit_func;
375
 
drop view if exists audit_view;
376
 
--enable_warnings
377
 
 
378
 
create table t7_proc(a int);
379
 
create table t7_func(a int);
380
 
create table t7_view(a int);
381
 
create table t7_table(a int);
382
 
create table t7_table_trigger(a int);
383
 
 
384
 
create table t7_audit(old_a int, new_a int, reason varchar(50));
385
 
create table t7_dependent_table(old_a int, new_a int, reason varchar(50));
386
 
 
387
 
create procedure audit_proc(a int)
388
 
  insert into t7_audit values (NULL, a, "proc v1");
389
 
 
390
 
create function audit_func() returns varchar(50)
391
 
  return "func v1";
392
 
 
393
 
create view audit_view as select "view v1" as reason from dual;
394
 
 
395
 
create trigger t7_proc_bi before insert on t7_proc for each row
396
 
  call audit_proc(NEW.a);
397
 
 
398
 
create trigger t7_func_bi before insert on t7_func for each row
399
 
  insert into t7_audit values (NULL, NEW.a, audit_func());
400
 
 
401
 
create trigger t7_view_bi before insert on t7_view for each row
402
 
  insert into t7_audit values (NULL, NEW.a, (select reason from audit_view));
403
 
 
404
 
create trigger t7_table_bi before insert on t7_table for each row
405
 
  insert into t7_dependent_table values (NULL, NEW.a, "dependent table");
406
 
 
407
 
create trigger t7_table_trigger_bi before insert on t7_dependent_table
408
 
  for each row set NEW.reason="trigger v1";
409
 
 
410
 
prepare stmt_proc from 'insert into t7_proc(a) value (?)';
411
 
set @val=101;
412
 
execute stmt_proc using @val;
413
 
eval $check;
414
 
set @val=102;
415
 
execute stmt_proc using @val;
416
 
eval $check;
417
 
 
418
 
drop procedure audit_proc;
419
 
 
420
 
create procedure audit_proc(a int)
421
 
  insert into t7_audit values (NULL, a, "proc v2");
422
 
 
423
 
set @val=103;
424
 
set @expected = @expected + 1;
425
 
execute stmt_proc using @val;
426
 
eval $check;
427
 
set @val=104;
428
 
execute stmt_proc using @val;
429
 
eval $check;
430
 
 
431
 
 
432
 
prepare stmt_func from 'insert into t7_func(a) value (?)';
433
 
set @val=201;
434
 
execute stmt_func using @val;
435
 
eval $check;
436
 
set @val=202;
437
 
execute stmt_func using @val;
438
 
eval $check;
439
 
 
440
 
drop function audit_func;
441
 
 
442
 
create function audit_func() returns varchar(50)
443
 
  return "func v2";
444
 
 
445
 
set @val=203;
446
 
set @expected = @expected + 1;
447
 
execute stmt_func using @val;
448
 
eval $check;
449
 
set @val=204;
450
 
execute stmt_func using @val;
451
 
eval $check;
452
 
 
453
 
prepare stmt_view from 'insert into t7_view(a) value (?)';
454
 
set @val=301;
455
 
execute stmt_view using @val;
456
 
eval $check;
457
 
set @val=302;
458
 
execute stmt_view using @val;
459
 
eval $check;
460
 
 
461
 
drop view audit_view;
462
 
 
463
 
create view audit_view as select "view v2" as reason from dual;
464
 
 
465
 
# Because of Bug#33255, the wrong result is still produced for cases
466
 
# 303 and 304, even after re-preparing the statement.
467
 
# This is because the table trigger is cached and is not invalidated.
468
 
 
469
 
set @val=303;
470
 
set @expected = @expected + 1;
471
 
execute stmt_view using @val;
472
 
eval $check;
473
 
set @val=304;
474
 
execute stmt_view using @val;
475
 
eval $check;
476
 
 
477
 
 
478
 
prepare stmt_table from 'insert into t7_table(a) value (?)';
479
 
set @val=401;
480
 
execute stmt_table using @val;
481
 
eval $check;
482
 
set @val=402;
483
 
execute stmt_table using @val;
484
 
eval $check;
485
 
 
486
 
alter table t7_dependent_table add column comments varchar(100) default NULL;
487
 
 
488
 
set @val=403;
489
 
set @expected = @expected + 1;
490
 
--error ER_WRONG_VALUE_COUNT_ON_ROW
491
 
execute stmt_table using @val;
492
 
eval $check;
493
 
set @val=404;
494
 
set @expected = @expected + 1;
495
 
--error ER_WRONG_VALUE_COUNT_ON_ROW
496
 
execute stmt_table using @val;
497
 
eval $check;
498
 
 
499
 
alter table t7_dependent_table drop column comments;
500
 
 
501
 
set @val=405;
502
 
set @expected = @expected + 1;
503
 
execute stmt_table using @val;
504
 
eval $check;
505
 
set @val=406;
506
 
execute stmt_table using @val;
507
 
eval $check;
508
 
 
509
 
 
510
 
prepare stmt_table_trigger from 'insert into t7_table(a) value (?)';
511
 
set @val=501;
512
 
execute stmt_table_trigger using @val;
513
 
eval $check;
514
 
set @val=502;
515
 
execute stmt_table_trigger using @val;
516
 
eval $check;
517
 
 
518
 
drop trigger t7_table_trigger_bi;
519
 
 
520
 
create trigger t7_table_trigger_bi before insert on t7_dependent_table
521
 
  for each row set NEW.reason="trigger v2";
522
 
 
523
 
set @val=503;
524
 
set @expected = @expected + 1;
525
 
execute stmt_table_trigger using @val;
526
 
eval $check;
527
 
set @val=504;
528
 
execute stmt_table_trigger using @val;
529
 
eval $check;
530
 
 
531
 
select * from t7_audit order by new_a;
532
 
 
533
 
select * from t7_dependent_table order by new_a;
534
 
 
535
 
drop table t7_proc;
536
 
drop table t7_func;
537
 
drop table t7_view;
538
 
drop table t7_table;
539
 
drop table t7_dependent_table;
540
 
drop table t7_table_trigger;
541
 
drop table t7_audit;
542
 
drop procedure audit_proc;
543
 
drop function audit_func;
544
 
drop view audit_view;
545
 
 
546
 
--echo =====================================================================
547
 
--echo Testing 8: TABLE -> TEMPORARY TABLE transitions
548
 
--echo =====================================================================
549
 
 
550
 
--disable_warnings
551
 
drop table if exists t8;
552
 
--enable_warnings
553
 
 
554
 
create table t8(a int);
555
 
 
556
 
prepare stmt from 'select * from t8';
557
 
execute stmt;
558
 
eval $check;
559
 
execute stmt;
560
 
eval $check;
561
 
 
562
 
drop table t8;
563
 
create temporary table t8(a int);
564
 
 
565
 
set @expected = @expected + 1;
566
 
execute stmt;
567
 
eval $check;
568
 
execute stmt;
569
 
eval $check;
570
 
 
571
 
drop table t8;
572
 
 
573
 
--echo =====================================================================
574
 
--echo Testing 9: TABLE -> VIEW transitions
575
 
--echo =====================================================================
576
 
 
577
 
--disable_warnings
578
 
drop table if exists t9;
579
 
drop table if exists t9_b;
580
 
--enable_warnings
581
 
 
582
 
create table t9(a int);
583
 
create table t9_b(a int);
584
 
 
585
 
prepare stmt from 'select * from t9';
586
 
execute stmt;
587
 
eval $check;
588
 
execute stmt;
589
 
eval $check;
590
 
 
591
 
drop table t9;
592
 
create view t9 as select * from t9_b;
593
 
 
594
 
set @expected = @expected + 1;
595
 
execute stmt;
596
 
eval $check;
597
 
execute stmt;
598
 
eval $check;
599
 
 
600
 
drop view t9;
601
 
drop table t9_b;
602
 
 
603
 
--echo =====================================================================
604
 
--echo Testing 10: TEMPORARY TABLE -> NOTHING transitions
605
 
--echo =====================================================================
606
 
 
607
 
--disable_warnings
608
 
drop temporary table if exists t10;
609
 
--enable_warnings
610
 
 
611
 
create temporary table t10(a int);
612
 
 
613
 
prepare stmt from 'select * from t10';
614
 
execute stmt;
615
 
eval $check;
616
 
execute stmt;
617
 
eval $check;
618
 
 
619
 
drop temporary table t10;
620
 
--error ER_NO_SUCH_TABLE
621
 
execute stmt;
622
 
eval $check;
623
 
--error ER_NO_SUCH_TABLE
624
 
execute stmt;
625
 
eval $check;
626
 
 
627
 
--echo =====================================================================
628
 
--echo Testing 11: TEMPORARY TABLE -> TABLE transitions
629
 
--echo =====================================================================
630
 
 
631
 
--disable_warnings
632
 
drop table if exists t11;
633
 
drop temporary table if exists t11;
634
 
--enable_warnings
635
 
 
636
 
create table t11(a int);
637
 
insert into t11(a) value (1);
638
 
create temporary table t11(a int);
639
 
 
640
 
prepare stmt from 'select * from t11';
641
 
execute stmt;
642
 
eval $check;
643
 
execute stmt;
644
 
eval $check;
645
 
 
646
 
drop temporary table t11;
647
 
 
648
 
set @expected = @expected + 1;
649
 
execute stmt;
650
 
eval $check;
651
 
execute stmt;
652
 
eval $check;
653
 
 
654
 
select * from t11;
655
 
drop table t11;
656
 
 
657
 
--echo =====================================================================
658
 
--echo Testing 12: TEMPORARY TABLE -> TEMPORARY TABLE (DDL) transitions
659
 
--echo =====================================================================
660
 
 
661
 
--disable_warnings
662
 
drop temporary table if exists t12;
663
 
--enable_warnings
664
 
 
665
 
create temporary table t12(a int);
666
 
 
667
 
prepare stmt from 'select a from t12';
668
 
execute stmt;
669
 
eval $check;
670
 
execute stmt;
671
 
eval $check;
672
 
 
673
 
drop temporary table t12;
674
 
create temporary table t12(a int, b int);
675
 
 
676
 
set @expected = @expected + 1;
677
 
execute stmt;
678
 
eval $check;
679
 
execute stmt;
680
 
eval $check;
681
 
 
682
 
select * from t12;
683
 
drop table t12;
684
 
 
685
 
--echo =====================================================================
686
 
--echo Testing 13: TEMPORARY TABLE -> VIEW transitions
687
 
--echo =====================================================================
688
 
 
689
 
--disable_warnings
690
 
drop temporary table if exists t13;
691
 
drop table if exists t13_b;
692
 
--enable_warnings
693
 
 
694
 
create temporary table t13(a int);
695
 
create table t13_b(a int);
696
 
 
697
 
prepare stmt from 'select * from t13';
698
 
execute stmt;
699
 
eval $check;
700
 
execute stmt;
701
 
eval $check;
702
 
 
703
 
drop temporary table t13;
704
 
create view t13 as select * from t13_b;
705
 
 
706
 
set @expected = @expected + 1;
707
 
execute stmt;
708
 
eval $check;
709
 
execute stmt;
710
 
eval $check;
711
 
 
712
 
drop view t13;
713
 
drop table t13_b;
714
 
 
715
 
--echo =====================================================================
716
 
--echo Testing 14: VIEW -> NOTHING transitions
717
 
--echo =====================================================================
718
 
 
719
 
--disable_warnings
720
 
drop view if exists t14;
721
 
drop table if exists t14_b;
722
 
--enable_warnings
723
 
 
724
 
create table t14_b(a int);
725
 
create view t14 as select * from t14_b;
726
 
 
727
 
prepare stmt from 'select * from t14';
728
 
execute stmt;
729
 
eval $check;
730
 
execute stmt;
731
 
eval $check;
732
 
 
733
 
drop view t14;
734
 
 
735
 
set @expected = @expected + 1;
736
 
--error ER_NO_SUCH_TABLE
737
 
execute stmt;
738
 
eval $check;
739
 
set @expected = @expected + 1;
740
 
--error ER_NO_SUCH_TABLE
741
 
execute stmt;
742
 
eval $check;
743
 
 
744
 
drop table t14_b;
745
 
 
746
 
--echo =====================================================================
747
 
--echo Testing 15: VIEW -> TABLE transitions
748
 
--echo =====================================================================
749
 
 
750
 
--disable_warnings
751
 
drop view if exists t15;
752
 
drop table if exists t15_b;
753
 
--enable_warnings
754
 
 
755
 
create table t15_b(a int);
756
 
create view t15 as select * from t15_b;
757
 
 
758
 
prepare stmt from 'select * from t15';
759
 
execute stmt;
760
 
eval $check;
761
 
execute stmt;
762
 
eval $check;
763
 
 
764
 
drop view t15;
765
 
create table t15(a int);
766
 
 
767
 
set @expected = @expected + 1;
768
 
execute stmt;
769
 
eval $check;
770
 
execute stmt;
771
 
eval $check;
772
 
 
773
 
drop table t15_b;
774
 
drop table t15;
775
 
 
776
 
--echo =====================================================================
777
 
--echo Testing 16: VIEW -> TEMPORARY TABLE transitions
778
 
--echo =====================================================================
779
 
 
780
 
--disable_warnings
781
 
drop view if exists t16;
782
 
drop table if exists t16_b;
783
 
--enable_warnings
784
 
 
785
 
create table t16_b(a int);
786
 
create view t16 as select * from t16_b;
787
 
 
788
 
prepare stmt from 'select * from t16';
789
 
execute stmt;
790
 
eval $check;
791
 
execute stmt;
792
 
eval $check;
793
 
 
794
 
drop view t16;
795
 
create temporary table t16(a int);
796
 
 
797
 
set @expected = @expected + 1;
798
 
execute stmt;
799
 
eval $check;
800
 
execute stmt;
801
 
eval $check;
802
 
 
803
 
drop table t16_b;
804
 
drop temporary table t16;
805
 
 
806
 
--echo =====================================================================
807
 
--echo Testing 17: VIEW -> VIEW (DDL) transitions
808
 
--echo =====================================================================
809
 
 
810
 
--disable_warnings
811
 
drop view if exists t17;
812
 
drop table if exists t17_b;
813
 
--enable_warnings
814
 
 
815
 
create table t17_b(a int);
816
 
insert into t17_b values (10), (20), (30);
817
 
 
818
 
create view t17 as select a, 2*a as b, 3*a as c from t17_b;
819
 
select * from t17;
820
 
 
821
 
prepare stmt from 'select * from t17';
822
 
execute stmt;
823
 
eval $check;
824
 
execute stmt;
825
 
eval $check;
826
 
 
827
 
drop view t17;
828
 
create view t17 as select a, 2*a as b, 5*a as c from t17_b;
829
 
select * from t17;
830
 
 
831
 
set @expected = @expected + 1;
832
 
execute stmt;
833
 
eval $check;
834
 
execute stmt;
835
 
eval $check;
836
 
 
837
 
drop table t17_b;
838
 
drop view t17;
839
 
 
840
 
--echo =====================================================================
841
 
--echo Testing 18: VIEW -> VIEW (VIEW dependencies) transitions
842
 
--echo =====================================================================
843
 
 
844
 
#
845
 
# Test 18-a: dependent PROCEDURE has changed (via a trigger)
846
 
# Test 18-b: dependent FUNCTION has changed
847
 
# Test 18-c: dependent VIEW has changed
848
 
# Test 18-d: dependent TABLE has changed
849
 
# Test 18-e: dependent TABLE TRIGGER has changed
850
 
#
851
 
 
852
 
--disable_warnings
853
 
drop table if exists t18;
854
 
drop table if exists t18_dependent_table;
855
 
drop view if exists t18_func;
856
 
drop view if exists t18_view;
857
 
drop view if exists t18_table;
858
 
drop function if exists view_func;
859
 
drop view if exists view_view;
860
 
--enable_warnings
861
 
 
862
 
# TODO: insertable view -> trigger
863
 
# TODO: insertable view -> trigger -> proc ?
864
 
 
865
 
create table t18(a int);
866
 
insert into t18 values (1), (2), (3);
867
 
 
868
 
create function view_func(x int) returns int
869
 
  return x+1;
870
 
 
871
 
create view view_view as select "view v1" as reason from dual;
872
 
 
873
 
create table t18_dependent_table(a int);
874
 
 
875
 
create view t18_func as select a, view_func(a) as b from t18;
876
 
create view t18_view as select a, reason as b from t18, view_view;
877
 
create view t18_table as select * from t18;
878
 
 
879
 
prepare stmt_func from 'select * from t18_func';
880
 
execute stmt_func;
881
 
eval $check;
882
 
execute stmt_func;
883
 
eval $check;
884
 
 
885
 
drop function view_func;
886
 
create function view_func(x int) returns int
887
 
  return x*x;
888
 
 
889
 
set @expected = @expected + 1;
890
 
execute stmt_func;
891
 
eval $check;
892
 
execute stmt_func;
893
 
eval $check;
894
 
 
895
 
prepare stmt_view from 'select * from t18_view';
896
 
execute stmt_view;
897
 
eval $check;
898
 
execute stmt_view;
899
 
eval $check;
900
 
 
901
 
drop view view_view;
902
 
create view view_view as select "view v2" as reason from dual;
903
 
 
904
 
set @expected = @expected + 1;
905
 
execute stmt_view;
906
 
eval $check;
907
 
execute stmt_view;
908
 
eval $check;
909
 
 
910
 
prepare stmt_table from 'select * from t18_table';
911
 
execute stmt_table;
912
 
eval $check;
913
 
execute stmt_table;
914
 
eval $check;
915
 
 
916
 
alter table t18 add column comments varchar(50) default NULL;
917
 
 
918
 
set @expected = @expected + 1;
919
 
execute stmt_table;
920
 
eval $check;
921
 
execute stmt_table;
922
 
eval $check;
923
 
 
924
 
drop table t18;
925
 
drop table t18_dependent_table;
926
 
drop view t18_func;
927
 
drop view t18_view;
928
 
drop view t18_table;
929
 
drop function view_func;
930
 
drop view view_view;
931
 
 
932
 
--echo =====================================================================
933
 
--echo Testing 19: Special tables (INFORMATION_SCHEMA)
934
 
--echo =====================================================================
935
 
 
936
 
--disable_warnings
937
 
drop procedure if exists proc_19;
938
 
--enable_warnings
 
268
call p_verify_reprepare_count(0);
 
269
select @message;
 
270
 
 
271
select * from t1 order by a;
 
272
drop table t1;
 
273
deallocate prepare stmt;
 
274
 
 
275
--echo =====================================================================
 
276
--echo Part 7: TABLE -> TABLE (TRIGGER dependencies) transitions
 
277
--echo =====================================================================
 
278
 
 
279
--echo # Test 7-a: dependent PROCEDURE has changed
 
280
--echo #
 
281
--echo # Note, this scenario is not supported, subject of Bug#12093
 
282
--echo #
 
283
 
 
284
create table t1 (a int);
 
285
create trigger t1_ai after insert on t1 for each row
 
286
  call p1(new.a);
 
287
create procedure p1(a int) begin end;
 
288
prepare stmt from "insert into t1 (a) values (?)";
 
289
set @var= 1;
 
290
execute stmt using @var;
 
291
drop procedure p1;
 
292
create procedure p1 (a int) begin end;
 
293
set @var= 2;
 
294
--error ER_SP_DOES_NOT_EXIST
 
295
execute stmt using @var;
 
296
--echo # Cleanup
 
297
drop procedure p1;
 
298
call p_verify_reprepare_count(0);
 
299
 
 
300
--echo # Test 7-b: dependent FUNCTION has changed
 
301
--echo #
 
302
--echo # Note, this scenario is supported, subject of Bug#12093
 
303
--echo #
 
304
drop trigger t1_ai;
 
305
create trigger t1_ai after insert on t1 for  each row
 
306
  select f1(new.a+1) into @var;
 
307
create function f1 (a int) returns int return a;
 
308
prepare stmt from "insert into t1(a) values (?)";
 
309
set @var=3;
 
310
execute stmt using @var;
 
311
select @var;
 
312
drop function f1;
 
313
create function f1 (a int) returns int return 0;
 
314
execute stmt using @var;
 
315
call p_verify_reprepare_count(1);
 
316
drop function f1;
 
317
deallocate prepare stmt;
 
318
 
 
319
--echo # Test 7-c: dependent VIEW has changed
 
320
--echo #
 
321
--echo # Note, this scenario is not functioning correctly, see
 
322
--echo # Bug#33255 Trigger using views and view ddl : corrupted triggers
 
323
--echo # and Bug #33000 Triggers do not detect changes in meta-data.
 
324
--echo #
 
325
drop trigger t1_ai;
 
326
create table t2 (a int unique);
 
327
create table t3 (a int unique);
 
328
create view v1 as select a from t2;
 
329
create trigger t1_ai after insert on t1 for each row
 
330
  insert into v1 (a) values (new.a);
 
331
 
 
332
--echo # Demonstrate that the same bug is present
 
333
--echo # without prepared statements
 
334
insert into t1 (a) values (5);
 
335
select * from t2;
 
336
select * from t3;
 
337
drop view v1;
 
338
create view v1 as select a from t3;
 
339
--error ER_NO_SUCH_TABLE
 
340
insert into t1 (a) values (6);
 
341
flush table t1;
 
342
insert into t1 (a) values (6);
 
343
select * from t2;
 
344
select * from t3;
 
345
 
 
346
prepare stmt from "insert into t1 (a) values (?)";
 
347
set @var=7;
 
348
execute stmt using @var;
 
349
call p_verify_reprepare_count(0);
 
350
select * from t3;
 
351
select * from t2;
 
352
drop view v1;
 
353
create view v1 as select a from t2;
 
354
set @var=8;
 
355
--echo # XXX: bug, the SQL statement in the trigger is still
 
356
--echo # pointing at table 't3', since the view was expanded
 
357
--echo # at first statement execution.
 
358
--echo # Repreparation of the main statement doesn't cause repreparation
 
359
--echo # of trigger statements.
 
360
--error ER_NO_SUCH_TABLE
 
361
execute stmt using @var;
 
362
call p_verify_reprepare_count(1);
 
363
--echo #
 
364
--echo # Sic: the insert went into t3, even though the view now
 
365
--echo # points at t2. This is because neither the merged view
 
366
--echo #  nor its prelocking list are affected by view DDL
 
367
--echo # The binary log is of course wrong, since it is not
 
368
--echo # using prepared statements
 
369
--echo #
 
370
select * from t2;
 
371
select * from t3;
 
372
flush table t1;
 
373
set @var=9;
 
374
execute stmt using @var;
 
375
call p_verify_reprepare_count(1);
 
376
select * from t2;
 
377
select * from t3;
 
378
drop view v1;
 
379
drop table t1,t2,t3;
 
380
 
 
381
--echo # Test 7-d: dependent TABLE has changed
 
382
create table t1 (a int);
 
383
create trigger t1_ai after insert on t1 for each row
 
384
  insert into t2 (a) values (new.a);
 
385
create table t2 (a int);
 
386
 
 
387
prepare stmt from "insert into t1 (a) values (?)";
 
388
set @var=1;
 
389
execute stmt using @var;
 
390
alter table t2 add column comment varchar(255);
 
391
set @var=2;
 
392
--echo # Since the dependent table is tracked in the prelocked
 
393
--echo # list of the prepared statement, invalidation happens
 
394
--echo # and the statement is re-prepared. This is an unnecessary
 
395
--echo # side effect, since the statement that *is* dependent
 
396
--echo # on t2 definition is inside the trigger, and it is currently
 
397
--echo # not reprepared (see the previous test case).
 
398
execute stmt using @var;
 
399
call p_verify_reprepare_count(1);
 
400
select * from t1;
 
401
select * from t2;
 
402
drop table t1,t2;
 
403
 
 
404
--echo # Test 7-e: dependent TABLE TRIGGER has changed
 
405
create table t1 (a int);
 
406
create trigger t1_ai after insert on t1 for each row
 
407
  insert into t2 (a) values (new.a);
 
408
create table t2 (a int unique);
 
409
create trigger t2_ai after insert on t2 for each row
 
410
  insert into t3 (a) values (new.a);
 
411
create table t3 (a int unique);
 
412
create table t4 (a int unique);
 
413
 
 
414
insert into t1 (a) values (1);
 
415
select * from t1 join t2 on (t1.a=t2.a) join t3 on (t2.a=t3.a);
 
416
drop trigger t2_ai;
 
417
create trigger t2_ai after insert on t2 for each row
 
418
  insert into t4 (a) values (new.a);
 
419
insert into t1 (a) values (2);
 
420
select * from t1 join t2 on (t1.a=t2.a) join t4 on (t2.a=t4.a);
 
421
 
 
422
prepare stmt from "insert into t1 (a) values (?)";
 
423
set @var=3;
 
424
execute stmt using @var;
 
425
select * from t1 join t2 on (t1.a=t2.a) join t4 on (t2.a=t4.a);
 
426
drop trigger t2_ai;
 
427
create trigger t2_ai after insert on t2 for each row
 
428
  insert into t3 (a) values (new.a);
 
429
set @var=4;
 
430
execute stmt using @var;
 
431
call p_verify_reprepare_count(1);
 
432
select * from t1 join t2 on (t1.a=t2.a) join t3 on (t2.a=t3.a);
 
433
select * from t1 join t2 on (t1.a=t2.a) join t4 on (t2.a=t4.a);
 
434
 
 
435
drop table t1, t2, t3, t4;
 
436
deallocate prepare stmt;
 
437
 
 
438
--echo =====================================================================
 
439
--echo Part 8: TABLE -> TEMPORARY TABLE transitions
 
440
--echo =====================================================================
 
441
 
 
442
--echo # Test 8-a: base table used recreated as temporary table
 
443
create table t1 (a int);
 
444
 
 
445
prepare stmt from "select * from t1";
 
446
execute stmt;
 
447
 
 
448
drop table t1;
 
449
create temporary table t1 (a int);
 
450
 
 
451
execute stmt;
 
452
call p_verify_reprepare_count(1);
 
453
execute stmt;
 
454
call p_verify_reprepare_count(0);
 
455
 
 
456
drop table t1;
 
457
deallocate prepare stmt;
 
458
 
 
459
--echo # Test 8-b: temporary table has precedence over base table with same name
 
460
create table t1 (a int);
 
461
prepare stmt from 'select count(*) from t1';
 
462
execute stmt;
 
463
call p_verify_reprepare_count(0);
 
464
execute stmt;
 
465
call p_verify_reprepare_count(0);
 
466
 
 
467
create temporary table t1 AS SELECT 1;
 
468
execute stmt;
 
469
call p_verify_reprepare_count(1);
 
470
execute stmt;
 
471
call p_verify_reprepare_count(0);
 
472
 
 
473
deallocate prepare stmt;
 
474
drop temporary table t1;
 
475
drop table t1;
 
476
 
 
477
 
 
478
--echo =====================================================================
 
479
--echo Part 9: TABLE -> VIEW transitions
 
480
--echo =====================================================================
 
481
 
 
482
create table t1 (a int);
 
483
 
 
484
prepare stmt from "select * from t1";
 
485
execute stmt;
 
486
call p_verify_reprepare_count(0);
 
487
 
 
488
drop table t1;
 
489
create table t2 (a int);
 
490
create view t1 as select * from t2;
 
491
 
 
492
execute stmt;
 
493
call p_verify_reprepare_count(1);
 
494
 
 
495
drop view t1;
 
496
drop table t2;
 
497
deallocate prepare stmt;
 
498
 
 
499
--echo =====================================================================
 
500
--echo Part 10: TEMPORARY TABLE -> NOTHING transitions
 
501
--echo =====================================================================
 
502
 
 
503
create temporary table t1 (a int);
 
504
 
 
505
prepare stmt from "select * from t1";
 
506
execute stmt;
 
507
call p_verify_reprepare_count(0);
 
508
 
 
509
drop temporary table t1;
 
510
--error ER_NO_SUCH_TABLE
 
511
execute stmt;
 
512
call p_verify_reprepare_count(0);
 
513
deallocate prepare stmt;
 
514
 
 
515
--echo =====================================================================
 
516
--echo Part 11: TEMPORARY TABLE -> TABLE transitions
 
517
--echo =====================================================================
 
518
 
 
519
--echo # Test 11-a: temporary table replaced by base table
 
520
create table t1 (a int);
 
521
insert into t1 (a) value (1);
 
522
create temporary table t1 (a int);
 
523
 
 
524
prepare stmt from "select * from t1";
 
525
execute stmt;
 
526
call p_verify_reprepare_count(0);
 
527
 
 
528
drop temporary table t1;
 
529
 
 
530
execute stmt;
 
531
call p_verify_reprepare_count(1);
 
532
 
 
533
select * from t1;
 
534
drop table t1;
 
535
deallocate prepare stmt;
 
536
 
 
537
 
 
538
--echo # Test 11-b: temporary table has precedence over base table with same name
 
539
--echo #            temporary table disappears
 
540
create table t1 (a int);
 
541
create temporary table t1 as select 1 as a;
 
542
prepare stmt from "select count(*) from t1";
 
543
execute stmt;
 
544
call p_verify_reprepare_count(0);
 
545
execute stmt;
 
546
call p_verify_reprepare_count(0);
 
547
 
 
548
drop temporary table t1;
 
549
execute stmt;
 
550
call p_verify_reprepare_count(1);
 
551
execute stmt;
 
552
call p_verify_reprepare_count(0);
 
553
 
 
554
deallocate prepare stmt;
 
555
drop table t1;
 
556
 
 
557
 
 
558
--echo =====================================================================
 
559
--echo Part 12: TEMPORARY TABLE -> TEMPORARY TABLE (DDL) transitions
 
560
--echo =====================================================================
 
561
 
 
562
create temporary table t1 (a int);
 
563
 
 
564
prepare stmt from "select a from t1";
 
565
execute stmt;
 
566
call p_verify_reprepare_count(0);
 
567
 
 
568
drop temporary table t1;
 
569
create temporary table t1 (a int, b int);
 
570
 
 
571
execute stmt;
 
572
call p_verify_reprepare_count(1);
 
573
 
 
574
select * from t1;
 
575
drop temporary table t1;
 
576
deallocate prepare stmt;
 
577
 
 
578
--echo =====================================================================
 
579
--echo Part 13: TEMPORARY TABLE -> VIEW transitions
 
580
--echo =====================================================================
 
581
 
 
582
create temporary table t1 (a int);
 
583
create table t2 (a int);
 
584
 
 
585
prepare stmt from "select * from t1";
 
586
execute stmt;
 
587
call p_verify_reprepare_count(0);
 
588
 
 
589
drop temporary table t1;
 
590
create view t1 as select * from t2;
 
591
 
 
592
execute stmt;
 
593
call p_verify_reprepare_count(1);
 
594
 
 
595
drop view t1;
 
596
drop table t2;
 
597
deallocate prepare stmt;
 
598
 
 
599
--echo =====================================================================
 
600
--echo Part 14: VIEW -> NOTHING transitions
 
601
--echo =====================================================================
 
602
 
 
603
create table t2 (a int);
 
604
create view t1 as select * from t2;
 
605
 
 
606
prepare stmt from "select * from t1";
 
607
execute stmt;
 
608
drop view t1;
 
609
 
 
610
--error ER_NO_SUCH_TABLE
 
611
execute stmt;
 
612
call p_verify_reprepare_count(0);
 
613
--error ER_NO_SUCH_TABLE
 
614
execute stmt;
 
615
call p_verify_reprepare_count(0);
 
616
 
 
617
drop table t2;
 
618
deallocate prepare stmt;
 
619
 
 
620
--echo =====================================================================
 
621
--echo Part 15: VIEW -> TABLE transitions
 
622
--echo =====================================================================
 
623
 
 
624
create table t2 (a int);
 
625
create view t1 as select * from t2;
 
626
 
 
627
prepare stmt from "select * from t1";
 
628
execute stmt;
 
629
call p_verify_reprepare_count(0);
 
630
 
 
631
drop view t1;
 
632
create table t1 (a int);
 
633
 
 
634
execute stmt;
 
635
call p_verify_reprepare_count(1);
 
636
 
 
637
drop table t2;
 
638
drop table t1;
 
639
deallocate prepare stmt;
 
640
 
 
641
--echo =====================================================================
 
642
--echo Part 16: VIEW -> TEMPORARY TABLE transitions
 
643
--echo =====================================================================
 
644
 
 
645
create table t2 (a int);
 
646
insert into t2 (a) values (1);
 
647
create view t1 as select * from t2;
 
648
 
 
649
prepare stmt from "select * from t1";
 
650
execute stmt;
 
651
call p_verify_reprepare_count(0);
 
652
 
 
653
create temporary table t1 (a int);
 
654
execute stmt;
 
655
call p_verify_reprepare_count(1);
 
656
drop view t1;
 
657
execute stmt;
 
658
call p_verify_reprepare_count(0);
 
659
 
 
660
drop table t2;
 
661
drop temporary table t1;
 
662
deallocate prepare stmt;
 
663
 
 
664
--echo =====================================================================
 
665
--echo Part 17: VIEW -> VIEW (DDL) transitions
 
666
--echo =====================================================================
 
667
 
 
668
create table t2 (a int);
 
669
insert into t2 values (10), (20), (30);
 
670
 
 
671
create view t1 as select a, 2*a as b, 3*a as c from t2;
 
672
select * from t1;
 
673
 
 
674
prepare stmt from "select * from t1";
 
675
execute stmt;
 
676
 
 
677
drop view t1;
 
678
create view t1 as select a, 2*a as b, 5*a as c from t2;
 
679
select * from t1;
 
680
 
 
681
--echo # Currently a different result from conventional statements.
 
682
--echo # A view is inlined once at prepare, later on view DDL
 
683
--echo # does not affect prepared statement and it is not re-prepared.
 
684
--echo # This is reported in Bug#36002 Prepared statements: if a view
 
685
--echo # used in a statement is replaced, bad data
 
686
execute stmt;
 
687
call p_verify_reprepare_count(0);
 
688
flush table t2;
 
689
execute stmt;
 
690
call p_verify_reprepare_count(1);
 
691
 
 
692
drop table t2;
 
693
drop view t1;
 
694
deallocate prepare stmt;
 
695
 
 
696
--echo =====================================================================
 
697
--echo Part 18: VIEW -> VIEW (VIEW dependencies) transitions
 
698
--echo =====================================================================
 
699
 
 
700
--echo # Part 18a: dependent function has changed
 
701
create table t1 (a int);
 
702
insert into t1 (a) values (1), (2), (3);
 
703
create function f1() returns int return (select max(a) from t1);
 
704
create view v1 as select f1();
 
705
prepare stmt from "select * from v1";
 
706
execute stmt;
 
707
execute stmt;
 
708
call p_verify_reprepare_count(0);
 
709
drop function f1;
 
710
create function f1() returns int return 2;
 
711
--echo # XXX: Used to be another manifestation of Bug#12093.
 
712
--echo # We only used to get a different error
 
713
--echo # message because the non-existing procedure error is masked
 
714
--echo # by the view.
 
715
execute stmt;
 
716
execute stmt;
 
717
call p_verify_reprepare_count(1);
 
718
 
 
719
--echo # Part 18b: dependent procedure has changed (referred to via a function)
 
720
 
 
721
create table t2 (a int);
 
722
insert into t2 (a) values (4), (5), (6);
 
723
 
 
724
drop function f1;
 
725
delimiter |;
 
726
create function f1() returns int
 
727
begin
 
728
  declare x int;
 
729
  call p1(x);
 
730
  return x;
 
731
end|
 
732
delimiter ;|
 
733
create procedure p1(out x int) select max(a) from t1 into x;
 
734
 
 
735
prepare stmt from "select * from v1";
 
736
execute stmt;
 
737
execute stmt;
 
738
call p_verify_reprepare_count(0);
 
739
drop procedure p1;
 
740
create procedure p1(out x int) select max(a) from t2 into x;
 
741
--echo # XXX: used to be a bug. The prelocked list was not invalidated
 
742
--echo # and we kept opening table t1, whereas the procedure
 
743
--echo # is now referring to table t2
 
744
execute stmt;
 
745
call p_verify_reprepare_count(1);
 
746
flush table t1;
 
747
execute stmt;
 
748
call p_verify_reprepare_count(0);
 
749
execute stmt;
 
750
 
 
751
--echo # Test 18-c: dependent VIEW has changed
 
752
 
 
753
drop view v1;
 
754
create view v2 as select a from t1;
 
755
create view v1 as select * from v2;
 
756
prepare stmt from "select * from v1";
 
757
execute stmt;
 
758
execute stmt;
 
759
call p_verify_reprepare_count(0);
 
760
drop view v2;
 
761
create view v2 as select a from t2;
 
762
execute stmt;
 
763
execute stmt;
 
764
call p_verify_reprepare_count(0);
 
765
flush table t1;
 
766
execute stmt;
 
767
call p_verify_reprepare_count(1);
 
768
execute stmt;
 
769
--echo # Test 18-d: dependent TABLE has changed
 
770
drop view v2;
 
771
create table v2 as select * from t1;
 
772
execute stmt;
 
773
call p_verify_reprepare_count(1);
 
774
execute stmt;
 
775
call p_verify_reprepare_count(0);
 
776
drop table v2;
 
777
create table v2 (a int unique) as select * from t2;
 
778
execute stmt;
 
779
call p_verify_reprepare_count(1);
 
780
execute stmt;
 
781
call p_verify_reprepare_count(0);
 
782
 
 
783
--echo # Test 18-e: dependent TABLE trigger has changed
 
784
 
 
785
prepare stmt from "insert into v1 (a) values (?)";
 
786
set @var= 7;
 
787
execute stmt using @var;
 
788
call p_verify_reprepare_count(0);
 
789
create trigger v2_bi before insert on v2 for each row set @message="v2_bi";
 
790
set @var=8;
 
791
execute stmt using @var;
 
792
call p_verify_reprepare_count(1);
 
793
select @message;
 
794
drop trigger v2_bi;
 
795
set @message=null;
 
796
set @var=9;
 
797
execute stmt using @var;
 
798
call p_verify_reprepare_count(1);
 
799
select @message;
 
800
create trigger v2_bi after insert on v2 for each row set @message="v2_ai";
 
801
set @var= 10;
 
802
execute stmt using @var;
 
803
call p_verify_reprepare_count(1);
 
804
select @message;
 
805
select * from v1;
 
806
 
 
807
--echo # Cleanup
 
808
 
 
809
--disable_warnings
 
810
drop table if exists t1, t2, v1, v2;
 
811
drop view if exists v1, v2;
 
812
drop function f1;
 
813
drop procedure p1;
 
814
--enable_warnings
 
815
deallocate prepare stmt;
 
816
 
 
817
--echo =====================================================================
 
818
--echo Part 19: Special tables (INFORMATION_SCHEMA)
 
819
--echo =====================================================================
939
820
 
940
821
# Using a temporary table internally should not confuse the prepared
941
822
# statement code, and should not raise ER_PS_INVALIDATED errors
942
823
prepare stmt from
943
 
 'select ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
 
824
 "select ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
944
825
 from INFORMATION_SCHEMA.ROUTINES where
945
 
 routine_name=\'proc_19\'';
946
 
 
947
 
create procedure proc_19() select "hi there";
948
 
 
949
 
execute stmt;
950
 
eval $check;
951
 
execute stmt;
952
 
eval $check;
953
 
 
954
 
drop procedure proc_19;
955
 
create procedure proc_19() select "hi there, again";
956
 
 
957
 
execute stmt;
958
 
eval $check;
959
 
execute stmt;
960
 
eval $check;
961
 
 
962
 
drop procedure proc_19;
963
 
 
964
 
--echo =====================================================================
965
 
--echo Testing 20: Special tables (log tables)
966
 
--echo =====================================================================
967
 
 
968
 
prepare stmt from
969
 
 'select * from mysql.general_log where argument=\'IMPOSSIBLE QUERY STRING\'';
970
 
 
971
 
execute stmt;
972
 
eval $check;
973
 
execute stmt;
974
 
eval $check;
975
 
execute stmt;
976
 
eval $check;
977
 
execute stmt;
978
 
eval $check;
979
 
 
980
 
--echo =====================================================================
981
 
--echo Testing 21: Special tables (system tables)
982
 
--echo =====================================================================
983
 
 
984
 
--disable_warnings
985
 
drop procedure if exists proc_21;
986
 
--enable_warnings
987
 
 
988
 
prepare stmt from
989
 
 'select type, db, name from mysql.proc where name=\'proc_21\'';
990
 
 
991
 
create procedure proc_21() select "hi there";
992
 
 
993
 
execute stmt;
994
 
eval $check;
995
 
execute stmt;
996
 
eval $check;
997
 
 
998
 
drop procedure proc_21;
999
 
create procedure proc_21() select "hi there, again";
1000
 
 
1001
 
execute stmt;
1002
 
eval $check;
1003
 
execute stmt;
1004
 
eval $check;
1005
 
 
1006
 
drop procedure proc_21;
1007
 
 
1008
 
--echo =====================================================================
1009
 
--echo Testing 22: Special tables (views temp tables)
1010
 
--echo =====================================================================
1011
 
 
1012
 
--disable_warnings
1013
 
drop table if exists t22_b;
1014
 
drop view if exists t22;
1015
 
--enable_warnings
1016
 
 
1017
 
create table t22_b(a int);
1018
 
 
1019
 
create algorithm=temptable view t22 as select a*a as a2 from t22_b;
1020
 
 
1021
 
# Using a temporary table internally should not confuse the prepared
1022
 
# statement code, and should not raise ER_PS_INVALIDATED errors
1023
 
show create view t22;
1024
 
 
1025
 
prepare stmt from 'select * from t22';
1026
 
 
1027
 
insert into t22_b values (1), (2), (3);
1028
 
execute stmt;
1029
 
eval $check;
1030
 
execute stmt;
1031
 
eval $check;
1032
 
 
1033
 
insert into t22_b values (4), (5), (6);
1034
 
execute stmt;
1035
 
eval $check;
1036
 
execute stmt;
1037
 
eval $check;
1038
 
 
1039
 
drop table t22_b;
1040
 
drop view t22;
1041
 
 
1042
 
--echo =====================================================================
1043
 
--echo Testing 23: Special tables (internal join tables)
1044
 
--echo =====================================================================
1045
 
 
1046
 
--disable_warnings
1047
 
drop table if exists t23_a;
1048
 
drop table if exists t23_b;
1049
 
--enable_warnings
1050
 
 
1051
 
create table t23_a(a int);
1052
 
create table t23_b(b int);
1053
 
 
1054
 
# Using a temporary table internally should not confuse the prepared
1055
 
# statement code, and should not raise ER_PS_INVALIDATED errors
1056
 
prepare stmt from 'select * from t23_a join t23_b';
1057
 
 
1058
 
insert into t23_a values (1), (2), (3);
1059
 
insert into t23_b values (10), (20), (30);
1060
 
execute stmt;
1061
 
eval $check;
1062
 
execute stmt;
1063
 
eval $check;
1064
 
 
1065
 
insert into t23_a values (4);
1066
 
insert into t23_b values (40);
1067
 
execute stmt;
1068
 
eval $check;
1069
 
execute stmt;
1070
 
eval $check;
1071
 
 
1072
 
drop table t23_a;
1073
 
drop table t23_b;
1074
 
 
1075
 
--echo =====================================================================
1076
 
--echo Testing 24: Special statements
1077
 
--echo =====================================================================
1078
 
 
1079
 
# SQLCOM_ALTER_TABLE:
1080
 
 
1081
 
--disable_warnings
1082
 
drop table if exists t24_alter;
1083
 
--enable_warnings
1084
 
 
1085
 
create table t24_alter(a int);
1086
 
 
1087
 
prepare stmt from 'alter table t24_alter add column b int';
1088
 
execute stmt;
1089
 
eval $check;
1090
 
 
1091
 
drop table t24_alter;
1092
 
create table t24_alter(a1 int, a2 int);
1093
 
 
1094
 
# t24_alter has changed, and it's not a problem
1095
 
execute stmt;
1096
 
eval $check;
1097
 
 
1098
 
alter table t24_alter drop column b;
1099
 
execute stmt;
1100
 
eval $check;
1101
 
 
1102
 
alter table t24_alter drop column b;
1103
 
execute stmt;
1104
 
eval $check;
1105
 
 
1106
 
drop table t24_alter;
1107
 
 
1108
 
# SQLCOM_REPAIR:
1109
 
 
1110
 
--disable_warnings
1111
 
drop table if exists t24_repair;
1112
 
--enable_warnings
1113
 
 
1114
 
create table t24_repair(a int);
1115
 
insert into t24_repair values (1), (2), (3);
1116
 
 
1117
 
prepare stmt from 'repair table t24_repair';
1118
 
execute stmt;
1119
 
eval $check;
1120
 
 
1121
 
drop table t24_repair;
1122
 
create table t24_repair(a1 int, a2 int);
1123
 
insert into t24_repair values (1, 10), (2, 20), (3, 30);
1124
 
 
1125
 
# t24_repair has changed, and it's not a problem
1126
 
execute stmt;
1127
 
eval $check;
1128
 
 
1129
 
alter table t24_repair add column b varchar(50) default NULL;
1130
 
execute stmt;
1131
 
eval $check;
1132
 
 
1133
 
alter table t24_repair drop column b;
1134
 
execute stmt;
1135
 
eval $check;
1136
 
 
1137
 
drop table t24_repair;
1138
 
 
1139
 
# SQLCOM_ANALYZE:
1140
 
 
1141
 
--disable_warnings
1142
 
drop table if exists t24_analyze;
1143
 
--enable_warnings
1144
 
 
1145
 
create table t24_analyze(a int);
1146
 
insert into t24_analyze values (1), (2), (3);
1147
 
 
1148
 
prepare stmt from 'analyze table t24_analyze';
1149
 
execute stmt;
1150
 
eval $check;
1151
 
 
1152
 
drop table t24_analyze;
1153
 
create table t24_analyze(a1 int, a2 int);
1154
 
insert into t24_analyze values (1, 10), (2, 20), (3, 30);
1155
 
 
1156
 
# t24_analyze has changed, and it's not a problem
1157
 
execute stmt;
1158
 
eval $check;
1159
 
 
1160
 
alter table t24_analyze add column b varchar(50) default NULL;
1161
 
execute stmt;
1162
 
eval $check;
1163
 
 
1164
 
alter table t24_analyze drop column b;
1165
 
execute stmt;
1166
 
eval $check;
1167
 
 
1168
 
drop table t24_analyze;
1169
 
 
1170
 
# SQLCOM_OPTIMIZE:
1171
 
 
1172
 
--disable_warnings
1173
 
drop table if exists t24_optimize;
1174
 
--enable_warnings
1175
 
 
1176
 
create table t24_optimize(a int);
1177
 
insert into t24_optimize values (1), (2), (3);
1178
 
 
1179
 
prepare stmt from 'optimize table t24_optimize';
1180
 
execute stmt;
1181
 
eval $check;
1182
 
 
1183
 
drop table t24_optimize;
1184
 
create table t24_optimize(a1 int, a2 int);
1185
 
insert into t24_optimize values (1, 10), (2, 20), (3, 30);
1186
 
 
1187
 
# t24_optimize has changed, and it's not a problem
1188
 
execute stmt;
1189
 
eval $check;
1190
 
 
1191
 
alter table t24_optimize add column b varchar(50) default NULL;
1192
 
execute stmt;
1193
 
eval $check;
1194
 
 
1195
 
alter table t24_optimize drop column b;
1196
 
execute stmt;
1197
 
eval $check;
1198
 
 
1199
 
drop table t24_optimize;
1200
 
 
1201
 
# SQLCOM_SHOW_CREATE_PROC:
1202
 
 
1203
 
--disable_warnings
1204
 
drop procedure if exists changing_proc;
1205
 
--enable_warnings
1206
 
 
1207
 
prepare stmt from 'show create procedure changing_proc';
1208
 
--error ER_SP_DOES_NOT_EXIST
1209
 
execute stmt;
1210
 
eval $check;
1211
 
--error ER_SP_DOES_NOT_EXIST
1212
 
execute stmt;
1213
 
eval $check;
1214
 
 
1215
 
create procedure changing_proc() begin end;
1216
 
 
1217
 
# changing_proc has changed, and it's not a problem
1218
 
execute stmt;
1219
 
eval $check;
1220
 
execute stmt;
1221
 
eval $check;
1222
 
 
1223
 
drop procedure changing_proc;
1224
 
create procedure changing_proc(x int, y int) begin end;
1225
 
 
1226
 
execute stmt;
1227
 
eval $check;
1228
 
execute stmt;
1229
 
eval $check;
1230
 
 
1231
 
drop procedure changing_proc;
1232
 
 
1233
 
--error ER_SP_DOES_NOT_EXIST
1234
 
execute stmt;
1235
 
eval $check;
1236
 
--error ER_SP_DOES_NOT_EXIST
1237
 
execute stmt;
1238
 
eval $check;
1239
 
 
1240
 
# SQLCOM_SHOW_CREATE_FUNC:
1241
 
 
1242
 
--disable_warnings
1243
 
drop function if exists changing_func;
1244
 
--enable_warnings
1245
 
 
1246
 
prepare stmt from 'show create function changing_func';
1247
 
--error ER_SP_DOES_NOT_EXIST
1248
 
execute stmt;
1249
 
eval $check;
1250
 
--error ER_SP_DOES_NOT_EXIST
1251
 
execute stmt;
1252
 
eval $check;
1253
 
 
1254
 
create function changing_func() returns int return 0;
1255
 
 
1256
 
# changing_proc has changed, and it's not a problem
1257
 
execute stmt;
1258
 
eval $check;
1259
 
execute stmt;
1260
 
eval $check;
1261
 
 
1262
 
drop function changing_func;
1263
 
create function changing_func(x int, y int) returns int return x+y;
1264
 
 
1265
 
execute stmt;
1266
 
eval $check;
1267
 
execute stmt;
1268
 
eval $check;
1269
 
 
1270
 
drop function changing_func;
1271
 
 
1272
 
--error ER_SP_DOES_NOT_EXIST
1273
 
execute stmt;
1274
 
eval $check;
1275
 
--error ER_SP_DOES_NOT_EXIST
1276
 
execute stmt;
1277
 
eval $check;
1278
 
 
1279
 
# SQLCOM_SHOW_CREATE_TRIGGER:
1280
 
 
1281
 
--disable_warnings
1282
 
drop table if exists t24_trigger;
1283
 
--enable_warnings
1284
 
 
1285
 
create table t24_trigger(a int);
1286
 
 
1287
 
prepare stmt from 'show create trigger t24_bi;';
1288
 
--error ER_TRG_DOES_NOT_EXIST
1289
 
execute stmt;
1290
 
eval $check;
1291
 
--error ER_TRG_DOES_NOT_EXIST
1292
 
execute stmt;
1293
 
eval $check;
1294
 
 
1295
 
delimiter $$;
1296
 
create trigger t24_bi before insert on t24_trigger for each row
1297
 
  begin
1298
 
    set @message= "t24_bi";
1299
 
  end
1300
 
$$
1301
 
delimiter ;$$
1302
 
 
1303
 
# t24_bi has changed, and it's not a problem
1304
 
execute stmt;
1305
 
eval $check;
1306
 
execute stmt;
1307
 
eval $check;
1308
 
 
1309
 
drop trigger t24_bi;
1310
 
delimiter $$;
1311
 
create trigger t24_bi before insert on t24_trigger for each row
1312
 
  begin
1313
 
    set @message= "t24_bi (2)";
1314
 
  end
1315
 
$$
1316
 
delimiter ;$$
1317
 
 
1318
 
# t24_bi has changed, and it's not a problem
1319
 
set @expected = @expected + 1;
1320
 
execute stmt;
1321
 
eval $check;
1322
 
execute stmt;
1323
 
eval $check;
1324
 
 
1325
 
drop trigger t24_bi;
1326
 
 
1327
 
--error ER_TRG_DOES_NOT_EXIST
1328
 
execute stmt;
1329
 
eval $check;
1330
 
--error ER_TRG_DOES_NOT_EXIST
1331
 
execute stmt;
1332
 
eval $check;
1333
 
 
1334
 
drop table t24_trigger;
1335
 
 
1336
 
--echo =====================================================================
1337
 
--echo Testing 25: Testing the strength of TABLE_SHARE version
1338
 
--echo =====================================================================
1339
 
 
1340
 
# Test 25-a: number of columns
1341
 
 
1342
 
--disable_warnings
1343
 
drop table if exists t25_num_col;
1344
 
--enable_warnings
1345
 
 
1346
 
create table t25_num_col(a int);
1347
 
 
1348
 
prepare stmt from 'select a from t25_num_col';
1349
 
execute stmt;
1350
 
eval $check;
1351
 
execute stmt;
1352
 
eval $check;
1353
 
 
1354
 
alter table t25_num_col add column b varchar(50) default NULL;
1355
 
 
1356
 
set @expected = @expected + 1;
1357
 
execute stmt;
1358
 
eval $check;
1359
 
execute stmt;
1360
 
eval $check;
1361
 
 
1362
 
drop table t25_num_col;
1363
 
 
1364
 
# Test 25-b: column name
1365
 
 
1366
 
--disable_warnings
1367
 
drop table if exists t25_col_name;
1368
 
--enable_warnings
1369
 
 
1370
 
create table t25_col_name(a int);
1371
 
 
1372
 
prepare stmt from 'select * from t25_col_name';
1373
 
execute stmt;
1374
 
eval $check;
1375
 
execute stmt;
1376
 
eval $check;
1377
 
 
1378
 
alter table t25_col_name change a b int;
1379
 
 
1380
 
set @expected = @expected + 1;
1381
 
--error ER_PS_REBIND
1382
 
execute stmt;
1383
 
eval $check;
1384
 
set @expected = @expected + 1;
1385
 
--error ER_PS_REBIND
1386
 
execute stmt;
1387
 
eval $check;
1388
 
 
1389
 
drop table t25_col_name;
1390
 
 
1391
 
# Test 25-c: column type
1392
 
 
1393
 
--disable_warnings
1394
 
drop table if exists t25_col_type;
1395
 
--enable_warnings
1396
 
 
1397
 
create table t25_col_type(a int);
1398
 
 
1399
 
prepare stmt from 'select * from t25_col_type';
1400
 
execute stmt;
1401
 
eval $check;
1402
 
execute stmt;
1403
 
eval $check;
1404
 
 
1405
 
alter table t25_col_type change a a varchar(10);
1406
 
 
1407
 
set @expected = @expected + 1;
1408
 
--error ER_PS_REBIND
1409
 
execute stmt;
1410
 
eval $check;
1411
 
set @expected = @expected + 1;
1412
 
--error ER_PS_REBIND
1413
 
execute stmt;
1414
 
eval $check;
1415
 
 
1416
 
drop table t25_col_type;
1417
 
 
1418
 
# Test 25-d: column type length
1419
 
 
1420
 
--disable_warnings
1421
 
drop table if exists t25_col_type_length;
1422
 
--enable_warnings
1423
 
 
1424
 
create table t25_col_type_length(a varchar(10));
1425
 
 
1426
 
prepare stmt from 'select * from t25_col_type_length';
1427
 
execute stmt;
1428
 
eval $check;
1429
 
execute stmt;
1430
 
eval $check;
1431
 
 
1432
 
alter table t25_col_type_length change a a varchar(20);
1433
 
 
1434
 
set @expected = @expected + 1;
1435
 
--error ER_PS_REBIND
1436
 
execute stmt;
1437
 
eval $check;
1438
 
set @expected = @expected + 1;
1439
 
--error ER_PS_REBIND
1440
 
execute stmt;
1441
 
eval $check;
1442
 
 
1443
 
drop table t25_col_type_length;
1444
 
 
1445
 
# Test 25-e: column NULL property
1446
 
 
1447
 
--disable_warnings
1448
 
drop table if exists t25_col_null;
1449
 
--enable_warnings
1450
 
 
1451
 
create table t25_col_null(a varchar(10));
1452
 
 
1453
 
prepare stmt from 'select * from t25_col_null';
1454
 
execute stmt;
1455
 
eval $check;
1456
 
execute stmt;
1457
 
eval $check;
1458
 
 
1459
 
alter table t25_col_null change a a varchar(10) NOT NULL;
1460
 
 
1461
 
set @expected = @expected + 1;
1462
 
--error ER_PS_REBIND
1463
 
execute stmt;
1464
 
eval $check;
1465
 
set @expected = @expected + 1;
1466
 
--error ER_PS_REBIND
1467
 
execute stmt;
1468
 
eval $check;
1469
 
 
1470
 
drop table t25_col_null;
1471
 
 
1472
 
# Test 25-f: column DEFAULT
1473
 
 
1474
 
--disable_warnings
1475
 
drop table if exists t25_col_default;
1476
 
--enable_warnings
1477
 
 
1478
 
create table t25_col_default(a int, b int DEFAULT 10);
1479
 
 
1480
 
prepare stmt from 'insert into t25_col_default(a) values (?)';
1481
 
set @val=1;
1482
 
execute stmt using @val;
1483
 
eval $check;
1484
 
set @val=2;
1485
 
execute stmt using @val;
1486
 
eval $check;
1487
 
 
1488
 
alter table t25_col_default change b b int DEFAULT 20;
1489
 
 
1490
 
set @val=3;
1491
 
# Must insert the correct default value for b
1492
 
set @expected = @expected + 1;
1493
 
execute stmt using @val;
1494
 
eval $check;
1495
 
 
1496
 
set @val=4;
1497
 
# Must insert the correct default value for b
1498
 
execute stmt using @val;
1499
 
eval $check;
1500
 
 
1501
 
select * from t25_col_default;
1502
 
 
1503
 
drop table t25_col_default;
1504
 
 
1505
 
# Test 25-g: number of keys
1506
 
 
1507
 
--disable_warnings
1508
 
drop table if exists t25_index;
1509
 
--enable_warnings
1510
 
 
1511
 
create table t25_index(a varchar(10));
1512
 
 
1513
 
prepare stmt from 'select * from t25_index';
1514
 
execute stmt;
1515
 
eval $check;
1516
 
execute stmt;
1517
 
eval $check;
1518
 
 
1519
 
create index i1 on t25_index(a);
1520
 
 
1521
 
set @expected = @expected + 1;
1522
 
execute stmt;
1523
 
eval $check;
1524
 
execute stmt;
1525
 
eval $check;
1526
 
 
1527
 
drop table t25_index;
1528
 
 
1529
 
# Test 25-h: changing index uniqueness
1530
 
 
1531
 
--disable_warnings
1532
 
drop table if exists t25_index_unique;
1533
 
--enable_warnings
1534
 
 
1535
 
create table t25_index_unique(a varchar(10), b varchar(10));
1536
 
create index i1 on t25_index_unique(a, b);
1537
 
 
1538
 
show create table t25_index_unique;
1539
 
 
1540
 
prepare stmt from 'select * from t25_index_unique';
1541
 
execute stmt;
1542
 
eval $check;
1543
 
execute stmt;
1544
 
eval $check;
1545
 
 
1546
 
alter table t25_index_unique drop index i1;
1547
 
create unique index i1 on t25_index_unique(a, b);
1548
 
 
1549
 
show create table t25_index_unique;
1550
 
 
1551
 
set @expected = @expected + 1;
1552
 
execute stmt;
1553
 
eval $check;
1554
 
execute stmt;
1555
 
eval $check;
1556
 
 
1557
 
drop table t25_index_unique;
 
826
 routine_name='p1'";
 
827
 
 
828
create procedure p1() select "hi there";
 
829
 
 
830
execute stmt;
 
831
execute stmt;
 
832
 
 
833
drop procedure p1;
 
834
create procedure p1() select "hi there, again";
 
835
 
 
836
execute stmt;
 
837
execute stmt;
 
838
call p_verify_reprepare_count(0);
 
839
 
 
840
drop procedure p1;
 
841
deallocate prepare stmt;
 
842
 
 
843
--echo =====================================================================
 
844
--echo Part 20: Special tables (log tables)
 
845
--echo =====================================================================
 
846
 
 
847
prepare stmt from
 
848
 "select * from mysql.general_log where argument='IMPOSSIBLE QUERY STRING'";
 
849
 
 
850
--disable_result_log
 
851
execute stmt;
 
852
execute stmt;
 
853
execute stmt;
 
854
execute stmt;
 
855
--enable_result_log
 
856
call p_verify_reprepare_count(0);
 
857
deallocate prepare stmt;
 
858
 
 
859
--echo =====================================================================
 
860
--echo Part 21: Special tables (system tables)
 
861
--echo =====================================================================
 
862
 
 
863
prepare stmt from
 
864
 "select type, db, name from mysql.proc where name='p1'";
 
865
 
 
866
create procedure p1() select "hi there";
 
867
 
 
868
execute stmt;
 
869
execute stmt;
 
870
 
 
871
drop procedure p1;
 
872
create procedure p1() select "hi there, again";
 
873
 
 
874
execute stmt;
 
875
execute stmt;
 
876
call p_verify_reprepare_count(0);
 
877
 
 
878
drop procedure p1;
 
879
deallocate prepare stmt;
 
880
 
 
881
--echo =====================================================================
 
882
--echo Part 22: Special tables (views temp tables)
 
883
--echo =====================================================================
 
884
 
 
885
create table t1 (a int);
 
886
 
 
887
create algorithm=temptable view v1 as select a*a as a2 from t1;
 
888
 
 
889
--echo # Using a temporary table internally should not confuse the prepared
 
890
--echo # statement code, and should not raise ER_PS_INVALIDATED errors
 
891
show create view v1;
 
892
 
 
893
prepare stmt from "select * from v1";
 
894
 
 
895
insert into t1 values (1), (2), (3);
 
896
execute stmt;
 
897
execute stmt;
 
898
 
 
899
insert into t1 values (4), (5), (6);
 
900
execute stmt;
 
901
execute stmt;
 
902
call p_verify_reprepare_count(0);
 
903
 
 
904
drop table t1;
 
905
drop view v1;
 
906
 
 
907
--echo =====================================================================
 
908
--echo Part 23: Special statements
 
909
--echo =====================================================================
 
910
 
 
911
--echo # SQLCOM_ALTER_TABLE:
 
912
 
 
913
 
 
914
create table t1 (a int);
 
915
 
 
916
prepare stmt from "alter table t1 add column b int";
 
917
execute stmt;
 
918
 
 
919
drop table t1;
 
920
create table t1 (a1 int, a2 int);
 
921
 
 
922
--echo # t1 has changed, and it's does not lead to reprepare
 
923
execute stmt;
 
924
 
 
925
alter table t1 drop column b;
 
926
execute stmt;
 
927
 
 
928
alter table t1 drop column b;
 
929
execute stmt;
 
930
call p_verify_reprepare_count(0);
 
931
 
 
932
drop table t1;
 
933
 
 
934
--echo # SQLCOM_REPAIR:
 
935
 
 
936
create table t1 (a int);
 
937
 
 
938
insert into t1 values (1), (2), (3);
 
939
 
 
940
prepare stmt from "repair table t1";
 
941
 
 
942
execute stmt;
 
943
execute stmt;
 
944
 
 
945
drop table t1;
 
946
create table t1 (a1 int, a2 int);
 
947
insert into t1 values (1, 10), (2, 20), (3, 30);
 
948
 
 
949
--echo # t1 has changed, and it's does not lead to reprepare
 
950
execute stmt;
 
951
 
 
952
alter table t1 add column b varchar(50) default NULL;
 
953
execute stmt;
 
954
call p_verify_reprepare_count(0);
 
955
 
 
956
alter table t1 drop column b;
 
957
execute stmt;
 
958
call p_verify_reprepare_count(0);
 
959
 
 
960
--echo # SQLCOM_ANALYZE:
 
961
 
 
962
prepare stmt from "analyze table t1";
 
963
execute stmt;
 
964
 
 
965
drop table t1;
 
966
create table t1 (a1 int, a2 int);
 
967
insert into t1 values (1, 10), (2, 20), (3, 30);
 
968
--echo # t1 has changed, and it's not a problem
 
969
execute stmt;
 
970
 
 
971
alter table t1 add column b varchar(50) default NULL;
 
972
execute stmt;
 
973
 
 
974
alter table t1 drop column b;
 
975
execute stmt;
 
976
 
 
977
call p_verify_reprepare_count(0);
 
978
 
 
979
--echo # SQLCOM_OPTIMIZE:
 
980
 
 
981
prepare stmt from "optimize table t1";
 
982
execute stmt;
 
983
 
 
984
drop table t1;
 
985
create table t1 (a1 int, a2 int);
 
986
insert into t1 values (1, 10), (2, 20), (3, 30);
 
987
 
 
988
--echo # t1 has changed, and it's not a problem
 
989
execute stmt;
 
990
 
 
991
alter table t1 add column b varchar(50) default NULL;
 
992
execute stmt;
 
993
 
 
994
alter table t1 drop column b;
 
995
execute stmt;
 
996
call p_verify_reprepare_count(0);
 
997
 
 
998
drop table t1;
 
999
 
 
1000
--echo # SQLCOM_SHOW_CREATE_PROC:
 
1001
 
 
1002
prepare stmt from "show create procedure p1";
 
1003
--error ER_SP_DOES_NOT_EXIST
 
1004
execute stmt;
 
1005
--error ER_SP_DOES_NOT_EXIST
 
1006
execute stmt;
 
1007
 
 
1008
create procedure p1() begin end;
 
1009
 
 
1010
--disable_result_log
 
1011
execute stmt;
 
1012
execute stmt;
 
1013
--enable_result_log
 
1014
 
 
1015
drop procedure p1;
 
1016
create procedure p1(x int, y int) begin end;
 
1017
 
 
1018
--disable_result_log
 
1019
execute stmt;
 
1020
execute stmt;
 
1021
--enable_result_log
 
1022
 
 
1023
drop procedure p1;
 
1024
 
 
1025
--error ER_SP_DOES_NOT_EXIST
 
1026
execute stmt;
 
1027
--error ER_SP_DOES_NOT_EXIST
 
1028
execute stmt;
 
1029
call p_verify_reprepare_count(0);
 
1030
 
 
1031
--echo # SQLCOM_SHOW_CREATE_FUNC:
 
1032
 
 
1033
prepare stmt from "show create function f1";
 
1034
--error ER_SP_DOES_NOT_EXIST
 
1035
execute stmt;
 
1036
--error ER_SP_DOES_NOT_EXIST
 
1037
execute stmt;
 
1038
 
 
1039
create function f1() returns int return 0;
 
1040
 
 
1041
--disable_result_log
 
1042
execute stmt;
 
1043
execute stmt;
 
1044
--enable_result_log
 
1045
 
 
1046
drop function f1;
 
1047
create function f1(x int, y int) returns int return x+y;
 
1048
 
 
1049
--disable_result_log
 
1050
execute stmt;
 
1051
execute stmt;
 
1052
--enable_result_log
 
1053
 
 
1054
drop function f1;
 
1055
 
 
1056
--error ER_SP_DOES_NOT_EXIST
 
1057
execute stmt;
 
1058
--error ER_SP_DOES_NOT_EXIST
 
1059
execute stmt;
 
1060
call p_verify_reprepare_count(0);
 
1061
 
 
1062
--echo # SQLCOM_SHOW_CREATE_TRIGGER:
 
1063
 
 
1064
create table t1 (a int);
 
1065
 
 
1066
prepare stmt from "show create trigger t1_bi";
 
1067
--error ER_TRG_DOES_NOT_EXIST
 
1068
execute stmt;
 
1069
--error ER_TRG_DOES_NOT_EXIST
 
1070
execute stmt;
 
1071
 
 
1072
create trigger t1_bi before insert on t1 for each row set @message= "t1_bi";
 
1073
 
 
1074
--disable_result_log
 
1075
execute stmt;
 
1076
execute stmt;
 
1077
--enable_result_log
 
1078
 
 
1079
drop trigger t1_bi;
 
1080
 
 
1081
create trigger t1_bi before insert on t1 for each row set @message= "t1_bi (2)";
 
1082
 
 
1083
--disable_result_log
 
1084
execute stmt;
 
1085
execute stmt;
 
1086
--enable_result_log
 
1087
 
 
1088
drop trigger t1_bi;
 
1089
 
 
1090
--error ER_TRG_DOES_NOT_EXIST
 
1091
execute stmt;
 
1092
--error ER_TRG_DOES_NOT_EXIST
 
1093
execute stmt;
 
1094
call p_verify_reprepare_count(0);
 
1095
 
 
1096
drop table t1;
 
1097
deallocate prepare stmt;
 
1098
 
 
1099
--echo =====================================================================
 
1100
--echo Part 24: Testing the strength of TABLE_SHARE version
 
1101
--echo =====================================================================
 
1102
 
 
1103
--echo # Test 24-a: number of columns
 
1104
 
 
1105
create table t1 (a int);
 
1106
 
 
1107
prepare stmt from "select a from t1";
 
1108
execute stmt;
 
1109
call p_verify_reprepare_count(0);
 
1110
 
 
1111
alter table t1 add column b varchar(50) default NULL;
 
1112
 
 
1113
execute stmt;
 
1114
call p_verify_reprepare_count(1);
 
1115
execute stmt;
 
1116
call p_verify_reprepare_count(0);
 
1117
 
 
1118
--echo # Test 24-b: column name
 
1119
 
 
1120
alter table t1 change b c int;
 
1121
execute stmt;
 
1122
call p_verify_reprepare_count(1);
 
1123
execute stmt;
 
1124
call p_verify_reprepare_count(0);
 
1125
 
 
1126
--echo # Test 24-c: column type
 
1127
 
 
1128
alter table t1 change a a varchar(10);
 
1129
 
 
1130
execute stmt;
 
1131
call p_verify_reprepare_count(1);
 
1132
execute stmt;
 
1133
call p_verify_reprepare_count(0);
 
1134
 
 
1135
--echo # Test 24-d: column type length
 
1136
 
 
1137
alter table t1 change a a varchar(20);
 
1138
 
 
1139
execute stmt;
 
1140
call p_verify_reprepare_count(1);
 
1141
execute stmt;
 
1142
call p_verify_reprepare_count(0);
 
1143
 
 
1144
--echo # Test 24-e: column NULL property
 
1145
 
 
1146
alter table t1 change a a varchar(20) NOT NULL;
 
1147
 
 
1148
execute stmt;
 
1149
call p_verify_reprepare_count(1);
 
1150
execute stmt;
 
1151
call p_verify_reprepare_count(0);
 
1152
 
 
1153
--echo # Test 24-f: column DEFAULT
 
1154
 
 
1155
alter table t1 change c c int DEFAULT 20;
 
1156
 
 
1157
execute stmt;
 
1158
call p_verify_reprepare_count(1);
 
1159
execute stmt;
 
1160
call p_verify_reprepare_count(0);
 
1161
 
 
1162
--echo # Test 24-g: number of keys
 
1163
create unique index t1_a_idx on t1 (a);
 
1164
 
 
1165
execute stmt;
 
1166
call p_verify_reprepare_count(1);
 
1167
execute stmt;
 
1168
call p_verify_reprepare_count(0);
 
1169
 
 
1170
--echo # Test 24-h: changing index uniqueness
 
1171
 
 
1172
drop index t1_a_idx on t1;
 
1173
create index t1_a_idx on t1 (a);
 
1174
 
 
1175
execute stmt;
 
1176
call p_verify_reprepare_count(1);
 
1177
execute stmt;
 
1178
call p_verify_reprepare_count(0);
 
1179
 
 
1180
--echo # Cleanup
 
1181
drop table t1;
 
1182
 
 
1183
deallocate prepare stmt;
1558
1184
 
1559
1185
--echo =====================================================================
1560
1186
--echo Testing reported bugs
1561
1187
--echo =====================================================================
1562
1188
 
1563
 
#
1564
 
# Bug#12093 (SP not found on second PS execution if another thread drops
1565
 
# other SP in between)
1566
 
#
1567
 
 
1568
 
--disable_warnings
1569
 
drop table if exists table_12093;
1570
 
drop function if exists func_12093;
1571
 
drop function if exists func_12093_unrelated;
1572
 
drop procedure if exists proc_12093;
1573
 
--enable_warnings
1574
 
 
1575
 
connect (con1,localhost,root,,);
1576
 
 
1577
 
connection default;
1578
 
 
1579
 
create table table_12093(a int);
1580
 
 
1581
 
delimiter //;
1582
 
 
1583
 
create function func_12093()
1584
 
returns int
1585
 
begin
1586
 
  return (select count(*) from table_12093);
1587
 
end//
1588
 
 
1589
 
create procedure proc_12093(a int)
1590
 
begin
1591
 
  select * from table_12093;
1592
 
end//
1593
 
 
1594
 
delimiter ;//
1595
 
 
1596
 
create function func_12093_unrelated() returns int return 2;
1597
 
create procedure proc_12093_unrelated() begin end;
1598
 
 
1599
 
prepare stmt_sf from 'select func_12093();';
1600
 
prepare stmt_sp from 'call proc_12093(func_12093())';
1601
 
 
1602
 
execute stmt_sf;
1603
 
eval $check;
1604
 
execute stmt_sp;
1605
 
eval $check;
1606
 
 
1607
 
connection con1;
1608
 
 
1609
 
drop function func_12093_unrelated;
1610
 
drop procedure proc_12093_unrelated;
1611
 
 
1612
 
connection default;
1613
 
 
1614
 
# previously, failed with --error 1305
1615
 
execute stmt_sf;
1616
 
eval $check;
1617
 
# previously, failed with --error 1305
1618
 
execute stmt_sp;
1619
 
eval $check;
1620
 
 
1621
 
# previously, failed with --error 1305
1622
 
execute stmt_sf;
1623
 
eval $check;
1624
 
# previously, failed with --error 1305
1625
 
execute stmt_sp;
1626
 
eval $check;
1627
 
 
1628
 
deallocate prepare stmt_sf;
1629
 
deallocate prepare stmt_sp;
1630
 
 
1631
 
disconnect con1;
1632
 
 
1633
 
drop table table_12093;
1634
 
drop function func_12093;
1635
 
drop procedure proc_12093;
1636
 
 
1637
 
#
1638
 
# Bug#21294 (executing a prepared statement that executes a stored function
1639
 
# which was recreat)
1640
 
#
1641
 
 
1642
 
--disable_warnings
1643
 
drop function if exists func_21294;
1644
 
--enable_warnings
1645
 
 
1646
 
create function func_21294() returns int return 10;
1647
 
 
1648
 
prepare stmt from "select func_21294()";
1649
 
execute stmt;
1650
 
eval $check;
1651
 
 
1652
 
drop function func_21294;
1653
 
create function func_21294() returns int return 10;
1654
 
 
1655
 
# might pass or fail, implementation dependent
1656
 
execute stmt;
1657
 
eval $check;
1658
 
 
1659
 
drop function func_21294;
1660
 
create function func_21294() returns int return 20;
1661
 
 
1662
 
set @expected = @expected + 1;
1663
 
execute stmt;
1664
 
eval $check;
1665
 
 
1666
 
deallocate prepare stmt;
1667
 
drop function func_21294;
1668
 
 
1669
 
#
1670
 
# Bug#27420 (A combination of PS and view operations cause error + assertion
1671
 
# on shutdown)
1672
 
#
 
1189
--echo #
 
1190
--echo # Bug#27420 A combination of PS and view operations cause
 
1191
--echo # error + assertion on shutdown
 
1192
--echo #
1673
1193
 
1674
1194
--disable_warnings
1675
1195
drop table if exists t_27420_100;
1677
1197
drop view if exists v_27420;
1678
1198
--enable_warnings
1679
1199
 
1680
 
connect (con1,localhost,root,,);
1681
 
 
1682
 
connection default;
1683
 
 
1684
1200
create table t_27420_100(a int);
1685
1201
insert into t_27420_100 values (1), (2);
1686
1202
 
1691
1207
  from t_27420_100, t_27420_101
1692
1208
  where t_27420_100.a=t_27420_101.a;
1693
1209
 
1694
 
prepare stmt from 'select * from v_27420';
 
1210
prepare stmt from "select * from v_27420";
1695
1211
 
1696
1212
execute stmt;
1697
 
eval $check;
1698
 
 
1699
 
connection con1;
 
1213
call p_verify_reprepare_count(0);
1700
1214
 
1701
1215
drop view v_27420;
1702
1216
create table v_27420(X int, Y int);
1703
1217
 
1704
 
connection default;
1705
 
 
1706
 
set @expected = @expected + 1;
1707
1218
execute stmt;
1708
 
eval $check;
1709
 
 
1710
 
connection con1;
 
1219
call p_verify_reprepare_count(1);
1711
1220
 
1712
1221
drop table v_27420;
1713
1222
# passes in 5.0, fails in 5.1, should pass
1714
1223
create table v_27420 (a int, b int, filler char(200));
1715
1224
 
1716
 
connection default;
1717
 
 
1718
 
set @expected = @expected + 1;
1719
 
--error ER_PS_REBIND
1720
1225
execute stmt;
1721
 
eval $check;
1722
 
 
1723
 
disconnect con1;
1724
 
 
1725
 
deallocate prepare stmt;
 
1226
call p_verify_reprepare_count(1);
 
1227
 
1726
1228
drop table t_27420_100;
1727
1229
drop table t_27420_101;
1728
1230
drop table v_27420;
 
1231
deallocate prepare stmt;
1729
1232
 
1730
 
#
1731
 
# Bug#27430 (Crash in subquery code when in PS and table DDL changed after
1732
 
# PREPARE)
1733
 
#
 
1233
--echo #
 
1234
--echo # Bug#27430 Crash in subquery code when in PS and table DDL changed
 
1235
--echo # after PREPARE
 
1236
--echo #
1734
1237
 
1735
1238
--disable_warnings
1736
1239
drop table if exists t_27430_1;
1752
1255
  (1234, 3),
1753
1256
  (1234, 4);
1754
1257
 
1755
 
prepare stmt from 
1756
 
 'select oref, a, a in (select a from t_27430_1 where oref=t_27430_2.oref) Z from t_27430_2';
 
1258
prepare stmt from
 
1259
 "select oref, a, a in (select a from t_27430_1 where oref=t_27430_2.oref) Z from t_27430_2";
1757
1260
 
1758
 
execute stmt; 
1759
 
eval $check;
1760
 
execute stmt; 
1761
 
eval $check;
 
1261
execute stmt;
 
1262
call p_verify_reprepare_count(0);
1762
1263
 
1763
1264
drop table t_27430_1, t_27430_2;
1764
1265
 
1765
1266
create table t_27430_1 (a int, oref int, key(a));
1766
 
insert into t_27430_1 values 
 
1267
insert into t_27430_1 values
1767
1268
  (1, 1),
1768
1269
  (1, NULL),
1769
1270
  (2, 3),
1777
1278
  (NULL, 3),
1778
1279
  (NULL, 4);
1779
1280
 
1780
 
set @expected = @expected + 1;
1781
 
--error ER_PS_REBIND
1782
 
execute stmt;
1783
 
eval $check;
1784
 
set @expected = @expected + 1;
1785
 
--error ER_PS_REBIND
1786
 
execute stmt;
1787
 
eval $check;
 
1281
execute stmt;
 
1282
call p_verify_reprepare_count(1);
1788
1283
 
1789
 
deallocate prepare stmt;
1790
1284
drop table t_27430_1;
1791
1285
drop table t_27430_2;
 
1286
deallocate prepare stmt;
1792
1287
 
1793
 
#
1794
 
# Bug#27690 (Re-execution of prepared statement after table was replaced
1795
 
# with a view crashes)
1796
 
#
 
1288
--echo #
 
1289
--echo # Bug#27690 Re-execution of prepared statement after table
 
1290
--echo # was replaced with a view crashes
 
1291
--echo #
1797
1292
 
1798
1293
--disable_warnings
1799
1294
drop table if exists t_27690_1;
1807
1302
create table v_27690_1 as select * from t_27690_1;
1808
1303
create table v_27690_2 as select * from t_27690_1;
1809
1304
 
1810
 
prepare stmt from 'select * from v_27690_1, v_27690_2'; 
 
1305
prepare stmt from "select * from v_27690_1, v_27690_2";
1811
1306
 
1812
1307
execute stmt;
1813
 
eval $check;
1814
1308
execute stmt;
1815
 
eval $check;
1816
1309
 
1817
1310
drop table v_27690_1;
1818
1311
 
1819
1312
--error ER_NO_SUCH_TABLE
1820
1313
execute stmt;
1821
 
eval $check;
1822
1314
 
1823
1315
--error ER_NO_SUCH_TABLE
1824
1316
execute stmt;
1825
 
eval $check;
 
1317
call p_verify_reprepare_count(0);
1826
1318
 
1827
1319
create view v_27690_1 as select A.a, A.b from t_27690_1 A, t_27690_1 B;
1828
1320
 
1829
 
set @expected = @expected + 1;
1830
 
execute stmt;
1831
 
eval $check;
1832
 
execute stmt;
1833
 
eval $check;
 
1321
execute stmt;
 
1322
call p_verify_reprepare_count(1);
 
1323
execute stmt;
 
1324
call p_verify_reprepare_count(0);
1834
1325
 
1835
 
deallocate prepare stmt;
1836
1326
drop table t_27690_1;
1837
1327
drop view v_27690_1;
1838
1328
drop table v_27690_2;
1839
 
 
 
1329
deallocate prepare stmt;
 
1330
 
 
1331
--echo #=====================================================================
 
1332
--echo #
 
1333
--echo # Bug#21294 Executing a prepared statement that executes
 
1334
--echo # a stored function which was recreat
 
1335
--echo #
 
1336
 
 
1337
create function f1() returns int return 10;
 
1338
 
 
1339
prepare stmt from "select f1()";
 
1340
execute stmt;
 
1341
 
 
1342
drop function f1;
 
1343
create function f1() returns int return 10;
 
1344
 
 
1345
# might pass or fail, implementation dependent
 
1346
execute stmt;
 
1347
 
 
1348
drop function f1;
 
1349
create function f1() returns int return 20;
 
1350
 
 
1351
execute stmt;
 
1352
call p_verify_reprepare_count(2);
 
1353
 
 
1354
drop function f1;
 
1355
deallocate prepare stmt;
 
1356
 
 
1357
--echo #
 
1358
--echo # Bug#12093 SP not found on second PS execution if another thread drops
 
1359
--echo # other SP in between
 
1360
--echo #
 
1361
--disable_warnings
 
1362
drop table if exists t_12093;
 
1363
drop function if exists f_12093;
 
1364
drop function if exists f_12093_unrelated;
 
1365
drop procedure if exists p_12093;
 
1366
--enable_warnings
 
1367
 
 
1368
create table t_12093 (a int);
 
1369
 
 
1370
create function f_12093() returns int return (select count(*) from t_12093);
 
1371
 
 
1372
create procedure p_12093(a int) select * from t_12093;
 
1373
 
 
1374
create function f_12093_unrelated() returns int return 2;
 
1375
create procedure p_12093_unrelated() begin end;
 
1376
 
 
1377
prepare stmt_sf from 'select f_12093();';
 
1378
prepare stmt_sp from 'call p_12093(f_12093())';
 
1379
 
 
1380
execute stmt_sf;
 
1381
execute stmt_sp;
 
1382
 
 
1383
connect (con1,localhost,root,,);
 
1384
connection con1;
 
1385
 
 
1386
drop function f_12093_unrelated;
 
1387
drop procedure p_12093_unrelated;
 
1388
 
 
1389
connection default;
 
1390
 
 
1391
--echo # XXX: used to be a bug
 
1392
execute stmt_sf;
 
1393
--echo # XXX: used to be a bug
 
1394
execute stmt_sp;
 
1395
 
 
1396
--echo # XXX: used to be a bug
 
1397
execute stmt_sf;
 
1398
--echo # XXX: used to be a bug
 
1399
execute stmt_sp;
 
1400
call p_verify_reprepare_count(2);
 
1401
 
 
1402
disconnect con1;
 
1403
 
 
1404
drop table t_12093;
 
1405
drop function f_12093;
 
1406
drop procedure p_12093;
 
1407
deallocate prepare stmt_sf;
 
1408
deallocate prepare stmt_sp;
 
1409
 
 
1410
 
 
1411
--echo =====================================================================
 
1412
--echo Ensure that metadata validation is performed for every type of
 
1413
--echo SQL statement where it is needed.
 
1414
--echo =====================================================================
 
1415
 
 
1416
--echo #
 
1417
--echo # SQLCOM_SELECT
 
1418
--echo #
 
1419
 
 
1420
#--disable_warnings
 
1421
#drop table if exists t1;
 
1422
#--enable_warnings
 
1423
#create table t1 (a int);
 
1424
#prepare stmt from "select 1 as res from dual where (1) in (select * from t1)";
 
1425
#drop table t1;
 
1426
#create table t1 (x int);
 
1427
#execute stmt;
 
1428
#drop table t1;
 
1429
#deallocate prepare stmt;
 
1430
#call p_verify_reprepare_count(1);
 
1431
 
 
1432
--echo #
 
1433
--echo # SQLCOM_CREATE_TABLE
 
1434
--echo #
 
1435
 
 
1436
--disable_warnings
 
1437
drop table if exists t1;
 
1438
drop table if exists t2;
 
1439
--enable_warnings
 
1440
create table t1 (a int);
 
1441
prepare stmt from 'create table t2 as select * from t1';
 
1442
execute stmt;
 
1443
drop table t2;
 
1444
execute stmt;
 
1445
drop table t2;
 
1446
execute stmt;
 
1447
call p_verify_reprepare_count(0);
 
1448
# Base table with name of table to be created exists
 
1449
--error ER_TABLE_EXISTS_ERROR
 
1450
execute stmt;
 
1451
call p_verify_reprepare_count(1);
 
1452
--error ER_TABLE_EXISTS_ERROR
 
1453
execute stmt;
 
1454
call p_verify_reprepare_count(0);
 
1455
drop table t2;
 
1456
# Temporary table with name of table to be created exists
 
1457
create temporary table t2 (a int);
 
1458
--error ER_TABLE_EXISTS_ERROR
 
1459
execute stmt;
 
1460
call p_verify_reprepare_count(1);
 
1461
--error ER_TABLE_EXISTS_ERROR
 
1462
execute stmt;
 
1463
call p_verify_reprepare_count(0);
 
1464
drop temporary table t2;
 
1465
execute stmt;
 
1466
call p_verify_reprepare_count(0);
 
1467
drop table t2;
 
1468
execute stmt;
 
1469
call p_verify_reprepare_count(0);
 
1470
drop table t2;
 
1471
# View with name of table to be created exists
 
1472
# Attention:
 
1473
#    We cannot print the error message because it contains a random filename.
 
1474
#    Example: 1050: Table '<some_path>/var/tmp/#sql_6979_0' already exists
 
1475
#    Therefore we mangle it via
 
1476
#    "--error ER_TABLE_EXISTS_ERROR,9999" (9999 is currently not used)
 
1477
#    to "Got one of the listed errors".
 
1478
create view t2 as select 1;
 
1479
--error ER_TABLE_EXISTS_ERROR,9999
 
1480
execute stmt;
 
1481
call p_verify_reprepare_count(1);
 
1482
--error ER_TABLE_EXISTS_ERROR,9999
 
1483
execute stmt;
 
1484
call p_verify_reprepare_count(0);
 
1485
drop view t2;
 
1486
drop table t1;
 
1487
# Table to be used recreated (drop,create) with different layout
 
1488
create table t1 (x varchar(20));
 
1489
execute stmt;
 
1490
call p_verify_reprepare_count(1);
 
1491
select * from t2;
 
1492
drop table t2;
 
1493
execute stmt;
 
1494
call p_verify_reprepare_count(0);
 
1495
drop table t2;
 
1496
# Table to be used has a modified (alter table) layout
 
1497
alter table t1 add column y decimal(10,3);
 
1498
execute stmt;
 
1499
call p_verify_reprepare_count(1);
 
1500
select * from t2;
 
1501
drop table t2;
 
1502
execute stmt;
 
1503
call p_verify_reprepare_count(0);
 
1504
drop table t1;
 
1505
deallocate prepare stmt;
 
1506
--echo # XXX: no validation of the first table in case of
 
1507
--echo # CREATE TEMPORARY TABLE. This is a shortcoming of the current code,
 
1508
--echo # but since validation is not strictly necessary, nothing is done
 
1509
--echo # about it.
 
1510
--echo # Will be fixed as part of work on Bug#21431 "Incomplete support of
 
1511
--echo # temporary tables"
 
1512
create table t1 (a int);
 
1513
insert into t1 (a) values (1);
 
1514
prepare stmt from "create temporary table if not exists t2 as select * from t1";
 
1515
execute stmt;
 
1516
drop table t2;
 
1517
execute stmt;
 
1518
execute stmt;
 
1519
select * from t2;
 
1520
execute stmt;
 
1521
select * from t2;
 
1522
drop table t2;
 
1523
create temporary table t2 (a varchar(10));
 
1524
execute stmt;
 
1525
select * from t2;
 
1526
call p_verify_reprepare_count(0);
 
1527
drop table t1;
 
1528
create table t1 (x int);
 
1529
execute stmt;
 
1530
call p_verify_reprepare_count(1);
 
1531
execute stmt;
 
1532
call p_verify_reprepare_count(0);
 
1533
drop table t1;
 
1534
drop temporary table t2;
 
1535
drop table t2;
 
1536
deallocate prepare stmt;
 
1537
 
 
1538
create table t1 (a int);
 
1539
prepare stmt from "create table t2 like t1";
 
1540
execute stmt;
 
1541
call p_verify_reprepare_count(0);
 
1542
drop table t2;
 
1543
execute stmt;
 
1544
call p_verify_reprepare_count(0);
 
1545
drop table t2;
 
1546
# Table to be used does not exist
 
1547
drop table t1;
 
1548
--error ER_NO_SUCH_TABLE
 
1549
execute stmt;
 
1550
call p_verify_reprepare_count(0);
 
1551
--error ER_NO_SUCH_TABLE
 
1552
execute stmt;
 
1553
call p_verify_reprepare_count(0);
 
1554
# Table to be used recreated (drop,create) with different layout
 
1555
create table t1 (x char(17));
 
1556
execute stmt;
 
1557
call p_verify_reprepare_count(1);
 
1558
drop table t2;
 
1559
execute stmt;
 
1560
call p_verify_reprepare_count(0);
 
1561
drop table t2;
 
1562
# Table to be used has a modified (alter table) layout
 
1563
alter table t1 add column y time;
 
1564
execute stmt;
 
1565
call p_verify_reprepare_count(1);
 
1566
select * from t2;
 
1567
drop table t2;
 
1568
execute stmt;
 
1569
call p_verify_reprepare_count(0);
 
1570
drop table t1;
 
1571
drop table t2;
 
1572
deallocate prepare stmt;
 
1573
 
 
1574
 
 
1575
--echo #
 
1576
--echo # SQLCOM_UPDATE
 
1577
--echo #
 
1578
 
 
1579
--disable_warnings
 
1580
drop table if exists t1, t2;
 
1581
--enable_warnings
 
1582
create table t1 (a int);
 
1583
create table t2 (a int);
 
1584
prepare stmt from "update t2 set a=a+1 where (1) in (select * from t1)";
 
1585
execute stmt;
 
1586
drop table t1;
 
1587
create table t1 (x int);
 
1588
execute stmt;
 
1589
drop table t1, t2;
 
1590
deallocate prepare stmt;
 
1591
 
 
1592
--echo #
 
1593
--echo # SQLCOM_INSERT
 
1594
--echo #
 
1595
 
 
1596
--disable_warnings
 
1597
drop table if exists t1, t2;
 
1598
--enable_warnings
 
1599
create table t1 (a int);
 
1600
create table t2 (a int);
 
1601
prepare stmt from "insert into t2 set a=((1) in (select * from t1))";
 
1602
execute stmt;
 
1603
drop table t1;
 
1604
create table t1 (x int);
 
1605
execute stmt;
 
1606
 
 
1607
drop table t1, t2;
 
1608
deallocate prepare stmt;
 
1609
 
 
1610
--echo #
 
1611
--echo # SQLCOM_INSERT_SELECT
 
1612
--echo #
 
1613
 
 
1614
--disable_warnings
 
1615
drop table if exists t1, t2;
 
1616
--enable_warnings
 
1617
create table t1 (a int);
 
1618
create table t2 (a int);
 
1619
prepare stmt from "insert into t2 select * from t1";
 
1620
execute stmt;
 
1621
drop table t1;
 
1622
create table t1 (x int);
 
1623
execute stmt;
 
1624
drop table t1, t2;
 
1625
deallocate prepare stmt;
 
1626
 
 
1627
--echo #
 
1628
--echo # SQLCOM_REPLACE
 
1629
--echo #
 
1630
 
 
1631
--disable_warnings
 
1632
drop table if exists t1, t2;
 
1633
--enable_warnings
 
1634
create table t1 (a int);
 
1635
create table t2 (a int);
 
1636
prepare stmt from "replace t2 set a=((1) in (select * from t1))";
 
1637
execute stmt;
 
1638
drop table t1;
 
1639
create table t1 (x int);
 
1640
execute stmt;
 
1641
drop table t1, t2;
 
1642
deallocate prepare stmt;
 
1643
 
 
1644
--echo #
 
1645
--echo # SQLCOM_REPLACE_SELECT
 
1646
--echo #
 
1647
 
 
1648
--disable_warnings
 
1649
drop table if exists t1, t2;
 
1650
--enable_warnings
 
1651
create table t1 (a int);
 
1652
create table t2 (a int);
 
1653
prepare stmt from "replace t2 select * from t1";
 
1654
execute stmt;
 
1655
drop table t1;
 
1656
create table t1 (x int);
 
1657
execute stmt;
 
1658
drop table t1, t2;
 
1659
deallocate prepare stmt;
 
1660
 
 
1661
--echo #
 
1662
--echo # SQLCOM_DELETE
 
1663
--echo #
 
1664
 
 
1665
--disable_warnings
 
1666
drop table if exists t1, t2;
 
1667
--enable_warnings
 
1668
create table t1 (a int);
 
1669
create table t2 (a int);
 
1670
prepare stmt from "delete from t2 where (1) in (select * from t1)";
 
1671
execute stmt;
 
1672
drop table t1;
 
1673
create table t1 (x int);
 
1674
execute stmt;
 
1675
drop table t1, t2;
 
1676
deallocate prepare stmt;
 
1677
 
 
1678
--echo #
 
1679
--echo # SQLCOM_DELETE_MULTI
 
1680
--echo #
 
1681
 
 
1682
--disable_warnings
 
1683
drop table if exists t1, t2, t3;
 
1684
--enable_warnings
 
1685
create table t1 (a int);
 
1686
create table t2 (a int);
 
1687
create table t3 (a int);
 
1688
prepare stmt from "delete t2, t3 from t2, t3 where (1) in (select * from t1)";
 
1689
execute stmt;
 
1690
drop table t1;
 
1691
create table t1 (x int);
 
1692
execute stmt;
 
1693
drop table t1, t2, t3;
 
1694
deallocate prepare stmt;
 
1695
 
 
1696
--echo #
 
1697
--echo # SQLCOM_UPDATE_MULTI
 
1698
--echo #
 
1699
 
 
1700
--disable_warnings
 
1701
drop table if exists t1, t2, t3;
 
1702
--enable_warnings
 
1703
create table t1 (a int);
 
1704
create table t2 (a int);
 
1705
create table t3 (a int);
 
1706
prepare stmt from "update t2, t3 set t3.a=t2.a, t2.a=null where (1) in (select * from t1)";
 
1707
drop table t1;
 
1708
create table t1 (x int);
 
1709
execute stmt;
 
1710
drop table t1, t2, t3;
 
1711
deallocate prepare stmt;
 
1712
--echo # Intermediate results: 8 SQLCOMs tested, 8 automatic reprepares
 
1713
call p_verify_reprepare_count(8);
 
1714
 
 
1715
--echo #
 
1716
--echo # SQLCOM_LOAD
 
1717
--echo #
 
1718
 
 
1719
--disable_warnings
 
1720
drop table if exists t1;
 
1721
--enable_warnings
 
1722
create table t1 (a varchar(20));
 
1723
--error ER_UNSUPPORTED_PS
 
1724
prepare stmt from "load data infile '../std_data_ln/words.dat' into table t1";
 
1725
drop table t1;
 
1726
 
 
1727
--echo #
 
1728
--echo # SQLCOM_SHOW_DATABASES
 
1729
--echo #
 
1730
 
 
1731
--disable_warnings
 
1732
drop table if exists t1;
 
1733
--enable_warnings
 
1734
create table t1 (a int);
 
1735
prepare stmt from "show databases where (1) in (select * from t1)";
 
1736
execute stmt;
 
1737
drop table t1;
 
1738
create table t1 (x int);
 
1739
execute stmt;
 
1740
drop table t1;
 
1741
deallocate prepare stmt;
 
1742
 
 
1743
--echo #
 
1744
--echo # SQLCOM_SHOW_TABLES
 
1745
--echo #
 
1746
 
 
1747
--disable_warnings
 
1748
drop table if exists t1;
 
1749
--enable_warnings
 
1750
create table t1 (a int);
 
1751
prepare stmt from "show tables where (1) in (select * from t1)";
 
1752
execute stmt;
 
1753
drop table t1;
 
1754
create table t1 (x int);
 
1755
execute stmt;
 
1756
drop table t1;
 
1757
deallocate prepare stmt;
 
1758
 
 
1759
--echo #
 
1760
--echo # SQLCOM_SHOW_FIELDS
 
1761
--echo #
 
1762
 
 
1763
--disable_warnings
 
1764
drop table if exists t1;
 
1765
--enable_warnings
 
1766
create table t1 (a int);
 
1767
prepare stmt from "show fields from t1 where (1) in (select * from t1)";
 
1768
execute stmt;
 
1769
drop table t1;
 
1770
create table t1 (x int);
 
1771
execute stmt;
 
1772
drop table t1;
 
1773
deallocate prepare stmt;
 
1774
 
 
1775
--echo #
 
1776
--echo # SQLCOM_SHOW_KEYS
 
1777
--echo #
 
1778
 
 
1779
--disable_warnings
 
1780
drop table if exists t1;
 
1781
--enable_warnings
 
1782
create table t1 (a int);
 
1783
prepare stmt from "show keys from t1 where (1) in (select * from t1)";
 
1784
execute stmt;
 
1785
drop table t1;
 
1786
create table t1 (x int);
 
1787
execute stmt;
 
1788
drop table t1;
 
1789
deallocate prepare stmt;
 
1790
 
 
1791
--echo #
 
1792
--echo # SQLCOM_SHOW_VARIABLES
 
1793
--echo #
 
1794
 
 
1795
--disable_warnings
 
1796
drop table if exists t1;
 
1797
--enable_warnings
 
1798
create table t1 (a int);
 
1799
prepare stmt from "show variables where (1) in (select * from t1)";
 
1800
execute stmt;
 
1801
drop table t1;
 
1802
create table t1 (x int);
 
1803
execute stmt;
 
1804
drop table t1;
 
1805
deallocate prepare stmt;
 
1806
 
 
1807
--echo #
 
1808
--echo # SQLCOM_SHOW_STATUS
 
1809
--echo #
 
1810
 
 
1811
--disable_warnings
 
1812
drop table if exists t1;
 
1813
--enable_warnings
 
1814
create table t1 (a int);
 
1815
prepare stmt from "show status where (1) in (select * from t1)";
 
1816
execute stmt;
 
1817
drop table t1;
 
1818
create table t1 (x int);
 
1819
execute stmt;
 
1820
drop table t1;
 
1821
deallocate prepare stmt;
 
1822
 
 
1823
--echo #
 
1824
--echo # SQLCOM_SHOW_ENGINE_STATUS, SQLCOM_SHOW_ENGINE_LOGS,
 
1825
--echo # SQLCOM_SHOW_ENGINE_MUTEX, SQLCOM_SHOW_PROCESSLIST
 
1826
--echo #
 
1827
 
 
1828
--echo # Currently can not have a where clause, need to be covered
 
1829
--echo # with tests
 
1830
 
 
1831
--disable_warnings
 
1832
drop table if exists t1;
 
1833
--enable_warnings
 
1834
create table t1 (a int);
 
1835
--error ER_PARSE_ERROR
 
1836
prepare stmt from "show engine all status where (1) in (select * from t1)";
 
1837
--error ER_PARSE_ERROR
 
1838
prepare stmt from "show engine all logs where (1) in (select * from t1)";
 
1839
--error ER_PARSE_ERROR
 
1840
prepare stmt from "show engine all mutex where (1) in (select * from t1)";
 
1841
--error ER_PARSE_ERROR
 
1842
prepare stmt from "show processlist where (1) in (select * from t1)";
 
1843
drop table t1;
 
1844
 
 
1845
--echo #
 
1846
--echo # SQLCOM_SHOW_CHARSETS
 
1847
--echo #
 
1848
 
 
1849
--disable_warnings
 
1850
drop table if exists t1;
 
1851
--enable_warnings
 
1852
create table t1 (a int);
 
1853
prepare stmt from "show charset where (1) in (select * from t1)";
 
1854
execute stmt;
 
1855
drop table t1;
 
1856
create table t1 (x int);
 
1857
execute stmt;
 
1858
drop table t1;
 
1859
deallocate prepare stmt;
 
1860
 
 
1861
--echo #
 
1862
--echo # SQLCOM_SHOW_COLLATIONS
 
1863
--echo #
 
1864
 
 
1865
--disable_warnings
 
1866
drop table if exists t1;
 
1867
--enable_warnings
 
1868
create table t1 (a int);
 
1869
prepare stmt from "show collation where (1) in (select * from t1)";
 
1870
execute stmt;
 
1871
drop table t1;
 
1872
create table t1 (x int);
 
1873
execute stmt;
 
1874
drop table t1;
 
1875
deallocate prepare stmt;
 
1876
 
 
1877
--echo #
 
1878
--echo # SQLCOM_SHOW_TABLE_STATUS
 
1879
--echo #
 
1880
 
 
1881
--disable_warnings
 
1882
drop table if exists t1;
 
1883
--enable_warnings
 
1884
create table t1 (a int);
 
1885
prepare stmt from "show table status where (1) in (select * from t1)";
 
1886
execute stmt;
 
1887
drop table t1;
 
1888
create table t1 (x int);
 
1889
execute stmt;
 
1890
drop table t1;
 
1891
deallocate prepare stmt;
 
1892
 
 
1893
--echo #
 
1894
--echo # SQLCOM_SHOW_TRIGGERS
 
1895
--echo #
 
1896
 
 
1897
--disable_warnings
 
1898
drop table if exists t1;
 
1899
--enable_warnings
 
1900
create table t1 (a int);
 
1901
prepare stmt from "show triggers where (1) in (select * from t1)";
 
1902
execute stmt;
 
1903
drop table t1;
 
1904
create table t1 (x int);
 
1905
execute stmt;
 
1906
drop table t1;
 
1907
deallocate prepare stmt;
 
1908
 
 
1909
--echo #
 
1910
--echo # SQLCOM_SHOW_OPEN_TABLES
 
1911
--echo #
 
1912
 
 
1913
--disable_warnings
 
1914
drop table if exists t1;
 
1915
--enable_warnings
 
1916
create table t1 (a int);
 
1917
prepare stmt from "show open tables where (1) in (select * from t1)";
 
1918
execute stmt;
 
1919
drop table t1;
 
1920
create table t1 (x int);
 
1921
execute stmt;
 
1922
drop table t1;
 
1923
deallocate prepare stmt;
 
1924
 
 
1925
--echo #
 
1926
--echo # SQLCOM_SHOW_STATUS_PROC
 
1927
--echo #
 
1928
 
 
1929
--disable_warnings
 
1930
drop table if exists t1;
 
1931
--enable_warnings
 
1932
create table t1 (a int);
 
1933
prepare stmt from "show procedure status where (1) in (select * from t1)";
 
1934
execute stmt;
 
1935
drop table t1;
 
1936
create table t1 (x int);
 
1937
execute stmt;
 
1938
drop table t1;
 
1939
deallocate prepare stmt;
 
1940
 
 
1941
--echo #
 
1942
--echo # SQLCOM_SHOW_STATUS_FUNC
 
1943
--echo #
 
1944
 
 
1945
--disable_warnings
 
1946
drop table if exists t1;
 
1947
--enable_warnings
 
1948
create table t1 (a int);
 
1949
prepare stmt from "show function status where (1) in (select * from t1)";
 
1950
execute stmt;
 
1951
drop table t1;
 
1952
create table t1 (x int);
 
1953
execute stmt;
 
1954
drop table t1;
 
1955
deallocate prepare stmt;
 
1956
 
 
1957
--echo #
 
1958
--echo # SQLCOM_SHOW_EVENTS
 
1959
--echo #
 
1960
--echo #
 
1961
--echo # Please see this test in ps.test, it requires not_embedded.inc
 
1962
--echo #
 
1963
 
 
1964
--echo #
 
1965
--echo # SQLCOM_SET_OPTION
 
1966
--echo #
 
1967
 
 
1968
--disable_warnings
 
1969
drop table if exists t1;
 
1970
--enable_warnings
 
1971
create table t1 (a int);
 
1972
prepare stmt from "set @a=((1) in (select * from t1))";
 
1973
execute stmt;
 
1974
drop table t1;
 
1975
create table t1 (x int);
 
1976
execute stmt;
 
1977
drop table t1;
 
1978
deallocate prepare stmt;
 
1979
 
 
1980
--echo #
 
1981
--echo # SQLCOM_DO
 
1982
--echo #
 
1983
 
 
1984
--disable_warnings
 
1985
drop table if exists t1;
 
1986
--enable_warnings
 
1987
create table t1 (a int);
 
1988
prepare stmt from "do ((1) in (select * from t1))";
 
1989
execute stmt;
 
1990
drop table t1;
 
1991
create table t1 (x int);
 
1992
execute stmt;
 
1993
drop table t1;
 
1994
deallocate prepare stmt;
 
1995
 
 
1996
--echo #
 
1997
--echo # SQLCOM_CALL
 
1998
--echo #
 
1999
 
 
2000
--disable_warnings
 
2001
drop table if exists t1;
 
2002
drop procedure if exists p1;
 
2003
--enable_warnings
 
2004
create procedure p1(a int) begin end;
 
2005
create table t1 (a int);
 
2006
prepare stmt from "call p1((1) in (select * from t1))";
 
2007
execute stmt;
 
2008
drop table t1;
 
2009
create table t1 (x int);
 
2010
execute stmt;
 
2011
drop table t1;
 
2012
drop procedure p1;
 
2013
deallocate prepare stmt;
 
2014
 
 
2015
--echo #
 
2016
--echo # SQLCOM_CREATE_VIEW
 
2017
--echo #
 
2018
 
 
2019
--disable_warnings
 
2020
drop table if exists t1;
 
2021
drop view if exists v1;
 
2022
--enable_warnings
 
2023
create table t1 (a int);
 
2024
prepare stmt from "create view v1 as select * from t1";
 
2025
execute stmt;
 
2026
drop view v1;
 
2027
drop table t1;
 
2028
create table t1 (x int);
 
2029
execute stmt;
 
2030
drop view v1;
 
2031
drop table t1;
 
2032
deallocate prepare stmt;
 
2033
--echo # Intermediate result: number of reprepares matches the number
 
2034
--echo # of tests
 
2035
call p_verify_reprepare_count(17);
 
2036
 
 
2037
--echo #
 
2038
--echo # SQLCOM_ALTER_VIEW
 
2039
--echo #
 
2040
 
 
2041
--disable_warnings
 
2042
drop view if exists v1;
 
2043
--enable_warnings
 
2044
create view v1 as select 1;
 
2045
--error ER_UNSUPPORTED_PS
 
2046
prepare stmt from "alter view v1 as select 2";
 
2047
drop view v1;
 
2048
 
 
2049
--echo # Cleanup
 
2050
--echo #
 
2051
--disable_warnings
 
2052
drop temporary table if exists t1, t2, t3;
 
2053
drop table if exists t1, t2, t3, v1, v2;
 
2054
drop procedure if exists p_verify_reprepare_count;
 
2055
drop procedure if exists p1;
 
2056
drop function if exists f1;
 
2057
drop view if exists v1, v2;
 
2058
--enable_warnings