diff options
author | unknown <bell@sanja.is.com.ua> | 2002-12-25 12:51:08 +0200 |
---|---|---|
committer | unknown <bell@sanja.is.com.ua> | 2002-12-25 12:51:08 +0200 |
commit | 0ba620214ce9a9b2f22659a438b404badc69c60d (patch) | |
tree | 5a10bf7f80f81ee541cc433cd8a365515d83d7de | |
parent | d765d3f37b961e8a83e0c56365de27303d3a986b (diff) | |
download | mariadb-git-0ba620214ce9a9b2f22659a438b404badc69c60d.tar.gz |
more correct argument for translation function (SCRUM related)
fiexd bug in LIMIT check
sql/item_subselect.cc:
more correct argument for translation function
fiexd bug in LIMIT check
sql/item_subselect.h:
more correct argument for translation function
-rw-r--r-- | sql/item_subselect.cc | 41 | ||||
-rw-r--r-- | sql/item_subselect.h | 10 |
2 files changed, 25 insertions, 26 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 6bcb78134a2..65c942a75ce 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -51,7 +51,7 @@ void Item_subselect::init(THD *thd, st_select_lex *select_lex, DBUG_ENTER("Item_subselect::init"); DBUG_PRINT("subs", ("select_lex 0x%xl", (ulong) select_lex)); - select_transformer(select_lex); + select_transformer(select_lex->master_unit()); if (select_lex->next_select()) engine= new subselect_union_engine(thd, select_lex->master_unit(), result, this); @@ -67,7 +67,7 @@ Item_subselect::~Item_subselect() delete engine; } -void Item_subselect::select_transformer(st_select_lex *select_lex) +void Item_subselect::select_transformer(st_select_lex_unit *unit) { DBUG_ENTER("Item_subselect::select_transformer"); DBUG_VOID_RETURN; @@ -394,13 +394,12 @@ Item_allany_subselect::Item_allany_subselect(Item_allany_subselect *item): func= item->func; } -void Item_in_subselect::single_value_transformer(st_select_lex *select_lex, +void Item_in_subselect::single_value_transformer(st_select_lex_unit *unit, Item *left_expr, compare_func_creator func) { DBUG_ENTER("Item_in_subselect::single_value_transformer"); - if (select_lex->master_unit()->global_parameters->select_limit != - HA_POS_ERROR) + if (unit->global_parameters->select_limit != HA_POS_ERROR) { my_error(ER_NOT_SUPPORTED_YET, MYF(0), "LIMIT & IN/ALL/ANY/SOME subquery"); @@ -420,17 +419,17 @@ void Item_in_subselect::single_value_transformer(st_select_lex *select_lex, Item *expr= new Item_ref((Item**)optimizer->get_cache(), (char *)"<no matter>", (char*)"<left expr>"); - select_lex->master_unit()->dependent= 1; - for (SELECT_LEX * sl= select_lex; sl; sl= sl->next_select()) + unit->dependent= 1; + for (SELECT_LEX * sl= unit->first_select(); sl; sl= sl->next_select()) { - if (select_lex->select_limit != HA_POS_ERROR) + if (sl->select_limit != HA_POS_ERROR) { my_error(ER_NOT_SUPPORTED_YET, MYF(0), "LIMIT & IN/ALL/ANY/SOME subquery"); DBUG_VOID_RETURN; } - select_lex->dependent= 1; + sl->dependent= 1; Item *item; if (sl->item_list.elements > 1) { @@ -481,7 +480,7 @@ void Item_in_subselect::single_value_transformer(st_select_lex *select_lex, my_error(ER_NO_TABLES_USED, MYF(0)); DBUG_VOID_RETURN; } - if (select_lex->next_select()) + if (unit->first_select()->next_select()) { /* It is in union => we should perform it. @@ -513,11 +512,11 @@ void Item_in_subselect::single_value_transformer(st_select_lex *select_lex, DBUG_VOID_RETURN; } -void Item_in_subselect::row_value_transformer(st_select_lex *select_lex, +void Item_in_subselect::row_value_transformer(st_select_lex_unit *unit, Item *left_expr) { DBUG_ENTER("Item_in_subselect::row_value_transformer"); - if (select_lex->master_unit()->global_parameters->select_limit != + if (unit->global_parameters->select_limit != HA_POS_ERROR) { my_error(ER_NOT_SUPPORTED_YET, MYF(0), @@ -531,20 +530,20 @@ void Item_in_subselect::row_value_transformer(st_select_lex *select_lex, current_thd->fatal_error= 1; DBUG_VOID_RETURN; } - select_lex->master_unit()->dependent= 1; + unit->dependent= 1; uint n= left_expr->cols(); if (optimizer->preallocate_row() || (*optimizer->get_cache())->allocate(n)) DBUG_VOID_RETURN; - for (SELECT_LEX * sl= select_lex; sl; sl= sl->next_select()) + for (SELECT_LEX * sl= unit->first_select(); sl; sl= sl->next_select()) { - if (select_lex->select_limit != HA_POS_ERROR) + if (sl->select_limit != HA_POS_ERROR) { my_error(ER_NOT_SUPPORTED_YET, MYF(0), "LIMIT & IN/ALL/ANY/SOME subquery"); DBUG_VOID_RETURN; } - select_lex->dependent= 1; + sl->dependent= 1; Item *item= 0; List_iterator_fast<Item> li(sl->item_list); @@ -582,18 +581,18 @@ void Item_in_subselect::row_value_transformer(st_select_lex *select_lex, } -void Item_in_subselect::select_transformer(st_select_lex *select_lex) +void Item_in_subselect::select_transformer(st_select_lex_unit *unit) { if (left_expr->cols() == 1) - single_value_transformer(select_lex, left_expr, + single_value_transformer(unit, left_expr, &Item_bool_func2::eq_creator); else - row_value_transformer(select_lex, left_expr); + row_value_transformer(unit, left_expr); } -void Item_allany_subselect::select_transformer(st_select_lex *select_lex) +void Item_allany_subselect::select_transformer(st_select_lex_unit *unit) { - single_value_transformer(select_lex, left_expr, func); + single_value_transformer(unit, left_expr, func); } subselect_single_select_engine::subselect_single_select_engine(THD *thd, diff --git a/sql/item_subselect.h b/sql/item_subselect.h index 04f0e6f3c83..6063730d6a8 100644 --- a/sql/item_subselect.h +++ b/sql/item_subselect.h @@ -71,7 +71,7 @@ public: { null_value= 1; } - virtual void select_transformer(st_select_lex *select_lex); + virtual void select_transformer(st_select_lex_unit *unit); bool assigned() { return value_assigned; } void assigned(bool a) { value_assigned= a; } enum Type type() const; @@ -172,10 +172,10 @@ public: null_value= 0; was_null= 0; } - virtual void select_transformer(st_select_lex *select_lex); - void single_value_transformer(st_select_lex *select_lex, + virtual void select_transformer(st_select_lex_unit *unit); + void single_value_transformer(st_select_lex_unit *unit, Item *left_expr, compare_func_creator func); - void row_value_transformer(st_select_lex *select_lex, Item *left_expr); + void row_value_transformer(st_select_lex_unit *unit, Item *left_expr); longlong val_int(); double val(); String *val_str(String*); @@ -194,7 +194,7 @@ public: Item_allany_subselect(THD *thd, Item * left_expr, compare_func_creator f, st_select_lex *select_lex); Item_allany_subselect(Item_allany_subselect *item); - virtual void select_transformer(st_select_lex *select_lex); + virtual void select_transformer(st_select_lex_unit *unit); }; class subselect_engine |