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 | f379d7b172401206de5654f52466601de874cade (patch) | |
tree | de1ab82158f22c98608b574edb706c1f3de591b5 /sql/sql_union.cc | |
parent | 647498e9657b7d68faf0cb24bac43a940238920c (diff) | |
download | mariadb-git-f379d7b172401206de5654f52466601de874cade.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 } |