Commit b455f7c5 authored by unknown's avatar unknown

Manual merge, fix for bug #7672


mysql-test/r/select.result:
  Manual merge
mysql-test/t/select.test:
  Manual merge
sql/item.cc:
  Manual merge
sql/sql_lex.cc:
  Manual merge
sql/sql_lex.h:
  Manual merge
sql/sql_select.cc:
  Manual merge
parents ab7ec7ee f3f84ed8
...@@ -2617,3 +2617,13 @@ select found_rows(); ...@@ -2617,3 +2617,13 @@ select found_rows();
found_rows() found_rows()
1 1
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (a INT, b INT);
(SELECT a, b AS c FROM t1) ORDER BY c+1;
a c
(SELECT a, b AS c FROM t1) ORDER BY b+1;
a c
SELECT a, b AS c FROM t1 ORDER BY c+1;
a c
SELECT a, b AS c FROM t1 ORDER BY b+1;
a c
drop table t1;
...@@ -2052,6 +2052,7 @@ AND FK_firma_id = 2; ...@@ -2052,6 +2052,7 @@ AND FK_firma_id = 2;
drop table t1; drop table t1;
#
# #
# Test for Bug#8009, SELECT failed on bigint unsigned when using HEX # Test for Bug#8009, SELECT failed on bigint unsigned when using HEX
# #
...@@ -2165,3 +2166,11 @@ select found_rows(); ...@@ -2165,3 +2166,11 @@ select found_rows();
DROP TABLE t1; DROP TABLE t1;
# End of 4.1 tests # End of 4.1 tests
# Bug 7672 Unknown column error in order clause
#
CREATE TABLE t1 (a INT, b INT);
(SELECT a, b AS c FROM t1) ORDER BY c+1;
(SELECT a, b AS c FROM t1) ORDER BY b+1;
SELECT a, b AS c FROM t1 ORDER BY c+1;
SELECT a, b AS c FROM t1 ORDER BY b+1;
drop table t1;
...@@ -1760,6 +1760,16 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) ...@@ -1760,6 +1760,16 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
if ((tmp= find_field_in_tables(thd, this, tables, &where, 0)) == if ((tmp= find_field_in_tables(thd, this, tables, &where, 0)) ==
not_found_field) not_found_field)
{ {
if (thd->lex.select_lex.is_item_list_lookup)
{
Item** res= find_item_in_list(this, thd->lex.select_lex.item_list);
if (res && *res && (*res)->type() == Item::FIELD_ITEM)
{
set_field((*((Item_field**)res))->field);
return 0;
}
}
/* /*
We can't find table field in table list of current select, We can't find table field in table list of current select,
consequently we have to find it in outer subselect(s). consequently we have to find it in outer subselect(s).
......
...@@ -160,6 +160,7 @@ void lex_start(THD *thd, uchar *buf,uint length) ...@@ -160,6 +160,7 @@ void lex_start(THD *thd, uchar *buf,uint length)
lex->duplicates= DUP_ERROR; lex->duplicates= DUP_ERROR;
lex->ignore= 0; lex->ignore= 0;
lex->proc_list.first= 0; lex->proc_list.first= 0;
lex->select_lex.is_item_list_lookup= 0;
} }
void lex_end(LEX *lex) void lex_end(LEX *lex)
......
...@@ -426,6 +426,7 @@ class st_select_lex: public st_select_lex_node ...@@ -426,6 +426,7 @@ class st_select_lex: public st_select_lex_node
List<Item> item_list; /* list of fields & expressions */ List<Item> item_list; /* list of fields & expressions */
List<String> interval_list, use_index, *use_index_ptr, List<String> interval_list, use_index, *use_index_ptr,
ignore_index, *ignore_index_ptr; ignore_index, *ignore_index_ptr;
bool is_item_list_lookup;
/* /*
Usualy it is pointer to ftfunc_list_alloc, but in union used to create fake Usualy it is pointer to ftfunc_list_alloc, but in union used to create fake
select_lex for calling mysql_select under results of union select_lex for calling mysql_select under results of union
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment