1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

optimizer should check for "field LIKE const" not "field like STRING"

BitKeeper/etc/ignore:
  Added configure.lineno innobase/configure.lineno to the ignore list
This commit is contained in:
unknown
2003-03-02 14:07:32 +01:00
parent a2cc82182b
commit c5cd20fe8f
4 changed files with 27 additions and 8 deletions

View File

@ -528,3 +528,5 @@ support-files/MacOSX/Info.plist
support-files/MacOSX/StartupParameters.plist
support-files/MacOSX/postinstall
support-files/MacOSX/preinstall
configure.lineno
innobase/configure.lineno

View File

@ -1,10 +1,20 @@
drop table if exists t1;
create table t1 (a varchar(10), key(a));
insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test");
explain select * from t1 where a like 'abc%';
table type possible_keys key key_len ref rows Extra
t1 range a a 11 NULL 1 Using where; Using index
explain select * from t1 where a like concat('abc','%');
table type possible_keys key key_len ref rows Extra
t1 range a a 11 NULL 1 Using where; Using index
select * from t1 where a like "abc%";
a
abc
abcd
select * from t1 where a like concat("abc","%");
a
abc
abcd
select * from t1 where a like "ABC%";
a
abc

View File

@ -5,10 +5,13 @@
drop table if exists t1;
create table t1 (a varchar(10), key(a));
insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test");
select * from t1 where a like "abc%";
select * from t1 where a like "ABC%";
select * from t1 where a like "test%";
select * from t1 where a like "te_t";
explain select * from t1 where a like 'abc%';
explain select * from t1 where a like concat('abc','%');
select * from t1 where a like "abc%";
select * from t1 where a like concat("abc","%");
select * from t1 where a like "ABC%";
select * from t1 where a like "test%";
select * from t1 where a like "te_t";
#
# The following will test the Turbo Boyer-Moore code

View File

@ -1409,12 +1409,16 @@ longlong Item_func_like::val_int()
Item_func::optimize_type Item_func_like::select_optimize() const
{
if (args[1]->type() == STRING_ITEM)
if (args[1]->const_item())
{
if (((Item_string *) args[1])->str_value[0] != wild_many)
String* res2= args[1]->val_str((String *)&tmp_value2);
if (!res2)
return OPTIMIZE_NONE;
if (*res2->ptr() != wild_many)
{
if ((args[0]->result_type() != STRING_RESULT) ||
((Item_string *) args[1])->str_value[0] != wild_one)
if (args[0]->result_type() != STRING_RESULT || *res2->ptr() != wild_one)
return OPTIMIZE_OP;
}
}