diff options
author | unknown <igor@olga.mysql.com> | 2007-03-27 09:48:10 -0700 |
---|---|---|
committer | unknown <igor@olga.mysql.com> | 2007-03-27 09:48:10 -0700 |
commit | ec3de56263e748603b954e29ca35bacb3e386176 (patch) | |
tree | cbad086848f82ca4ef82b4b350ce3a4eae03f168 /sql/item_sum.cc | |
parent | 6e93d2939df73eceb8b39e0c2e08e96fb4c764d2 (diff) | |
download | mariadb-git-ec3de56263e748603b954e29ca35bacb3e386176.tar.gz |
Fixed bug #27348.
If a set function with a outer reference s(outer_ref) cannot be aggregated
the outer query against which the reference has been resolved then MySQL
interpretes s(outer_ref) in the same way as it would interpret s(const).
Hovever the standard requires throwing an error in this situation.
Added some code to support this requirement in ansi mode.
Corrected another minor bug in Item_sum::check_sum_func.
mysql-test/r/subselect.result:
Added a test case for bug #27348.
mysql-test/t/subselect.test:
Added a test case for bug #27348.
sql/item_sum.cc:
Fixed bug #27348.
If a set function with a outer reference s(outer_ref) cannot be aggregated
the outer query against which the reference has been resolved then MySQL
interprets s(outer_ref) in the same way as it would interpret s(const).
Hovever the standard requires throwing an error in this situation.
Added some code to support this requirement in ansi mode.
Corrected another minor bug in Item_sum::check_sum_func.
Diffstat (limited to 'sql/item_sum.cc')
-rw-r--r-- | sql/item_sum.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 368dc9a7d38..e10357dc0e0 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -149,6 +149,8 @@ bool Item_sum::check_sum_func(THD *thd, Item **ref) if (register_sum_func(thd, ref)) return TRUE; invalid= aggr_level < 0 && !(allow_sum_func & (1 << nest_level)); + if (!invalid && thd->variables.sql_mode & MODE_ANSI) + invalid= aggr_level < 0 && max_arg_level < nest_level; } if (!invalid && aggr_level < 0) { @@ -164,8 +166,9 @@ bool Item_sum::check_sum_func(THD *thd, Item **ref) Additionally we have to check whether possible nested set functions are acceptable here: they are not, if the level of aggregation of some of them is less than aggr_level. - */ - invalid= aggr_level <= max_sum_func_level; + */ + if (!invalid) + invalid= aggr_level <= max_sum_func_level; if (invalid) { my_message(ER_INVALID_GROUP_FUNC_USE, ER(ER_INVALID_GROUP_FUNC_USE), |