diff options
author | sergefp@mysql.com <> | 2004-12-13 20:06:06 +0300 |
---|---|---|
committer | sergefp@mysql.com <> | 2004-12-13 20:06:06 +0300 |
commit | 9ed8cd701bd64feb07bff2426e985343447b9f6a (patch) | |
tree | 64511cf791534c9423364cdf49dc849d5c6dc032 /sql/item.h | |
parent | 2d9fae642c69654ae5d5d3a91817e7ab10972a3f (diff) | |
download | mariadb-git-9ed8cd701bd64feb07bff2426e985343447b9f6a.tar.gz |
Merging fix for BUG#6976 from 4.0 to 4.1
The problem in 4.1 was the same as in 4.0 - fix_fields() not called for created Item_ref.
The fix is similar too - initialize Item_refs in ctor (but don't interfere with cases when
Item_ref is used by subselects).
Diffstat (limited to 'sql/item.h')
-rw-r--r-- | sql/item.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sql/item.h b/sql/item.h index 3c4f80e3857..cf697f59727 100644 --- a/sql/item.h +++ b/sql/item.h @@ -835,6 +835,26 @@ public: :Item_ident(db_par, table_name_par, field_name_par), ref(0) {} Item_ref(Item **item, const char *table_name_par, const char *field_name_par) :Item_ident(NullS, table_name_par, field_name_par), ref(item) {} + + /* + This constructor is used when processing GROUP BY and referred Item is + available. We set all properties here because fix_fields() will not be + called for the created Item_ref. (see BUG#6976) + TODO check if we could get rid of *_name_par parameters and if we need to + perform similar initialization for other ctors. + TODO we probably fix a superset of problems like in BUG#6658. Check this + with Bar, and if we have a more broader set of problems like this. + */ + Item_ref(Item **item, const char *table_name_par, + const char *field_name_par, Item *src) + : Item_ident(NullS, table_name_par, field_name_par), ref(item) + { + collation.set(src->collation); + max_length= src->max_length; + decimals= src->decimals; + with_sum_func= src->with_sum_func; + maybe_null= src->maybe_null; + } /* Constructor need to process subselect with temporary tables (see Item) */ Item_ref(THD *thd, Item_ref *item) :Item_ident(thd, item), ref(item->ref) {} enum Type type() const { return REF_ITEM; } @@ -890,6 +910,7 @@ public: }; class Item_in_subselect; + class Item_ref_null_helper: public Item_ref { protected: |