1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

do not find keys in external fields (bug 446 related)

sql/sql_select.cc:
  do not find keys in external fields
This commit is contained in:
unknown
2003-05-20 17:09:53 +03:00
parent 6b3b7c0296
commit 6b4e18db07

View File

@ -1929,7 +1929,10 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level,
case Item_func::OPTIMIZE_NONE: case Item_func::OPTIMIZE_NONE:
break; break;
case Item_func::OPTIMIZE_KEY: case Item_func::OPTIMIZE_KEY:
if (cond_func->key_item()->real_item()->type() == Item::FIELD_ITEM) if (cond_func->key_item()->real_item()->type() == Item::FIELD_ITEM &&
// field from outer query can't be used as key
!((Item_field*) (cond_func->key_item()->real_item()))
->depended_from)
add_key_field(key_fields,*and_level, add_key_field(key_fields,*and_level,
((Item_field*) (cond_func->key_item()->real_item())) ((Item_field*) (cond_func->key_item()->real_item()))
->field, ->field,
@ -1940,7 +1943,10 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level,
bool equal_func=(cond_func->functype() == Item_func::EQ_FUNC || bool equal_func=(cond_func->functype() == Item_func::EQ_FUNC ||
cond_func->functype() == Item_func::EQUAL_FUNC); cond_func->functype() == Item_func::EQUAL_FUNC);
if (cond_func->arguments()[0]->real_item()->type() == Item::FIELD_ITEM) if (cond_func->arguments()[0]->real_item()->type() == Item::FIELD_ITEM &&
// field from outer query can't be used as key
!((Item_field*) (cond_func->arguments()[0]->real_item()))
->depended_from)
{ {
add_key_field(key_fields,*and_level, add_key_field(key_fields,*and_level,
((Item_field*) (cond_func->arguments()[0])->real_item()) ((Item_field*) (cond_func->arguments()[0])->real_item())
@ -1949,7 +1955,10 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level,
(cond_func->arguments()[1]),usable_tables); (cond_func->arguments()[1]),usable_tables);
} }
if (cond_func->arguments()[1]->real_item()->type() == Item::FIELD_ITEM && if (cond_func->arguments()[1]->real_item()->type() == Item::FIELD_ITEM &&
cond_func->functype() != Item_func::LIKE_FUNC) cond_func->functype() != Item_func::LIKE_FUNC &&
// field from outer query can't be used as key
!((Item_field*) (cond_func->arguments()[1]->real_item()))
->depended_from)
{ {
add_key_field(key_fields,*and_level, add_key_field(key_fields,*and_level,
((Item_field*) (cond_func->arguments()[1])->real_item()) ((Item_field*) (cond_func->arguments()[1])->real_item())
@ -1961,7 +1970,10 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level,
} }
case Item_func::OPTIMIZE_NULL: case Item_func::OPTIMIZE_NULL:
/* column_name IS [NOT] NULL */ /* column_name IS [NOT] NULL */
if (cond_func->arguments()[0]->real_item()->type() == Item::FIELD_ITEM) if (cond_func->arguments()[0]->real_item()->type() == Item::FIELD_ITEM &&
// field from outer query can't be used as key
!((Item_field*) (cond_func->arguments()[0]->real_item()))
->depended_from)
{ {
add_key_field(key_fields,*and_level, add_key_field(key_fields,*and_level,
((Item_field*) (cond_func->arguments()[0])->real_item()) ((Item_field*) (cond_func->arguments()[0])->real_item())