Commit 56887241 authored by unknown's avatar unknown

Merge abelkin@work.mysql.com:/home/bk/mysql-4.1

into sanja.is.com.ua:/home/bell/mysql/mysql-4.1
parents d44e3511 224fcb20
...@@ -256,4 +256,12 @@ UNIQUE KEY `maxnumrep` (`maxnumrep`) ...@@ -256,4 +256,12 @@ UNIQUE KEY `maxnumrep` (`maxnumrep`)
INSERT INTO forumconthardwarefr7 (numeropost,maxnumrep) VALUES (1,0),(2,1); INSERT INTO forumconthardwarefr7 (numeropost,maxnumrep) VALUES (1,0),(2,1);
select numeropost as a FROM forumconthardwarefr7 GROUP BY (SELECT 1 FROM forumconthardwarefr7 HAVING a=1); select numeropost as a FROM forumconthardwarefr7 GROUP BY (SELECT 1 FROM forumconthardwarefr7 HAVING a=1);
Subselect returns more than 1 record Subselect returns more than 1 record
select numeropost as a FROM forumconthardwarefr7 ORDER BY (SELECT 1 FROM forumconthardwarefr7 HAVING a=1);
Subselect returns more than 1 record
drop table if exists forumconthardwarefr7; drop table if exists forumconthardwarefr7;
drop table if exists iftest;
CREATE TABLE iftest (field char(1) NOT NULL DEFAULT 'b');
INSERT INTO iftest VALUES ();
SELECT field FROM iftest WHERE 1=(SELECT 1 UNION ALL SELECT 1 FROM (SELECT 1) HAVING field='b');
Subselect returns more than 1 record
drop table iftest;
...@@ -152,4 +152,13 @@ CREATE TABLE `forumconthardwarefr7` ( ...@@ -152,4 +152,13 @@ CREATE TABLE `forumconthardwarefr7` (
INSERT INTO forumconthardwarefr7 (numeropost,maxnumrep) VALUES (1,0),(2,1); INSERT INTO forumconthardwarefr7 (numeropost,maxnumrep) VALUES (1,0),(2,1);
-- error 1240 -- error 1240
select numeropost as a FROM forumconthardwarefr7 GROUP BY (SELECT 1 FROM forumconthardwarefr7 HAVING a=1); select numeropost as a FROM forumconthardwarefr7 GROUP BY (SELECT 1 FROM forumconthardwarefr7 HAVING a=1);
drop table if exists forumconthardwarefr7; -- error 1240
\ No newline at end of file select numeropost as a FROM forumconthardwarefr7 ORDER BY (SELECT 1 FROM forumconthardwarefr7 HAVING a=1);
drop table if exists forumconthardwarefr7;
drop table if exists iftest;
CREATE TABLE iftest (field char(1) NOT NULL DEFAULT 'b');
INSERT INTO iftest VALUES ();
-- error 1240
SELECT field FROM iftest WHERE 1=(SELECT 1 UNION ALL SELECT 1 FROM (SELECT 1) HAVING field='b');
drop table iftest;
...@@ -873,7 +873,6 @@ bool select_singleval_subselect::send_data(List<Item> &items) ...@@ -873,7 +873,6 @@ bool select_singleval_subselect::send_data(List<Item> &items)
DBUG_ENTER("select_singleval_subselect::send_data"); DBUG_ENTER("select_singleval_subselect::send_data");
Item_singleval_subselect *it= (Item_singleval_subselect *)item; Item_singleval_subselect *it= (Item_singleval_subselect *)item;
if (it->assigned()){ if (it->assigned()){
thd->fatal_error= 1;
my_message(ER_SUBSELECT_NO_1_ROW, ER(ER_SUBSELECT_NO_1_ROW), MYF(0)); my_message(ER_SUBSELECT_NO_1_ROW, ER(ER_SUBSELECT_NO_1_ROW), MYF(0));
DBUG_RETURN(1); DBUG_RETURN(1);
} }
......
...@@ -336,7 +336,7 @@ class st_select_lex: public st_select_lex_node ...@@ -336,7 +336,7 @@ class st_select_lex: public st_select_lex_node
} }
st_select_lex* outer_select(); st_select_lex* outer_select();
st_select_lex* next_select() { return (st_select_lex*) next; } st_select_lex* next_select() { return (st_select_lex*) next; }
st_select_lex* next_select_in_list() st_select_lex* next_select_in_list()
{ {
return (st_select_lex*) link_next; return (st_select_lex*) link_next;
} }
......
...@@ -1297,7 +1297,7 @@ mysql_execute_command(THD *thd) ...@@ -1297,7 +1297,7 @@ mysql_execute_command(THD *thd)
that is not a SHOW command or a select that only access local that is not a SHOW command or a select that only access local
variables, but for now this is probably good enough. variables, but for now this is probably good enough.
*/ */
if (tables) if (tables || lex->select_lex.next_select_in_list())
mysql_reset_errors(thd); mysql_reset_errors(thd);
/* /*
Save old warning count to be able to send to client how many warnings we Save old warning count to be able to send to client how many warnings we
...@@ -1334,17 +1334,20 @@ mysql_execute_command(THD *thd) ...@@ -1334,17 +1334,20 @@ mysql_execute_command(THD *thd)
*/ */
if (lex->derived_tables) if (lex->derived_tables)
{ {
for (TABLE_LIST *cursor= tables; for (SELECT_LEX *sl= &lex->select_lex; sl; sl= sl->next_select_in_list())
cursor; if (sl->linkage != DERIVED_TABLE_TYPE)
cursor= cursor->next) for (TABLE_LIST *cursor= sl->get_table_list();
if (cursor->derived && (res=mysql_derived(thd, lex, cursor;
(SELECT_LEX_UNIT *)cursor->derived, cursor= cursor->next)
cursor))) if (cursor->derived && (res=mysql_derived(thd, lex,
{ (SELECT_LEX_UNIT *)
if (res < 0) cursor->derived,
send_error(thd,thd->killed ? ER_SERVER_SHUTDOWN : 0); cursor)))
DBUG_VOID_RETURN; {
} if (res < 0)
send_error(thd,thd->killed ? ER_SERVER_SHUTDOWN : 0);
DBUG_VOID_RETURN;
}
} }
if ((lex->select_lex.next_select_in_list() && if ((lex->select_lex.next_select_in_list() &&
lex->unit.create_total_list(thd, lex, &tables)) || lex->unit.create_total_list(thd, lex, &tables)) ||
......
...@@ -994,7 +994,8 @@ JOIN::exec() ...@@ -994,7 +994,8 @@ JOIN::exec()
} }
having=having_list; // Actually a parameter having=having_list; // Actually a parameter
thd->proc_info="Sending data"; thd->proc_info="Sending data";
error=do_select(this, &fields_list, NULL, procedure); error= thd->net.report_error ||
do_select(this, &fields_list, NULL, procedure);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -1078,7 +1079,7 @@ mysql_select(THD *thd, TABLE_LIST *tables, List<Item> &fields, COND *conds, ...@@ -1078,7 +1079,7 @@ mysql_select(THD *thd, TABLE_LIST *tables, List<Item> &fields, COND *conds,
goto err; goto err;
} }
if (free_join && join->global_optimize()) if (thd->net.report_error || (free_join && join->global_optimize()))
goto err; goto err;
join->exec(); join->exec();
......
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