Commit ae801bad authored by mskold@mysql.com's avatar mskold@mysql.com

Merge mskold@build.mysql.com:/home/bk/mysql-4.1

into mysql.com:/usr/local/home/marty/MySQL/test/mysql-4.1
parents 34688d71 84196617
......@@ -234,1011 +234,18 @@ select * from t4 where a = 7 and b = 17 order by a;
a b c d
select * from t4 where a = 7 and b != 16 order by b;
a b c d
delete from t2 where a > 5;
select x1.a, x1.b from t2 x1, t2 x2 where x1.b = x2.b order by x1.a;
a b
1 10
3 12
5 14
7 16
9 18
11 20
13 22
15 24
17 26
19 28
21 30
23 32
25 34
27 36
29 38
31 40
33 42
35 44
37 46
39 48
41 50
43 52
45 54
47 56
49 58
51 60
53 62
55 64
57 66
59 68
61 70
63 72
65 74
67 76
69 78
71 80
73 82
75 84
77 86
79 88
81 90
83 92
85 94
87 96
89 98
91 100
93 102
95 104
97 106
99 108
101 110
103 112
105 114
107 116
109 118
111 120
113 122
115 124
117 126
119 128
121 130
123 132
125 134
127 136
129 138
131 140
133 142
135 144
137 146
139 148
141 150
143 152
145 154
147 156
149 158
151 160
153 162
155 164
157 166
159 168
161 170
163 172
165 174
167 176
169 178
171 180
173 182
175 184
177 186
179 188
181 190
183 192
185 194
187 196
189 198
191 200
193 202
195 204
197 206
199 208
201 210
203 212
205 214
207 216
209 218
211 220
213 222
215 224
217 226
219 228
221 230
223 232
225 234
227 236
229 238
231 240
233 242
235 244
237 246
239 248
241 250
243 252
245 254
247 256
249 258
251 260
253 262
255 264
257 266
259 268
261 270
263 272
265 274
267 276
269 278
271 280
273 282
275 284
277 286
279 288
281 290
283 292
285 294
287 296
289 298
291 300
293 302
295 304
297 306
299 308
301 310
303 312
305 314
307 316
309 318
311 320
313 322
315 324
317 326
319 328
321 330
323 332
325 334
327 336
329 338
331 340
333 342
335 344
337 346
339 348
341 350
343 352
345 354
347 356
349 358
351 360
353 362
355 364
357 366
359 368
361 370
363 372
365 374
367 376
369 378
371 380
373 382
375 384
377 386
379 388
381 390
383 392
385 394
387 396
389 398
391 400
393 402
395 404
397 406
399 408
401 410
403 412
405 414
407 416
409 418
411 420
413 422
415 424
417 426
419 428
421 430
423 432
425 434
427 436
429 438
431 440
433 442
435 444
437 446
439 448
441 450
443 452
445 454
447 456
449 458
451 460
453 462
455 464
457 466
459 468
461 470
463 472
465 474
467 476
469 478
471 480
473 482
475 484
477 486
479 488
481 490
483 492
485 494
487 496
489 498
491 500
493 502
495 504
497 506
499 508
501 510
503 512
505 514
507 516
509 518
511 520
513 522
515 524
517 526
519 528
521 530
523 532
525 534
527 536
529 538
531 540
533 542
535 544
537 546
539 548
541 550
543 552
545 554
547 556
549 558
551 560
553 562
555 564
557 566
559 568
561 570
563 572
565 574
567 576
569 578
571 580
573 582
575 584
577 586
579 588
581 590
583 592
585 594
587 596
589 598
591 600
593 602
595 604
597 606
599 608
601 610
603 612
605 614
607 616
609 618
611 620
613 622
615 624
617 626
619 628
621 630
623 632
625 634
627 636
629 638
631 640
633 642
635 644
637 646
639 648
641 650
643 652
645 654
647 656
649 658
651 660
653 662
655 664
657 666
659 668
661 670
663 672
665 674
667 676
669 678
671 680
673 682
675 684
677 686
679 688
681 690
683 692
685 694
687 696
689 698
691 700
693 702
695 704
697 706
699 708
701 710
703 712
705 714
707 716
709 718
711 720
713 722
715 724
717 726
719 728
721 730
723 732
725 734
727 736
729 738
731 740
733 742
735 744
737 746
739 748
741 750
743 752
745 754
747 756
749 758
751 760
753 762
755 764
757 766
759 768
761 770
763 772
765 774
767 776
769 778
771 780
773 782
775 784
777 786
779 788
781 790
783 792
785 794
787 796
789 798
791 800
793 802
795 804
797 806
799 808
801 810
803 812
805 814
807 816
809 818
811 820
813 822
815 824
817 826
819 828
821 830
823 832
825 834
827 836
829 838
831 840
833 842
835 844
837 846
839 848
841 850
843 852
845 854
847 856
849 858
851 860
853 862
855 864
857 866
859 868
861 870
863 872
865 874
867 876
869 878
871 880
873 882
875 884
877 886
879 888
881 890
883 892
885 894
887 896
889 898
891 900
893 902
895 904
897 906
899 908
901 910
903 912
905 914
907 916
909 918
911 920
913 922
915 924
917 926
919 928
921 930
923 932
925 934
927 936
929 938
931 940
933 942
935 944
937 946
939 948
941 950
943 952
945 954
947 956
949 958
951 960
953 962
955 964
957 966
959 968
961 970
963 972
965 974
967 976
969 978
971 980
973 982
975 984
977 986
979 988
981 990
983 992
985 994
987 996
989 998
991 1000
993 1002
995 1004
997 1006
999 1008
select a, b FROM t2 outer_table where
a = (select a from t2 where b = outer_table.b ) order by a;
a b
1 10
3 12
5 14
7 16
9 18
11 20
13 22
15 24
17 26
19 28
21 30
23 32
25 34
27 36
29 38
31 40
33 42
35 44
37 46
39 48
41 50
43 52
45 54
47 56
49 58
51 60
53 62
55 64
57 66
59 68
61 70
63 72
65 74
67 76
69 78
71 80
73 82
75 84
77 86
79 88
81 90
83 92
85 94
87 96
89 98
91 100
93 102
95 104
97 106
99 108
101 110
103 112
105 114
107 116
109 118
111 120
113 122
115 124
117 126
119 128
121 130
123 132
125 134
127 136
129 138
131 140
133 142
135 144
137 146
139 148
141 150
143 152
145 154
147 156
149 158
151 160
153 162
155 164
157 166
159 168
161 170
163 172
165 174
167 176
169 178
171 180
173 182
175 184
177 186
179 188
181 190
183 192
185 194
187 196
189 198
191 200
193 202
195 204
197 206
199 208
201 210
203 212
205 214
207 216
209 218
211 220
213 222
215 224
217 226
219 228
221 230
223 232
225 234
227 236
229 238
231 240
233 242
235 244
237 246
239 248
241 250
243 252
245 254
247 256
249 258
251 260
253 262
255 264
257 266
259 268
261 270
263 272
265 274
267 276
269 278
271 280
273 282
275 284
277 286
279 288
281 290
283 292
285 294
287 296
289 298
291 300
293 302
295 304
297 306
299 308
301 310
303 312
305 314
307 316
309 318
311 320
313 322
315 324
317 326
319 328
321 330
323 332
325 334
327 336
329 338
331 340
333 342
335 344
337 346
339 348
341 350
343 352
345 354
347 356
349 358
351 360
353 362
355 364
357 366
359 368
361 370
363 372
365 374
367 376
369 378
371 380
373 382
375 384
377 386
379 388
381 390
383 392
385 394
387 396
389 398
391 400
393 402
395 404
397 406
399 408
401 410
403 412
405 414
407 416
409 418
411 420
413 422
415 424
417 426
419 428
421 430
423 432
425 434
427 436
429 438
431 440
433 442
435 444
437 446
439 448
441 450
443 452
445 454
447 456
449 458
451 460
453 462
455 464
457 466
459 468
461 470
463 472
465 474
467 476
469 478
471 480
473 482
475 484
477 486
479 488
481 490
483 492
485 494
487 496
489 498
491 500
493 502
495 504
497 506
499 508
501 510
503 512
505 514
507 516
509 518
511 520
513 522
515 524
517 526
519 528
521 530
523 532
525 534
527 536
529 538
531 540
533 542
535 544
537 546
539 548
541 550
543 552
545 554
547 556
549 558
551 560
553 562
555 564
557 566
559 568
561 570
563 572
565 574
567 576
569 578
571 580
573 582
575 584
577 586
579 588
581 590
583 592
585 594
587 596
589 598
591 600
593 602
595 604
597 606
599 608
601 610
603 612
605 614
607 616
609 618
611 620
613 622
615 624
617 626
619 628
621 630
623 632
625 634
627 636
629 638
631 640
633 642
635 644
637 646
639 648
641 650
643 652
645 654
647 656
649 658
651 660
653 662
655 664
657 666
659 668
661 670
663 672
665 674
667 676
669 678
671 680
673 682
675 684
677 686
679 688
681 690
683 692
685 694
687 696
689 698
691 700
693 702
695 704
697 706
699 708
701 710
703 712
705 714
707 716
709 718
711 720
713 722
715 724
717 726
719 728
721 730
723 732
725 734
727 736
729 738
731 740
733 742
735 744
737 746
739 748
741 750
743 752
745 754
747 756
749 758
751 760
753 762
755 764
757 766
759 768
761 770
763 772
765 774
767 776
769 778
771 780
773 782
775 784
777 786
779 788
781 790
783 792
785 794
787 796
789 798
791 800
793 802
795 804
797 806
799 808
801 810
803 812
805 814
807 816
809 818
811 820
813 822
815 824
817 826
819 828
821 830
823 832
825 834
827 836
829 838
831 840
833 842
835 844
837 846
839 848
841 850
843 852
845 854
847 856
849 858
851 860
853 862
855 864
857 866
859 868
861 870
863 872
865 874
867 876
869 878
871 880
873 882
875 884
877 886
879 888
881 890
883 892
885 894
887 896
889 898
891 900
893 902
895 904
897 906
899 908
901 910
903 912
905 914
907 916
909 918
911 920
913 922
915 924
917 926
919 928
921 930
923 932
925 934
927 936
929 938
931 940
933 942
935 944
937 946
939 948
941 950
943 952
945 954
947 956
949 958
951 960
953 962
955 964
957 966
959 968
961 970
963 972
965 974
967 976
969 978
971 980
973 982
975 984
977 986
979 988
981 990
983 992
985 994
987 996
989 998
991 1000
993 1002
995 1004
997 1006
999 1008
delete from t2;
delete from t3;
delete from t4;
......
......@@ -212,3 +212,48 @@ select count(*) from t1 where b = 1;
count(*)
1
drop table t1;
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned,
c int unsigned,
KEY bc(b,c)
) engine = ndb;
insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
select * from t1 use index (bc) where b IS NULL;
a b c
3 NULL NULL
2 NULL 2
select * from t1 use index (bc)order by a;
a b c
1 1 1
2 NULL 2
3 NULL NULL
4 4 NULL
select * from t1 use index (bc) order by a;
a b c
1 1 1
2 NULL 2
3 NULL NULL
4 4 NULL
select * from t1 use index (PRIMARY) where b IS NULL order by a;
a b c
2 NULL 2
3 NULL NULL
select * from t1 use index (bc) where b IS NULL order by a;
a b c
2 NULL 2
3 NULL NULL
select * from t1 use index (bc) where b IS NULL and c IS NULL order by a;
a b c
3 NULL NULL
select * from t1 use index (bc) where b IS NULL and c = 2 order by a;
a b c
2 NULL 2
select * from t1 use index (bc) where b < 4 order by a;
a b c
1 1 1
select * from t1 use index (bc) where b IS NOT NULL order by a;
a b c
1 1 1
4 4 NULL
drop table t1;
......@@ -109,6 +109,68 @@ a b c
3 4 6
drop table t3;
CREATE TABLE t1 (
pk int NOT NULL PRIMARY KEY,
a int unsigned,
UNIQUE KEY (a)
) engine=ndbcluster;
insert into t1 values (-1,NULL), (0,0), (1,NULL),(2,2),(3,NULL),(4,4);
select * from t1 order by pk;
pk a
-1 NULL
0 0
1 NULL
2 2
3 NULL
4 4
insert into t1 values (5,0);
ERROR 23000: Can't write, because of unique constraint, to table 't1'
select * from t1 order by pk;
pk a
-1 NULL
0 0
1 NULL
2 2
3 NULL
4 4
delete from t1 where a = 0;
insert into t1 values (5,0);
select * from t1 order by pk;
pk a
-1 NULL
1 NULL
2 2
3 NULL
4 4
5 0
CREATE TABLE t2 (
pk int NOT NULL PRIMARY KEY,
a int unsigned,
b tinyint NOT NULL,
c VARCHAR(10),
UNIQUE KEY si(a, c)
) engine=ndbcluster;
insert into t2 values (-1,1,17,NULL),(0,NULL,18,NULL),(1,3,19,'abc');
select * from t2 order by pk;
pk a b c
-1 1 17 NULL
0 NULL 18 NULL
1 3 19 abc
insert into t2 values(2,3,19,'abc');
ERROR 23000: Can't write, because of unique constraint, to table 't2'
select * from t2 order by pk;
pk a b c
-1 1 17 NULL
0 NULL 18 NULL
1 3 19 abc
delete from t2 where c IS NOT NULL;
insert into t2 values(2,3,19,'abc');
select * from t2 order by pk;
pk a b c
-1 1 17 NULL
0 NULL 18 NULL
2 3 19 abc
drop table t1, t2;
CREATE TABLE t1 (
cid smallint(5) unsigned NOT NULL default '0',
cv varchar(250) NOT NULL default '',
PRIMARY KEY (cid),
......
......@@ -11,7 +11,7 @@ insert into t1 (gesuchnr, benutzer_id) value (3,2);
replace into t1 (gesuchnr,benutzer_id) values (1,1);
replace into t1 (gesuchnr,benutzer_id) values (1,1);
insert into t1 (gesuchnr,benutzer_id) values (1,1);
ERROR 23000: Can't write; duplicate key in table 't1'
ERROR 23000: Duplicate entry '1-1' for key 1
replace into t1 (gesuchnr,benutzer_id) values (1,1);
select * from t1 order by gesuchnr;
gesuchnr benutzer_id
......
......@@ -206,10 +206,6 @@ select * from t4 where a = 7 and b = 16 order by a;
select * from t4 where a = 7 and b = 17 order by a;
select * from t4 where a = 7 and b != 16 order by b;
select x1.a, x1.b from t2 x1, t2 x2 where x1.b = x2.b order by x1.a;
select a, b FROM t2 outer_table where
a = (select a from t2 where b = outer_table.b ) order by a;
#
# update records
#
......@@ -225,6 +221,12 @@ while ($1)
}
enable_query_log;
delete from t2 where a > 5;
select x1.a, x1.b from t2 x1, t2 x2 where x1.b = x2.b order by x1.a;
select a, b FROM t2 outer_table where
a = (select a from t2 where b = outer_table.b ) order by a;
delete from t2;
delete from t3;
delete from t4;
......
......@@ -122,18 +122,22 @@ drop table t1;
# Indexing NULL values
#
#CREATE TABLE t1 (
# a int unsigned NOT NULL PRIMARY KEY,
# b int unsigned,
# c int unsigned,
# KEY bc(b,c)
#) engine = ndb;
#insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
#select * from t1 use index (bc);
#select count(*) from t1 use index (bc);
#select count(*) from t1 use index (PRIMARY) where b IS NULL;
#select count(*) from t1 use index (bc) where b IS NULL;
#select count(*) from t1 use index (bc) where b IS NULL and c = 2;
#select count(*) from t1 use index (bc) where b IS NOT NULL;
#drop table t1;
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned,
c int unsigned,
KEY bc(b,c)
) engine = ndb;
insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
select * from t1 use index (bc) where b IS NULL;
select * from t1 use index (bc)order by a;
select * from t1 use index (bc) order by a;
select * from t1 use index (PRIMARY) where b IS NULL order by a;
select * from t1 use index (bc) where b IS NULL order by a;
select * from t1 use index (bc) where b IS NULL and c IS NULL order by a;
select * from t1 use index (bc) where b IS NULL and c = 2 order by a;
select * from t1 use index (bc) where b < 4 order by a;
select * from t1 use index (bc) where b IS NOT NULL order by a;
drop table t1;
......@@ -82,43 +82,43 @@ drop table t3;
# Indexes on NULL-able columns
#
#CREATE TABLE t1 (
# pk int NOT NULL PRIMARY KEY,
# a int unsigned,
# UNIQUE KEY (a)
#) engine=ndbcluster;
#insert into t1 values (-1,NULL), (0,0), (1,NULL),(2,2),(3,NULL),(4,4);
#select * from t1 order by pk;
#--error 1169
#insert into t1 values (5,0);
#select * from t1 order by pk;
#delete from t1 where a = 0;
#insert into t1 values (5,0);
#select * from t1 order by pk;
#CREATE TABLE t2 (
# pk int NOT NULL PRIMARY KEY,
# a int unsigned,
# b tinyint NOT NULL,
# c VARCHAR(10),
# UNIQUE KEY si(a, c)
#) engine=ndbcluster;
#insert into t2 values (-1,1,17,NULL),(0,NULL,18,NULL),(1,3,19,'abc');
#select * from t2 order by pk;
#--error 1169
#insert into t2 values(2,3,19,'abc');
#select * from t2 order by pk;
#delete from t2 where c IS NOT NULL;
#insert into t2 values(2,3,19,'abc');
#select * from t2 order by pk;
#drop table t1, t2;
CREATE TABLE t1 (
pk int NOT NULL PRIMARY KEY,
a int unsigned,
UNIQUE KEY (a)
) engine=ndbcluster;
insert into t1 values (-1,NULL), (0,0), (1,NULL),(2,2),(3,NULL),(4,4);
select * from t1 order by pk;
--error 1169
insert into t1 values (5,0);
select * from t1 order by pk;
delete from t1 where a = 0;
insert into t1 values (5,0);
select * from t1 order by pk;
CREATE TABLE t2 (
pk int NOT NULL PRIMARY KEY,
a int unsigned,
b tinyint NOT NULL,
c VARCHAR(10),
UNIQUE KEY si(a, c)
) engine=ndbcluster;
insert into t2 values (-1,1,17,NULL),(0,NULL,18,NULL),(1,3,19,'abc');
select * from t2 order by pk;
--error 1169
insert into t2 values(2,3,19,'abc');
select * from t2 order by pk;
delete from t2 where c IS NOT NULL;
insert into t2 values(2,3,19,'abc');
select * from t2 order by pk;
drop table t1, t2;
#
# More complex tables
......
......@@ -20,7 +20,7 @@ replace into t1 (gesuchnr,benutzer_id) values (1,1);
insert into t1 (gesuchnr, benutzer_id) value (3,2);
replace into t1 (gesuchnr,benutzer_id) values (1,1);
replace into t1 (gesuchnr,benutzer_id) values (1,1);
--error 1022
--error 1062
insert into t1 (gesuchnr,benutzer_id) values (1,1);
replace into t1 (gesuchnr,benutzer_id) values (1,1);
select * from t1 order by gesuchnr;
......
......@@ -144,6 +144,7 @@ static int ndb_to_mysql_error(const NdbError *err)
int ha_ndbcluster::ndb_err(NdbConnection *trans)
{
int res;
const NdbError err= trans->getNdbError();
if (!err.code)
return 0; // Don't log things to DBUG log if no error
......@@ -161,7 +162,13 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans)
default:
break;
}
DBUG_RETURN(ndb_to_mysql_error(&err));
res= ndb_to_mysql_error(&err);
DBUG_PRINT("info", ("transformed ndbcluster error %d to mysql error %d",
err.code, res));
if (res == HA_ERR_FOUND_DUPP_KEY)
dupkey= table->primary_key;
DBUG_RETURN(res);
}
......@@ -1075,11 +1082,13 @@ int ha_ndbcluster::set_bounds(NdbIndexScanOperation *op,
const key_range *key,
int bound)
{
uint i, tot_len;
uint key_len, key_store_len, tot_len, key_tot_len;
byte *key_ptr;
KEY* key_info= table->key_info + active_index;
KEY_PART_INFO* key_part= key_info->key_part;
KEY_PART_INFO* end= key_part+key_info->key_parts;
Field* field;
bool key_nullable, key_null;
DBUG_ENTER("set_bounds");
DBUG_PRINT("enter", ("bound: %d", bound));
......@@ -1090,28 +1099,36 @@ int ha_ndbcluster::set_bounds(NdbIndexScanOperation *op,
// Set bounds using key data
tot_len= 0;
key_ptr= (byte *) key->key;
key_tot_len= key->length;
for (; key_part != end; key_part++)
{
Field* field= key_part->field;
uint32 field_len= field->pack_length();
tot_len+= field_len;
field= key_part->field;
key_len= key_part->length;
key_store_len= key_part->store_length;
key_nullable= (bool) key_part->null_bit;
key_null= (field->maybe_null() && *key_ptr);
tot_len+= key_store_len;
const char* bounds[]= {"LE", "LT", "GE", "GT", "EQ"};
DBUG_ASSERT(bound >= 0 && bound <= 4);
DBUG_PRINT("info", ("Set Bound%s on %s",
DBUG_PRINT("info", ("Set Bound%s on %s %s %s %s",
bounds[bound],
field->field_name));
DBUG_DUMP("key", (char*)key_ptr, field_len);
field->field_name,
key_nullable ? "NULLABLE" : "",
key_null ? "NULL":""));
DBUG_PRINT("info", ("Total length %ds", tot_len));
DBUG_DUMP("key", (char*) key_ptr, key_store_len);
if (op->setBound(field->field_name,
bound,
field->is_null() ? 0 : key_ptr,
field->is_null() ? 0 : field_len) != 0)
key_null ? 0 : (key_nullable ? key_ptr + 1 : key_ptr),
key_null ? 0 : key_len) != 0)
ERR_RETURN(op->getNdbError());
key_ptr+= field_len;
key_ptr+= key_store_len;
if (tot_len >= key->length)
if (tot_len >= key_tot_len)
break;
/*
......@@ -2157,7 +2174,10 @@ void ha_ndbcluster::info(uint flag)
if (flag & HA_STATUS_VARIABLE)
DBUG_PRINT("info", ("HA_STATUS_VARIABLE"));
if (flag & HA_STATUS_ERRKEY)
{
DBUG_PRINT("info", ("HA_STATUS_ERRKEY"));
errkey= dupkey;
}
if (flag & HA_STATUS_AUTO)
DBUG_PRINT("info", ("HA_STATUS_AUTO"));
DBUG_VOID_RETURN;
......@@ -3104,7 +3124,7 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
m_ndb(NULL),
m_table(NULL),
m_table_flags(HA_REC_NOT_IN_SEQ |
//HA_NULL_IN_KEY |
HA_NULL_IN_KEY |
HA_NOT_EXACT_COUNT |
HA_NO_PREFIX_CHAR_KEYS),
m_use_write(false),
......@@ -3116,7 +3136,8 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
ops_pending(0),
skip_auto_increment(true),
blobs_buffer(0),
blobs_buffer_size(0)
blobs_buffer_size(0),
dupkey((uint) -1)
{
int i;
......
......@@ -237,6 +237,7 @@ class ha_ndbcluster: public handler
// memory for blobs in one tuple
char *blobs_buffer;
uint32 blobs_buffer_size;
uint dupkey;
};
bool ndbcluster_init(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment