mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Allow keys with 0 segements in MyISAM
This fixed a bug in SELECT DISTINCT when all selected parts where constants. (Bug #3203) myisam/mi_create.c: Allow keys with 0 segements. mysql-test/r/myisam.result: Test for problem with SELECT DISTINCT mysql-test/t/myisam.test: Test for problem with SELECT DISTINCT
This commit is contained in:
@@ -366,7 +366,13 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
||||
my_errno=HA_WRONG_CREATE_OPTION;
|
||||
goto err;
|
||||
}
|
||||
if ((keydef->flag & (HA_NOSAME | HA_NULL_PART_KEY)) == HA_NOSAME)
|
||||
/*
|
||||
key_segs may be 0 in the case when we only want to be able to
|
||||
add on row into the table. This can happen with some DISTINCT queries
|
||||
in MySQL
|
||||
*/
|
||||
if ((keydef->flag & (HA_NOSAME | HA_NULL_PART_KEY)) == HA_NOSAME &&
|
||||
key_segs)
|
||||
share.state.rec_per_key_part[key_segs-1]=1L;
|
||||
length+=key_length;
|
||||
keydef->block_length= MI_BLOCK_SIZE(length,pointer,MI_MAX_KEYPTR_SIZE);
|
||||
|
||||
@@ -431,3 +431,25 @@ a concat(b,'.')
|
||||
1 a.
|
||||
3 a .
|
||||
drop table t1;
|
||||
create table t1 (a int not null);
|
||||
create table t2 (a int not null, primary key (a));
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (1),(2);
|
||||
select sql_big_result distinct t1.a from t1,t2 order by t2.a;
|
||||
a
|
||||
1
|
||||
select distinct t1.a from t1,t2 order by t2.a;
|
||||
a
|
||||
1
|
||||
select sql_big_result distinct t1.a from t1,t2;
|
||||
a
|
||||
1
|
||||
explain select sql_big_result distinct t1.a from t1,t2 order by t2.a;
|
||||
table type possible_keys key key_len ref rows Extra
|
||||
t1 system NULL NULL NULL NULL 1 Using temporary
|
||||
t2 index NULL PRIMARY 4 NULL 2 Using index; Distinct
|
||||
explain select distinct t1.a from t1,t2 order by t2.a;
|
||||
table type possible_keys key key_len ref rows Extra
|
||||
t1 system NULL NULL NULL NULL 1 Using temporary
|
||||
t2 index NULL PRIMARY 4 NULL 2 Using index; Distinct
|
||||
drop table t1,t2;
|
||||
|
||||
@@ -422,3 +422,17 @@ update t1 set b='b ' where a > 1;
|
||||
delete from t1 where b='b';
|
||||
select a,concat(b,'.') from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test keys with 0 segments. (Bug #3203)
|
||||
#
|
||||
create table t1 (a int not null);
|
||||
create table t2 (a int not null, primary key (a));
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (1),(2);
|
||||
select sql_big_result distinct t1.a from t1,t2 order by t2.a;
|
||||
select distinct t1.a from t1,t2 order by t2.a;
|
||||
select sql_big_result distinct t1.a from t1,t2;
|
||||
explain select sql_big_result distinct t1.a from t1,t2 order by t2.a;
|
||||
explain select distinct t1.a from t1,t2 order by t2.a;
|
||||
drop table t1,t2;
|
||||
|
||||
Reference in New Issue
Block a user