summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2002-12-25 12:51:08 +0200
committerunknown <bell@sanja.is.com.ua>2002-12-25 12:51:08 +0200
commit0ba620214ce9a9b2f22659a438b404badc69c60d (patch)
tree5a10bf7f80f81ee541cc433cd8a365515d83d7de
parentd765d3f37b961e8a83e0c56365de27303d3a986b (diff)
downloadmariadb-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.cc41
-rw-r--r--sql/item_subselect.h10
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