diff options
author | monty@mysql.com <> | 2005-02-10 02:27:37 +0200 |
---|---|---|
committer | monty@mysql.com <> | 2005-02-10 02:27:37 +0200 |
commit | a1a39fab845e6d39f25b256e5566c7a2b05c198b (patch) | |
tree | 5b603904b731e515c447d53d7843855bfbbe2f8c /sql/sql_select.cc | |
parent | 5239605105ad51cce9e65f8ecbc1aacb4afda031 (diff) | |
parent | 70797f571fc593aa887dec64c29cbd8656a8bc1d (diff) | |
download | mariadb-git-a1a39fab845e6d39f25b256e5566c7a2b05c198b.tar.gz |
Merge with 4.1
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r-- | sql/sql_select.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 6af257893d4..f49f980f364 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -8247,6 +8247,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, keyinfo->key_length=(uint16) reclength; keyinfo->name= (char*) "distinct_key"; keyinfo->algorithm= HA_KEY_ALG_UNDEF; + keyinfo->rec_per_key=0; if (null_pack_length) { key_part_info->null_bit=0; @@ -11831,6 +11832,7 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param, res_selected_fields.empty(); res_all_fields.empty(); List_iterator_fast<Item> itr(res_all_fields); + List<Item> extra_funcs; uint i, border= all_fields.elements - elements; DBUG_ENTER("setup_copy_fields"); @@ -11892,7 +11894,12 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param, */ if (!(pos=new Item_copy_string(pos))) goto err; - if (param->copy_funcs.push_back(pos)) + if (i < border) // HAVING, ORDER and GROUP BY + { + if (extra_funcs.push_back(pos)) + goto err; + } + else if (param->copy_funcs.push_back(pos)) goto err; } res_all_fields.push_back(pos); @@ -11904,6 +11911,12 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param, for (i= 0; i < border; i++) itr++; itr.sublist(res_selected_fields, elements); + /* + Put elements from HAVING, ORDER BY and GROUP BY last to ensure that any + reference used in these will resolve to a item that is already calculated + */ + param->copy_funcs.concat(&extra_funcs); + DBUG_RETURN(0); err: |