mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
fixed problem with reference on derived table fields (BUG#1031)
mysql-test/r/derived.result: test of BUG#1031 mysql-test/t/derived.test: test of BUG#1031 sql/item_sum.cc: 'alias' parameter added to create_tmp_table sql/sql_derived.cc: Derived table should be named (to pass it name to Field and then to Item_field) sql/sql_select.cc: 'alias' parameter added to create_tmp_table sql/sql_select.h: 'alias' parameter added to create_tmp_table sql/sql_union.cc: 'alias' parameter added to create_tmp_table sql/sql_update.cc: 'alias' parameter added to create_tmp_table
This commit is contained in:
parent
253b2a9654
commit
45b145a96e
8 changed files with 26 additions and 14 deletions
|
@ -192,3 +192,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 6 Using where
|
||||
2 DERIVED mp ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
2 DERIVED m2 index NULL PRIMARY 3 NULL 9 Using index
|
||||
drop table t1,t2;
|
||||
SELECT a.x FROM (SELECT 1 AS x) AS a HAVING a.x = 1;
|
||||
x
|
||||
1
|
||||
|
|
|
@ -88,5 +88,9 @@ SELECT d.pla_id, m2.test FROM t1 m2 INNER JOIN (SELECT mp.pla_id, MIN(m1.matint
|
|||
|
||||
explain SELECT d.pla_id, m2.mat_id FROM t1 m2 INNER JOIN (SELECT mp.pla_id, MIN(m1.matintnum) AS matintnum FROM t2 mp INNER JOIN t1 m1 ON mp.mat_id=m1.mat_id GROUP BY mp.pla_id) d ON d.matintnum=m2.matintnum;
|
||||
explain SELECT d.pla_id, m2.test FROM t1 m2 INNER JOIN (SELECT mp.pla_id, MIN(m1.matintnum) AS matintnum FROM t2 mp INNER JOIN t1 m1 ON mp.mat_id=m1.mat_id GROUP BY mp.pla_id) d ON d.matintnum=m2.matintnum;
|
||||
drop table t1,t2;
|
||||
|
||||
drop table t1,t2
|
||||
#
|
||||
# derived table reference
|
||||
#
|
||||
SELECT a.x FROM (SELECT 1 AS x) AS a HAVING a.x = 1;
|
||||
|
|
|
@ -1147,7 +1147,7 @@ bool Item_sum_count_distinct::setup(THD *thd)
|
|||
if (!(table= create_tmp_table(thd, tmp_table_param, list, (ORDER*) 0, 1,
|
||||
0,
|
||||
select_lex->options | thd->options,
|
||||
HA_POS_ERROR)))
|
||||
HA_POS_ERROR, (char*)"")))
|
||||
return 1;
|
||||
table->file->extra(HA_EXTRA_NO_ROWS); // Don't update rows
|
||||
table->no_rows=1;
|
||||
|
@ -1834,7 +1834,8 @@ bool Item_func_group_concat::setup(THD *thd)
|
|||
(types, sizes and so on).
|
||||
*/
|
||||
if (!(table=create_tmp_table(thd, tmp_table_param, all_fields, 0,
|
||||
0, 0, 0,select_lex->options | thd->options)))
|
||||
0, 0, 0,select_lex->options | thd->options,
|
||||
(char *) "")))
|
||||
DBUG_RETURN(1);
|
||||
table->file->extra(HA_EXTRA_NO_ROWS);
|
||||
table->no_rows= 1;
|
||||
|
|
|
@ -157,7 +157,8 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
|||
is_union && !unit->union_option, 1,
|
||||
(select_cursor->options | thd->options |
|
||||
TMP_TABLE_ALL_COLUMNS),
|
||||
HA_POS_ERROR)))
|
||||
HA_POS_ERROR,
|
||||
org_table_list->alias)))
|
||||
{
|
||||
res= -1;
|
||||
goto exit;
|
||||
|
|
|
@ -787,7 +787,8 @@ JOIN::optimize()
|
|||
group_list && simple_group,
|
||||
select_options,
|
||||
(order == 0 || skip_sort_order) ? select_limit :
|
||||
HA_POS_ERROR)))
|
||||
HA_POS_ERROR,
|
||||
(char *) "")))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
/*
|
||||
|
@ -1120,7 +1121,8 @@ JOIN::exec()
|
|||
curr_join->select_distinct &&
|
||||
!curr_join->group_list,
|
||||
1, curr_join->select_options,
|
||||
HA_POS_ERROR)))
|
||||
HA_POS_ERROR,
|
||||
(char *) "")))
|
||||
DBUG_VOID_RETURN;
|
||||
curr_join->exec_tmp_table2= exec_tmp_table2;
|
||||
}
|
||||
|
@ -4321,7 +4323,8 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
|||
TABLE *
|
||||
create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
ORDER *group, bool distinct, bool save_sum_fields,
|
||||
ulong select_options, ha_rows rows_limit)
|
||||
ulong select_options, ha_rows rows_limit,
|
||||
char *table_alias)
|
||||
{
|
||||
TABLE *table;
|
||||
uint i,field_count,reclength,null_count,null_pack_length,
|
||||
|
@ -4410,10 +4413,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
|||
table->field=reg_field;
|
||||
table->blob_field= (Field_blob**) blob_field;
|
||||
table->real_name=table->path=tmpname;
|
||||
/*
|
||||
This must be "" as field may refer to it after tempory table is dropped
|
||||
*/
|
||||
table->table_name= (char*) "";
|
||||
table->table_name= table_alias;
|
||||
table->reginfo.lock_type=TL_WRITE; /* Will be updated */
|
||||
table->db_stat=HA_OPEN_KEYFILE+HA_OPEN_RNDFILE;
|
||||
table->blob_ptr_size=mi_portable_sizeof_char_ptr;
|
||||
|
|
|
@ -274,7 +274,8 @@ void TEST_join(JOIN *join);
|
|||
bool store_val_in_field(Field *field,Item *val);
|
||||
TABLE *create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
ORDER *group, bool distinct, bool save_sum_fields,
|
||||
ulong select_options, ha_rows rows_limit);
|
||||
ulong select_options, ha_rows rows_limit,
|
||||
char* alias);
|
||||
void free_tmp_table(THD *thd, TABLE *entry);
|
||||
void count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
bool reset_with_sum_func);
|
||||
|
|
|
@ -178,7 +178,7 @@ int st_select_lex_unit::prepare(THD *thd, select_result *sel_result,
|
|||
(ORDER*) 0, !union_option,
|
||||
1, (select_cursor->options | thd->options |
|
||||
TMP_TABLE_ALL_COLUMNS),
|
||||
HA_POS_ERROR)))
|
||||
HA_POS_ERROR, (char*) "")))
|
||||
goto err;
|
||||
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
||||
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
|
||||
|
|
|
@ -640,7 +640,8 @@ multi_update::initialize_tables(JOIN *join)
|
|||
temp_fields,
|
||||
(ORDER*) &group, 0, 0,
|
||||
TMP_TABLE_ALL_COLUMNS,
|
||||
HA_POS_ERROR)))
|
||||
HA_POS_ERROR,
|
||||
(char *) "")))
|
||||
DBUG_RETURN(1);
|
||||
tmp_tables[cnt]->file->extra(HA_EXTRA_WRITE_CACHE);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue