summaryrefslogtreecommitdiff
path: root/sql/item.cc
diff options
context:
space:
mode:
authorunknown <gkodinov/kgeorge@macbook.gmz>2007-01-23 12:34:50 +0200
committerunknown <gkodinov/kgeorge@macbook.gmz>2007-01-23 12:34:50 +0200
commit276f0d4c5e4733d0953ed0fa7d696ccbe3ee89e0 (patch)
treeef50ee2680b393a9652b2c98dfe15de22de7f795 /sql/item.cc
parent4b2c3ac40d392b6027b8360b22bbe52d80b2e82a (diff)
parent6447a7b6f2c45a16b24b18d5910036aeb514849c (diff)
downloadmariadb-git-276f0d4c5e4733d0953ed0fa7d696ccbe3ee89e0.tar.gz
Merge macbook.gmz:/Users/kgeorge/mysql/work/mysql-5.0-opt
into macbook.gmz:/Users/kgeorge/mysql/work/merge-5.1-opt mysql-test/r/func_in.result: Auto merged mysql-test/r/range.result: Auto merged mysql-test/r/select.result: Auto merged mysql-test/r/sp-code.result: Auto merged mysql-test/r/trigger.result: Auto merged mysql-test/r/udf.result: Auto merged mysql-test/r/view.result: Auto merged mysql-test/t/func_in.test: Auto merged mysql-test/t/func_str.test: Auto merged mysql-test/t/range.test: Auto merged mysql-test/t/select.test: Auto merged mysql-test/t/trigger.test: Auto merged mysql-test/t/udf.test: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_func.cc: Auto merged sql/item_strfunc.cc: Auto merged sql/mysql_priv.h: Auto merged sql/opt_range.h: Auto merged sql/sql_base.cc: Auto merged sql/sql_delete.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_prepare.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/sql_union.cc: Auto merged sql/sql_update.cc: Auto merged mysql-test/r/func_str.result: merge 5.0-opt -> 5.1-opt mysql-test/r/group_by.result: merge 5.0-opt -> 5.1-opt mysql-test/r/insert.result: merge 5.0-opt -> 5.1-opt mysql-test/r/subselect.result: merge 5.0-opt -> 5.1-opt mysql-test/t/group_by.test: merge 5.0-opt -> 5.1-opt mysql-test/t/insert.test: merge 5.0-opt -> 5.1-opt mysql-test/t/subselect.test: merge 5.0-opt -> 5.1-opt mysql-test/t/view.test: merge 5.0-opt -> 5.1-opt sql/item_cmpfunc.h: merge 5.0-opt -> 5.1-opt sql/item_strfunc.h: merge 5.0-opt -> 5.1-opt
Diffstat (limited to 'sql/item.cc')
-rw-r--r--sql/item.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/sql/item.cc b/sql/item.cc
index 83be426d8b5..6ccfd4b4647 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -3503,6 +3503,16 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
{
if (*from_field)
{
+ if (thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY &&
+ select->cur_pos_in_select_list != UNDEF_POS)
+ {
+ /*
+ As this is an outer field it should be added to the list of
+ non aggregated fields of the outer select.
+ */
+ marker= select->cur_pos_in_select_list;
+ select->non_agg_fields.push_back(this);
+ }
if (*from_field != view_ref_found)
{
prev_subselect_item->used_tables_cache|= (*from_field)->table->map;
@@ -3705,10 +3715,11 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
bool Item_field::fix_fields(THD *thd, Item **reference)
{
DBUG_ASSERT(fixed == 0);
+ Field *from_field= (Field *)not_found_field;
+ bool outer_fixed= false;
+
if (!field) // If field is not checked
{
- Field *from_field= (Field *)not_found_field;
- bool outer_fixed= false;
/*
In case of view, find_field_in_tables() write pointer to view field
expression to 'reference', i.e. it substitute that expression instead
@@ -3800,6 +3811,7 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
goto error;
if (!ret)
return FALSE;
+ outer_fixed= 1;
}
set_field(from_field);
@@ -3859,6 +3871,13 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
}
#endif
fixed= 1;
+ if (thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY &&
+ !outer_fixed && !thd->lex->in_sum_func &&
+ thd->lex->current_select->cur_pos_in_select_list != UNDEF_POS)
+ {
+ thd->lex->current_select->non_agg_fields.push_back(this);
+ marker= thd->lex->current_select->cur_pos_in_select_list;
+ }
return FALSE;
error: