mirror of
https://github.com/MariaDB/server.git
synced 2025-07-13 02:22:51 +03:00
Fix max_key_length and max_unique_length to take into account varchar and null extra lengths
This fixes a bug found by bdb.test Fixes a portability issue with bdb tables mysql-test/include/varchar.inc: Fix test to be reproducable (Either key v or v_2 could be used here) mysql-test/r/bdb.result: Fix test to be reproducable (Either key v or v_2 could be used here) mysql-test/r/myisam.result: Fix test to be reproducable (Either key v or v_2 could be used here) sql/table.cc: Fix max_key_length and max_unique_length to take into account varchar and null extra lengths This fixes a bug found by bdb.test
This commit is contained in:
@ -77,6 +77,7 @@ explain select count(*) from t1 where v between 'a' and 'a ' and v between 'a '
|
|||||||
alter table t1 add unique(v);
|
alter table t1 add unique(v);
|
||||||
alter table t1 add key(v);
|
alter table t1 add key(v);
|
||||||
select concat('*',v,'*',c,'*',t,'*') as qq from t1 where v='a';
|
select concat('*',v,'*',c,'*',t,'*') as qq from t1 where v='a';
|
||||||
|
--replace_column 6 #
|
||||||
explain select * from t1 where v='a';
|
explain select * from t1 where v='a';
|
||||||
|
|
||||||
# GROUP BY
|
# GROUP BY
|
||||||
|
@ -1445,7 +1445,7 @@ qq
|
|||||||
*a *a*a *
|
*a *a*a *
|
||||||
explain select * from t1 where v='a';
|
explain select * from t1 where v='a';
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ref v,v_2 v 13 const 10 Using where
|
1 SIMPLE t1 ref v,v_2 # 13 const 10 Using where
|
||||||
select v,count(*) from t1 group by v limit 10;
|
select v,count(*) from t1 group by v limit 10;
|
||||||
v count(*)
|
v count(*)
|
||||||
a 1
|
a 1
|
||||||
|
@ -716,7 +716,7 @@ qq
|
|||||||
*a *a*a *
|
*a *a*a *
|
||||||
explain select * from t1 where v='a';
|
explain select * from t1 where v='a';
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ref v,v_2 v_2 13 const 7 Using where
|
1 SIMPLE t1 ref v,v_2 # 13 const 7 Using where
|
||||||
select v,count(*) from t1 group by v limit 10;
|
select v,count(*) from t1 group by v limit 10;
|
||||||
v count(*)
|
v count(*)
|
||||||
a 1
|
a 1
|
||||||
|
11
sql/table.cc
11
sql/table.cc
@ -262,11 +262,6 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
|
|||||||
}
|
}
|
||||||
key_part->store_length=key_part->length;
|
key_part->store_length=key_part->length;
|
||||||
}
|
}
|
||||||
set_if_bigger(outparam->max_key_length,keyinfo->key_length+
|
|
||||||
keyinfo->key_parts);
|
|
||||||
outparam->total_key_length+= keyinfo->key_length;
|
|
||||||
if (keyinfo->flags & HA_NOSAME)
|
|
||||||
set_if_bigger(outparam->max_unique_length,keyinfo->key_length);
|
|
||||||
}
|
}
|
||||||
keynames=(char*) key_part;
|
keynames=(char*) key_part;
|
||||||
strpos+= (strmov(keynames, (char *) strpos) - keynames)+1;
|
strpos+= (strmov(keynames, (char *) strpos) - keynames)+1;
|
||||||
@ -718,6 +713,12 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
keyinfo->usable_key_parts=usable_parts; // Filesort
|
keyinfo->usable_key_parts=usable_parts; // Filesort
|
||||||
|
|
||||||
|
set_if_bigger(outparam->max_key_length,keyinfo->key_length+
|
||||||
|
keyinfo->key_parts);
|
||||||
|
outparam->total_key_length+= keyinfo->key_length;
|
||||||
|
if (keyinfo->flags & HA_NOSAME)
|
||||||
|
set_if_bigger(outparam->max_unique_length,keyinfo->key_length);
|
||||||
}
|
}
|
||||||
if (primary_key < MAX_KEY &&
|
if (primary_key < MAX_KEY &&
|
||||||
(outparam->keys_in_use.is_set(primary_key)))
|
(outparam->keys_in_use.is_set(primary_key)))
|
||||||
|
Reference in New Issue
Block a user