diff options
author | unknown <monty@mashka.mysql.fi> | 2003-01-29 19:22:22 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-01-29 19:22:22 +0200 |
commit | 93ebd4d64d4748bd55834ac76b0b796d075f68b4 (patch) | |
tree | c75b9bfc08d3d793d015a4b05b46c723ec15ce0e /sql/item_cmpfunc.cc | |
parent | 9c89ce7b3acc40fa9cd739b041611d79d43f55da (diff) | |
parent | 3a180c331aa30b393d8cbeff51793ed61592bd75 (diff) | |
download | mariadb-git-93ebd4d64d4748bd55834ac76b0b796d075f68b4.tar.gz |
merge with 3.23.56 to get patches for --lower-case-table-names and
proper handling of SUM() in some functions.
BitKeeper/etc/logging_ok:
auto-union
sql/item_cmpfunc.cc:
Auto merged
sql/item_cmpfunc.h:
Auto merged
sql/item_func.cc:
Auto merged
sql/item_func.h:
Auto merged
sql/item_strfunc.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_db.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/table.cc:
Auto merged
mysql-test/r/group_by.result:
merge with 3.23.56
mysql-test/t/group_by.test:
merge with 3.23.56
sql/item_strfunc.h:
merge with 3.23.56
sql/mysqld.cc:
merge with 3.23.56
sql/sql_parse.cc:
merge with 3.23.56
sql/sql_yacc.yy:
merge with 3.23.56
Diffstat (limited to 'sql/item_cmpfunc.cc')
-rw-r--r-- | sql/item_cmpfunc.cc | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 2a363164656..55e8ef7c4b5 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -293,6 +293,19 @@ void Item_func_interval::fix_length_and_dec() } maybe_null=0; max_length=2; used_tables_cache|=item->used_tables(); + with_sum_func= with_sum_func || item->with_sum_func; +} + +void Item_func_interval::split_sum_func(List<Item> &fields) +{ + if (item->with_sum_func && item->type() != SUM_FUNC_ITEM) + item->split_sum_func(fields); + else if (item->used_tables() || item->type() == SUM_FUNC_ITEM) + { + fields.push_front(item); + item= new Item_ref((Item**) fields.head_ref(), 0, item->name); + } + Item_int_func::split_sum_func(fields); } /* @@ -781,17 +794,45 @@ Item_func_case::fix_fields(THD *thd,TABLE_LIST *tables) { used_tables_cache|=(first_expr)->used_tables(); const_item_cache&= (first_expr)->const_item(); + with_sum_func= with_sum_func || (first_expr)->with_sum_func; } if (else_expr) { used_tables_cache|=(else_expr)->used_tables(); const_item_cache&= (else_expr)->const_item(); + with_sum_func= with_sum_func || (else_expr)->with_sum_func; } if (!else_expr || else_expr->maybe_null) maybe_null=1; // The result may be NULL return 0; } +void Item_func_case::split_sum_func(List<Item> &fields) +{ + if (first_expr) + { + if (first_expr->with_sum_func && first_expr->type() != SUM_FUNC_ITEM) + first_expr->split_sum_func(fields); + else if (first_expr->used_tables() || first_expr->type() == SUM_FUNC_ITEM) + { + fields.push_front(first_expr); + first_expr= new Item_ref((Item**) fields.head_ref(), 0, + first_expr->name); + } + } + if (else_expr) + { + if (else_expr->with_sum_func && else_expr->type() != SUM_FUNC_ITEM) + else_expr->split_sum_func(fields); + else if (else_expr->used_tables() || else_expr->type() == SUM_FUNC_ITEM) + { + fields.push_front(else_expr); + else_expr= new Item_ref((Item**) fields.head_ref(), 0, else_expr->name); + } + } + Item_func::split_sum_func(fields); +} + void Item_func_case::update_used_tables() { Item_func::update_used_tables(); @@ -1081,7 +1122,7 @@ void Item_func_in::split_sum_func(List<Item> &fields) else if (item->used_tables() || item->type() == SUM_FUNC_ITEM) { fields.push_front(item); - item=new Item_ref((Item**) fields.head_ref(),0,item->name); + item= new Item_ref((Item**) fields.head_ref(), 0, item->name); } Item_func::split_sum_func(fields); } |