some bug fixes related to derived tables
This commit is contained in:
parent
9134db473d
commit
736e3c3c17
@ -17,6 +17,19 @@ select t1.a,t4.y from t1,(select t2.a as y from t2,(select t3.b from t3 where t3
|
|||||||
a y
|
a y
|
||||||
3 3
|
3 3
|
||||||
3 3
|
3 3
|
||||||
|
SELECT a FROM (SELECT 1 FROM (SELECT 1) HAVING a=1);
|
||||||
|
Unknown column 'a' in 'having clause'
|
||||||
|
SELECT a,b as a FROM (SELECT '1' as a,'2' as b) HAVING a=1;
|
||||||
|
Column: 'a' in having clause is ambiguous
|
||||||
|
SELECT a,2 as a FROM (SELECT '1' as a) HAVING a=2;
|
||||||
|
a a
|
||||||
|
1 2
|
||||||
|
SELECT a,2 as a FROM (SELECT '1' as a) HAVING a=1;
|
||||||
|
a a
|
||||||
|
SELECT 1 FROM (SELECT 1) WHERE a=2;
|
||||||
|
Unknown column 'a' in 'where clause'
|
||||||
|
SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1);
|
||||||
|
Unknown column 'a' in 'having clause'
|
||||||
drop table if exists t1.t2,t3;
|
drop table if exists t1.t2,t3;
|
||||||
select * from (select 1);
|
select * from (select 1);
|
||||||
1
|
1
|
||||||
|
@ -8,6 +8,16 @@ select t1.a,t3.a from t1,(select * from t2 where b='c') as t3 where t1.a = t3.
|
|||||||
CREATE TABLE t3 (a int not null, b char (10) not null);
|
CREATE TABLE t3 (a int not null, b char (10) not null);
|
||||||
insert into t3 values (3,'f'),(4,'y'),(5,'z'),(6,'c');
|
insert into t3 values (3,'f'),(4,'y'),(5,'z'),(6,'c');
|
||||||
select t1.a,t4.y from t1,(select t2.a as y from t2,(select t3.b from t3 where t3.a>3) as t5 where t2.b=t5.b) as t4 where t1.a = t4.y;
|
select t1.a,t4.y from t1,(select t2.a as y from t2,(select t3.b from t3 where t3.a>3) as t5 where t2.b=t5.b) as t4 where t1.a = t4.y;
|
||||||
|
--error 1054
|
||||||
|
SELECT a FROM (SELECT 1 FROM (SELECT 1) HAVING a=1);
|
||||||
|
--error 1052
|
||||||
|
SELECT a,b as a FROM (SELECT '1' as a,'2' as b) HAVING a=1;
|
||||||
|
SELECT a,2 as a FROM (SELECT '1' as a) HAVING a=2;
|
||||||
|
SELECT a,2 as a FROM (SELECT '1' as a) HAVING a=1;
|
||||||
|
--error 1054
|
||||||
|
SELECT 1 FROM (SELECT 1) WHERE a=2;
|
||||||
|
--error 1054
|
||||||
|
SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1);
|
||||||
drop table if exists t1.t2,t3;
|
drop table if exists t1.t2,t3;
|
||||||
select * from (select 1);
|
select * from (select 1);
|
||||||
select a from (select 1 as a);
|
select a from (select 1 as a);
|
||||||
|
@ -1748,7 +1748,9 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Field **ptr=table->field;
|
Field **ptr;
|
||||||
|
if (!(ptr=table->field))
|
||||||
|
return (Field *)0;
|
||||||
while ((field = *ptr++))
|
while ((field = *ptr++))
|
||||||
{
|
{
|
||||||
if (!my_strcasecmp(system_charset_info, field->field_name, name))
|
if (!my_strcasecmp(system_charset_info, field->field_name, name))
|
||||||
|
@ -1332,11 +1332,6 @@ mysql_execute_command(THD *thd)
|
|||||||
TODO: make derived tables processing 'inside' SELECT processing.
|
TODO: make derived tables processing 'inside' SELECT processing.
|
||||||
TODO: solve problem with depended derived tables in subselects
|
TODO: solve problem with depended derived tables in subselects
|
||||||
*/
|
*/
|
||||||
if ((lex->select_lex.next_select_in_list() &&
|
|
||||||
lex->unit.create_total_list(thd, lex, &tables)) ||
|
|
||||||
(table_rules_on && tables && thd->slave_thread &&
|
|
||||||
!tables_ok(thd,tables)))
|
|
||||||
DBUG_VOID_RETURN;
|
|
||||||
if (lex->derived_tables)
|
if (lex->derived_tables)
|
||||||
{
|
{
|
||||||
for (TABLE_LIST *cursor= tables;
|
for (TABLE_LIST *cursor= tables;
|
||||||
@ -1351,6 +1346,11 @@ mysql_execute_command(THD *thd)
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ((lex->select_lex.next_select_in_list() &&
|
||||||
|
lex->unit.create_total_list(thd, lex, &tables)) ||
|
||||||
|
(table_rules_on && tables && thd->slave_thread &&
|
||||||
|
!tables_ok(thd,tables)))
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
|
||||||
thread_safe_increment(com_stat[lex->sql_command],&LOCK_status);
|
thread_safe_increment(com_stat[lex->sql_command],&LOCK_status);
|
||||||
switch (lex->sql_command) {
|
switch (lex->sql_command) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user