summaryrefslogtreecommitdiff
path: root/sql/item_subselect.cc
diff options
context:
space:
mode:
authorunknown <bell@laptop.sanja.is.com.ua>2003-08-23 13:33:02 +0300
committerunknown <bell@laptop.sanja.is.com.ua>2003-08-23 13:33:02 +0300
commit12b769418af82303239d43447def128ed933b440 (patch)
tree4f6d79cb5f82da36a9f726d08df99015a17cf5be /sql/item_subselect.cc
parent964ffc34b1a9d3c4a0fd67af051366bb67560137 (diff)
parent93afa26ea7c6206aca6d8dc3b25873f4d732b929 (diff)
downloadmariadb-git-12b769418af82303239d43447def128ed933b440.tar.gz
Merge laptop.sanja.is.com.ua:/home/bell/mysql/bk/work-all_any-4.1
into laptop.sanja.is.com.ua:/home/bell/mysql/bk/work-all_any_group-4.1 mysql-test/r/subselect.result: Auto merged mysql-test/t/subselect.test: Auto merged sql/item_subselect.cc: Auto merged sql/item_subselect.h: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged
Diffstat (limited to 'sql/item_subselect.cc')
-rw-r--r--sql/item_subselect.cc51
1 files changed, 11 insertions, 40 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index c6e421d763c..5c36ad42f98 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -148,7 +148,7 @@ void Item_subselect::fix_length_and_dec()
inline table_map Item_subselect::used_tables() const
{
return (table_map) (engine->dependent() ? 1L :
- (engine->uncacheable() ? OUTER_REF_TABLE_BIT : 0L));
+ (engine->uncacheable() ? RAND_TABLE_BIT : 0L));
}
Item_singlerow_subselect::Item_singlerow_subselect(THD *thd,
@@ -633,27 +633,6 @@ Item_in_subselect::single_value_transformer(JOIN *join,
if (select_lex->table_list.elements)
{
Item *having= item, *isnull= item;
- if (item->type() == Item::FIELD_ITEM &&
- ((Item_field*) item)->field_name[0] == '*')
- {
- Item_asterisk_remover *remover;
- item= remover= new Item_asterisk_remover(this, item,
- (char *)"<no matter>",
- (char *)"<result>");
- if (!abort_on_null)
- {
- having=
- new Item_is_not_null_test(this,
- new Item_ref(remover->storage(),
- (char *)"<no matter>",
- (char *)"<null test>"));
- isnull=
- new Item_is_not_null_test(this,
- new Item_ref(remover->storage(),
- (char *)"<no matter>",
- (char *)"<null test>"));
- }
- }
item= (*func)(expr, item);
if (!abort_on_null)
{
@@ -677,22 +656,12 @@ Item_in_subselect::single_value_transformer(JOIN *join,
}
else
{
- if (item->type() == Item::FIELD_ITEM &&
- ((Item_field*) item)->field_name[0] == '*')
- {
- my_error(ER_NO_TABLES_USED, MYF(0));
- DBUG_RETURN(ERROR);
- }
if (select_lex->master_unit()->first_select()->next_select())
{
- /*
- It is in union => we should perform it.
- Item_asterisk_remover used only as wrapper to receine NULL value
- */
join->having= (*func)(expr,
- new Item_asterisk_remover(this, item,
- (char *)"<no matter>",
- (char *)"<result>"));
+ new Item_null_helper(this, item,
+ (char *)"<no matter>",
+ (char *)"<result>"));
select_lex->having_fix_field= 1;
if (join->having->fix_fields(thd, join->tables_list, &join->having))
{
@@ -755,15 +724,17 @@ Item_in_subselect::row_value_transformer(JOIN *join,
uint n= left_expr->cols();
select_lex->dependent= 1;
-
+ select_lex->setup_ref_array(thd,
+ select_lex->order_list.elements +
+ select_lex->group_list.elements);
Item *item= 0;
List_iterator_fast<Item> li(select_lex->item_list);
for (uint i= 0; i < n; i++)
{
- Item *func=
- new Item_ref_on_list_position(this, select_lex, i,
- (char *) "<no matter>",
- (char *) "<list ref>");
+ Item *func= new Item_ref_null_helper(this,
+ select_lex->ref_pointer_array+i,
+ (char *) "<no matter>",
+ (char *) "<list ref>");
func=
Item_bool_func2::eq_creator(new Item_ref((*optimizer->get_cache())->
addr(i),