~drizzle-trunk/drizzle/development

« back to all changes in this revision

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

  • Committer: Monty Taylor
  • Date: 2008-07-05 18:10:38 UTC
  • mto: This revision was merged to the branch mainline in revision 63.
  • Revision ID: monty@inaugust.com-20080705181038-0ih0nnamu5qrut0y
Fixed prototypes. Cleaned define a little bit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
select * from t1;
24
24
drop table t1;
25
25
 
26
 
create table t1 (bandID INT NOT NULL PRIMARY KEY, payoutID int NOT NULL);
 
26
create table t1 (bandID MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY, payoutID SMALLINT UNSIGNED NOT NULL);
27
27
insert into t1 (bandID,payoutID) VALUES (1,6),(2,6),(3,4),(4,9),(5,10),(6,1),(7,12),(8,12);
28
 
alter table t1 add column new_col int;
 
28
alter table t1 add column new_col int, order by payoutid,bandid;
29
29
select * from t1;
30
 
alter table t1;
 
30
alter table t1 order by bandid,payoutid;
31
31
select * from t1;
32
32
drop table t1;
33
33
 
34
34
# Check that pack_keys and dynamic length rows are not forced. 
35
35
 
36
36
CREATE TABLE t1 (
37
 
GROUP_ID int DEFAULT '0' NOT NULL,
38
 
LANG_ID int DEFAULT '0' NOT NULL,
 
37
GROUP_ID int(10) unsigned DEFAULT '0' NOT NULL,
 
38
LANG_ID smallint(5) unsigned DEFAULT '0' NOT NULL,
39
39
NAME varchar(80) DEFAULT '' NOT NULL,
40
40
PRIMARY KEY (GROUP_ID,LANG_ID),
41
41
KEY NAME (NAME));
56
56
drop table t1;
57
57
 
58
58
CREATE TABLE t1 (
59
 
  id int NOT NULL default '0',
60
 
  category_id int NOT NULL default '0',
61
 
  type_id int NOT NULL default '0',
 
59
  id int(11) unsigned NOT NULL default '0',
 
60
  category_id tinyint(4) unsigned NOT NULL default '0',
 
61
  type_id tinyint(4) unsigned NOT NULL default '0',
62
62
  body text NOT NULL,
63
 
  user_id int NOT NULL default '0',
 
63
  user_id int(11) unsigned NOT NULL default '0',
64
64
  status enum('new','old') NOT NULL default 'new',
65
65
  PRIMARY KEY (id)
66
66
) ENGINE=MyISAM;
72
72
# The following combination found a hang-bug in MyISAM
73
73
#
74
74
 
75
 
CREATE TABLE t1 (AnamneseId int NOT NULL auto_increment,B BLOB,PRIMARY KEY (AnamneseId)) engine=myisam;
 
75
CREATE TABLE t1 (AnamneseId int(10) unsigned NOT NULL auto_increment,B BLOB,PRIMARY KEY (AnamneseId)) engine=myisam;
76
76
insert into t1 values (null,"hello");
77
77
LOCK TABLES t1 WRITE;
78
78
ALTER TABLE t1 ADD Column new_col int not null;
84
84
# Drop and add an auto_increment column
85
85
#
86
86
 
87
 
create table t1 (i int not null auto_increment primary key);
 
87
create table t1 (i int unsigned not null auto_increment primary key);
88
88
insert into t1 values (null),(null),(null),(null);
89
 
alter table t1 drop i,add i int not null auto_increment, drop primary key, add primary key (i);
 
89
alter table t1 drop i,add i int unsigned not null auto_increment, drop primary key, add primary key (i);
90
90
select * from t1;
91
91
drop table t1;
92
92
 
117
117
                key (n2, n3, n4, n1),
118
118
                key (n3, n4, n1, n2),
119
119
                key (n4, n1, n2, n3) );
120
 
alter table t1;
 
120
alter table t1 disable keys;
121
121
show keys from t1;
122
122
#let $1=10000;
123
 
set autocommit=0;
124
 
begin;
125
123
let $1=10;
126
124
while ($1)
127
125
{
128
126
 eval insert into t1 values($1,RAND()*1000,RAND()*1000,RAND());
129
127
 dec $1;
130
128
}
131
 
commit;
132
 
set autocommit=1;
133
129
alter table t1 enable keys;
134
130
show keys from t1;
135
131
drop table t1;
138
134
# Alter table and rename
139
135
#
140
136
 
141
 
create table t1 (i int not null auto_increment primary key);
 
137
create table t1 (i int unsigned not null auto_increment primary key);
142
138
alter table t1 rename t2;
143
139
alter table t2 rename t1, add c char(10) comment "no comment";
144
140
show columns from t1;
148
144
 
149
145
create table t1 (a int, b int);
150
146
let $1=100;
151
 
set autocommit=0;
152
 
begin;
153
147
while ($1)
154
148
{
155
149
 eval insert into t1 values(1,$1), (2,$1), (3, $1);
156
150
 dec $1;
157
151
}
158
 
commit;
159
 
set autocommit=1;
160
152
alter table t1 add unique (a,b), add key (b);
161
153
show keys from t1;
162
154
analyze table t1;
211
203
DROP TABLE t2;
212
204
 
213
205
#
214
 
# Test with locking
 
206
# Test disable keys with locking
215
207
#
216
208
CREATE TABLE t1 (
217
209
  Host varchar(16) binary NOT NULL default '',
264
256
drop table t1;
265
257
 
266
258
#
 
259
# Test that data get converted when character set is changed
 
260
# Test that data doesn't get converted when src or dst is BINARY/BLOB
 
261
#
 
262
set names koi8r;
 
263
create table t1 (a char(10) character set koi8r);
 
264
insert into t1 values ('����');
 
265
select a,hex(a) from t1;
 
266
alter table t1 change a a char(10) character set cp1251;
 
267
select a,hex(a) from t1;
 
268
alter table t1 change a a binary(4);
 
269
select a,hex(a) from t1;
 
270
alter table t1 change a a char(10) character set cp1251;
 
271
select a,hex(a) from t1;
 
272
alter table t1 change a a char(10) character set koi8r;
 
273
select a,hex(a) from t1;
 
274
alter table t1 change a a varchar(10) character set cp1251;
 
275
select a,hex(a) from t1;
 
276
alter table t1 change a a char(10) character set koi8r;
 
277
select a,hex(a) from t1;
 
278
alter table t1 change a a text character set cp1251;
 
279
select a,hex(a) from t1;
 
280
alter table t1 change a a char(10) character set koi8r;
 
281
select a,hex(a) from t1;
 
282
delete from t1;
 
283
 
 
284
#
 
285
# Test ALTER TABLE .. CHARACTER SET ..
 
286
#
 
287
show create table t1;
 
288
alter table t1 DEFAULT CHARACTER SET latin1;
 
289
show create table t1;
 
290
alter table t1 CONVERT TO CHARACTER SET latin1;
 
291
show create table t1;
 
292
alter table t1 DEFAULT CHARACTER SET cp1251;
 
293
show create table t1;
 
294
 
 
295
drop table t1;
 
296
 
 
297
#
 
298
# Bug#2821
 
299
# Test that table CHARACTER SET does not affect blobs
 
300
#
 
301
create table t1 (myblob longblob,mytext longtext) 
 
302
default charset latin1 collate latin1_general_cs;
 
303
show create table t1;
 
304
alter table t1 character set latin2;
 
305
show create table t1;
 
306
drop table t1;
 
307
 
 
308
#
267
309
# Bug 2361 (Don't drop UNIQUE with DROP PRIMARY KEY)
268
310
#
269
311
 
293
335
DROP TABLE T12207;
294
336
 
295
337
#
 
338
# Bug #6479  ALTER TABLE ... changing charset fails for TEXT columns
 
339
#
 
340
# The column's character set was changed but the actual data was not
 
341
# modified. In other words, the values were reinterpreted
 
342
# as UTF8 instead of being converted.
 
343
create table t1 (a text) character set koi8r;
 
344
insert into t1 values (_koi8r'����');
 
345
select hex(a) from t1;
 
346
alter table t1 convert to character set cp1251;
 
347
select hex(a) from t1;
 
348
drop table t1;
 
349
 
 
350
#
296
351
# Test for bug #7884 "Able to add invalid unique index on TIMESTAMP prefix"
297
352
# MySQL should not think that packed field with non-zero decimals is
298
353
# geometry field and allow to create prefix index which is
315
370
create table t1 (a int, key(a));
316
371
show indexes from t1;
317
372
--echo "this used not to disable the index"
318
 
alter table t1 modify a int;
319
 
show indexes from t1;
320
 
 
321
 
alter table t1 enable keys;
322
 
show indexes from t1;
323
 
 
324
 
alter table t1 modify a bigint;
325
 
show indexes from t1;
326
 
 
327
 
alter table t1 enable keys;
328
 
show indexes from t1;
329
 
 
330
 
alter table t1 add b char(10);
331
 
show indexes from t1;
332
 
 
333
 
alter table t1 add c decimal(10,2);
 
373
alter table t1 modify a int, disable keys;
 
374
show indexes from t1;
 
375
 
 
376
alter table t1 enable keys;
 
377
show indexes from t1;
 
378
 
 
379
alter table t1 modify a bigint, disable keys;
 
380
show indexes from t1;
 
381
 
 
382
alter table t1 enable keys;
 
383
show indexes from t1;
 
384
 
 
385
alter table t1 add b char(10), disable keys;
 
386
show indexes from t1;
 
387
 
 
388
alter table t1 add c decimal(10,2), enable keys;
334
389
show indexes from t1;
335
390
 
336
391
--echo "this however did"
337
 
alter table t1;
 
392
alter table t1 disable keys;
338
393
show indexes from t1;
339
394
 
340
395
desc t1;
348
403
--echo "Now will test with one unique index"
349
404
create table t1(a int, b char(10), unique(a));
350
405
show indexes from t1;
351
 
alter table t1;
 
406
alter table t1 disable keys;
352
407
show indexes from t1;
353
408
alter table t1 enable keys;
354
409
 
355
410
--echo "If no copy on noop change, this won't touch the data file"
356
411
--echo "Unique index, no change"
357
 
alter table t1 modify a int;
 
412
alter table t1 modify a int, disable keys;
358
413
show indexes from t1;
359
414
 
360
415
--echo "Change the type implying data copy"
361
416
--echo "Unique index, no change"
362
 
alter table t1 modify a bigint;
 
417
alter table t1 modify a bigint, disable keys;
363
418
show indexes from t1;
364
419
 
365
420
alter table t1 modify a bigint;
373
428
--echo "Now will test with one unique and one non-unique index"
374
429
create table t1(a int, b char(10), unique(a), key(b));
375
430
show indexes from t1;
376
 
alter table t1;
 
431
alter table t1 disable keys;
377
432
show indexes from t1;
378
433
alter table t1 enable keys;
379
434
 
380
435
 
381
436
--echo "If no copy on noop change, this won't touch the data file"
382
437
--echo "The non-unique index will be disabled"
383
 
alter table t1 modify a int;
 
438
alter table t1 modify a int, disable keys;
384
439
show indexes from t1;
385
440
alter table t1 enable keys;
386
441
show indexes from t1;
387
442
 
388
443
--echo "Change the type implying data copy"
389
444
--echo "The non-unique index will be disabled"
390
 
alter table t1 modify a bigint;
 
445
alter table t1 modify a bigint, disable keys;
391
446
show indexes from t1;
392
447
 
393
448
--echo "Change again the type, but leave the indexes as_is"
517
572
alter table table_24562 order by (section + 12);
518
573
--error ER_PARSE_ERROR
519
574
alter table table_24562 order by length(title);
 
575
--error ER_PARSE_ERROR
 
576
alter table table_24562 order by (select 12 from dual);
520
577
 
521
578
--error ER_BAD_FIELD_ERROR
522
579
alter table table_24562 order by no_such_col;
529
586
# Bug #14693 (ALTER SET DEFAULT doesn't work)
530
587
#
531
588
 
532
 
create table t1 (mycol int not null);
 
589
create table t1 (mycol int(10) not null);
533
590
alter table t1 alter column mycol set default 0;
534
591
desc t1;
535
592
drop table t1;
538
595
# Bug#25262 Auto Increment lost when changing Engine type
539
596
#
540
597
 
541
 
create table t1(id int primary key auto_increment) engine=heap;
 
598
create table t1(id int(8) primary key auto_increment) engine=heap;
542
599
 
543
600
insert into t1 values (null);
544
601
insert into t1 values (null);
562
619
 
563
620
drop table t1;
564
621
 
565
 
##
566
 
## Bug#27507: Wrong DATETIME value was allowed by ALTER TABLE in the
567
 
##            NO_ZERO_DATE mode.
568
 
##
569
 
#create table t1(f1 int);
570
 
#alter table t1 add column f2 datetime not null, add column f21 date not null;
571
 
#insert into t1 values(1,'2000-01-01','2000-01-01');
572
 
#--error 1292
573
 
#alter table t1 add column f3 datetime not null;
574
 
#--error 1292
575
 
#alter table t1 add column f3 date not null;
576
 
#--error 1292
577
 
#alter table t1 add column f4 datetime not null default '2002-02-02',
578
 
#  add column f41 date not null;
579
 
#alter table t1 add column f4 datetime not null default '2002-02-02',
580
 
#  add column f41 date not null default '2002-02-02';
581
 
#select * from t1;
582
 
#drop table t1;
 
622
#
 
623
# Bug#27507: Wrong DATETIME value was allowed by ALTER TABLE in the
 
624
#            NO_ZERO_DATE mode.
 
625
#
 
626
create table t1(f1 int);
 
627
alter table t1 add column f2 datetime not null, add column f21 date not null;
 
628
insert into t1 values(1,'2000-01-01','2000-01-01');
 
629
--error 1292
 
630
alter table t1 add column f3 datetime not null;
 
631
--error 1292
 
632
alter table t1 add column f3 date not null;
 
633
--error 1292
 
634
alter table t1 add column f4 datetime not null default '2002-02-02',
 
635
  add column f41 date not null;
 
636
alter table t1 add column f4 datetime not null default '2002-02-02',
 
637
  add column f41 date not null default '2002-02-02';
 
638
select * from t1;
 
639
drop table t1;
 
640
set sql_mode= @orig_sql_mode;
583
641
 
584
642
#
585
643
# Some additional tests for new, faster alter table.  Note that most of the
613
671
# without # prefix is not allowed for TEXT columns, while index
614
672
# is defined with prefix.
615
673
616
 
create table t1 (t varchar(255) default null, key t (t(80))) engine=myisam;
 
674
create table t1 (t varchar(255) default null, key t (t(80)))
 
675
engine=myisam default charset=latin1;
617
676
alter table t1 change t t text;
618
677
drop table t1;
619
678
 
620
679
#
 
680
# Bug #26794: Adding an index with a prefix on a SPATIAL type breaks ALTER
 
681
# TABLE
 
682
#
 
683
CREATE TABLE t1 (a varchar(500));
 
684
 
 
685
ALTER TABLE t1 ADD b GEOMETRY NOT NULL, ADD SPATIAL INDEX(b);
 
686
SHOW CREATE TABLE t1;
 
687
ALTER TABLE t1 ADD KEY(b(50));
 
688
SHOW CREATE TABLE t1;
 
689
 
 
690
ALTER TABLE t1 ADD c POINT;
 
691
SHOW CREATE TABLE t1;
 
692
 
 
693
--error ER_WRONG_SUB_KEY
 
694
CREATE TABLE t2 (a INT, KEY (a(20)));
 
695
 
 
696
ALTER TABLE t1 ADD d INT;
 
697
--error ER_WRONG_SUB_KEY
 
698
ALTER TABLE t1 ADD KEY (d(20));
 
699
 
 
700
# the 5.1 part of the test
 
701
--error ER_WRONG_SUB_KEY
 
702
ALTER TABLE t1 ADD e GEOMETRY NOT NULL, ADD SPATIAL KEY (e(30));
 
703
 
 
704
DROP TABLE t1;
 
705
 
 
706
#
621
707
# Bug#18038  MySQL server corrupts binary columns data
622
708
#
623
709
 
628
714
SELECT LENGTH(s) FROM t1;
629
715
DROP TABLE t1;
630
716
 
631
 
CREATE TABLE t1 (s varbinary(8));
 
717
CREATE TABLE t1 (s BINARY(8));
632
718
INSERT INTO t1 VALUES ('test');
633
719
SELECT LENGTH(s) FROM t1;
634
720
SELECT HEX(s) FROM t1;
635
 
ALTER TABLE t1 MODIFY s varbinary(10);
 
721
ALTER TABLE t1 MODIFY s BINARY(10);
636
722
SELECT HEX(s) FROM t1;
637
723
SELECT LENGTH(s) FROM t1;
638
724
DROP TABLE t1;
726
812
SHOW CREATE TABLE `tt+1`;
727
813
SHOW CREATE TABLE `tt+2`;
728
814
DROP TABLE   `tt+1`, `tt+2`;
729
 
##
730
 
## Check if special characters as in tmp_file_prefix work.
731
 
#CREATE TABLE `#sql1` (c1 INT);
732
 
#CREATE TABLE `@0023sql2` (c1 INT);
733
 
#SHOW TABLES;
734
 
#RENAME TABLE `#sql1`     TO `@0023sql1`;
735
 
#RENAME TABLE `@0023sql2` TO `#sql2`;
736
 
#SHOW TABLES;
737
 
#ALTER TABLE `@0023sql1`  RENAME `#sql-1`;
738
 
#ALTER TABLE `#sql2`      RENAME `@0023sql-2`;
739
 
#SHOW TABLES;
740
 
#INSERT INTO `#sql-1`     VALUES (1);
741
 
#INSERT INTO `@0023sql-2` VALUES (2);
742
 
#DROP TABLE `#sql-1`, `@0023sql-2`;
 
815
#
 
816
# Check if special characters as in tmp_file_prefix work.
 
817
CREATE TABLE `#sql1` (c1 INT);
 
818
CREATE TABLE `@0023sql2` (c1 INT);
 
819
SHOW TABLES;
 
820
RENAME TABLE `#sql1`     TO `@0023sql1`;
 
821
RENAME TABLE `@0023sql2` TO `#sql2`;
 
822
SHOW TABLES;
 
823
ALTER TABLE `@0023sql1`  RENAME `#sql-1`;
 
824
ALTER TABLE `#sql2`      RENAME `@0023sql-2`;
 
825
SHOW TABLES;
 
826
INSERT INTO `#sql-1`     VALUES (1);
 
827
INSERT INTO `@0023sql-2` VALUES (2);
 
828
DROP TABLE `#sql-1`, `@0023sql-2`;
743
829
#
744
830
# Same for temporary tables though these names do not become file names.
745
831
CREATE TEMPORARY TABLE `#sql1` (c1 INT);
765
851
DROP TABLE IF EXISTS t2;
766
852
--enable_warnings
767
853
CREATE TABLE t1 (
768
 
  int_field INTEGER NOT NULL,
 
854
  int_field INTEGER UNSIGNED NOT NULL,
769
855
  char_field CHAR(10),
770
856
  INDEX(`int_field`)
771
857
);
776
862
 
777
863
INSERT INTO t1 VALUES (1, "edno"), (1, "edno"), (2, "dve"), (3, "tri"), (5, "pet"); 
778
864
--echo "Non-copy data change - new frm, but old data and index files"
779
 
ALTER TABLE t1 CHANGE int_field unsigned_int_field INTEGER NOT NULL, RENAME t2;
 
865
ALTER TABLE t1
 
866
  CHANGE int_field unsigned_int_field INTEGER UNSIGNED NOT NULL,
 
867
  RENAME t2;
780
868
 
781
869
--error ER_NO_SUCH_TABLE
782
870
SELECT * FROM t1 ORDER BY int_field;
783
871
SELECT * FROM t2 ORDER BY unsigned_int_field;
784
872
DESCRIBE t2;
785
873
DESCRIBE t2;
786
 
ALTER TABLE t2 MODIFY unsigned_int_field BIGINT NOT NULL;
 
874
ALTER TABLE t2 MODIFY unsigned_int_field BIGINT UNSIGNED NOT NULL;
787
875
DESCRIBE t2;
788
876
 
789
877
DROP TABLE t2;