diff options
author | unknown <bell@sanja.is.com.ua> | 2004-03-20 13:36:26 +0200 |
---|---|---|
committer | unknown <bell@sanja.is.com.ua> | 2004-03-20 13:36:26 +0200 |
commit | 042b46fc1c775a4d0986e4b01e09b0d91c504aef (patch) | |
tree | de1ab82158f22c98608b574edb706c1f3de591b5 /sql/sql_union.cc | |
parent | adc4aa5ae69e5d3fcc5ea6fd0350402fbd976511 (diff) | |
download | mariadb-git-042b46fc1c775a4d0986e4b01e09b0d91c504aef.tar.gz |
after review changes
sql/item.cc:
removed double_fix & already_fixed in Item_field
sql/item.h:
added quick_fix_field() for cases when we are sure that no need full fix_field processing
fixed neg() method for numeric constants to have the same logic as constant parser
Item_null, Item_real, ... are constant which are fixed by creation
sql/item_cmpfunc.h:
right fix_fields in and_conds call
sql/item_func.cc:
changed Item_field constructor call
fix_field emulation call
sql/item_strfunc.cc:
correct layout
sql/item_subselect.cc:
correct layout
changed Item_field constructor call
sql/item_sum.cc:
changed Item_field constructor call
sql/item_sum.h:
changed Item_field constructor call
sql/sql_base.cc:
fixed layout
right fix_fields calls
sql/sql_help.cc:
changed Item_field constructor call
sql/sql_load.cc:
changed Item_field constructor call
sql/sql_parse.cc:
constant changed
sql/sql_select.cc:
fixed layout
fix_field emulation insted of real fix_fields call
sql/sql_show.cc:
changed Item_field constructor call
sql/sql_union.cc:
changed Item_field constructor call
double_fix removed
sql/sql_update.cc:
renamed variable, fixed layout
sql/sql_yacc.yy:
typo fixed
fix_fields emulation calls
hegation of numbers fixed
Diffstat (limited to 'sql/sql_union.cc')
-rw-r--r-- | sql/sql_union.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/sql/sql_union.cc b/sql/sql_union.cc index bb5996919e3..87f70bcbd3a 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -229,12 +229,9 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result, Field **field; for (field= table->field; *field; field++) { - Item_field *item= new Item_field(*field, 1); - if (item_list.push_back(item)) + Item_field *item= new Item_field(*field); + if (!item || item_list.push_back(item)) DBUG_RETURN(-1); -#ifndef DBUG_OFF - item->double_fix= 0; -#endif } } } @@ -463,4 +460,17 @@ int st_select_lex_unit::cleanup() void st_select_lex_unit::reinit_exec_mechanism() { prepared= optimized= executed= 0; +#ifndef DBUG_OFF + List_iterator_fast<Item> it(item_list); + Item_field *field; + while ((field= (Item_field *)it++)) + { + /* + we can't cleanup here, because it broke link to temporary table field, + but have to drop fixed flag to allow next fix_field of this field + during re-executing + */ + field->fixed= 0; + } +#endif } |