mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
fixed bug of derived table in subselect
fixed bug in error handling mysql-test/r/subselect.result: test of error handling test of derived tables inside subselect mysql-test/t/subselect.test: test of error handling test of derived tables inside subselect sql/sql_class.cc: fixed error handling error sql/sql_lex.h: fifex layout sql/sql_parse.cc: fixed processing of derived tables sql/sql_select.cc: more quick abort on error
This commit is contained in:
parent
0c59356895
commit
6ed18d1c9f
6 changed files with 36 additions and 16 deletions
|
@ -256,4 +256,12 @@ UNIQUE KEY `maxnumrep` (`maxnumrep`)
|
|||
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);
|
||||
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 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` (
|
|||
INSERT INTO forumconthardwarefr7 (numeropost,maxnumrep) VALUES (1,0),(2,1);
|
||||
-- error 1240
|
||||
select numeropost as a FROM forumconthardwarefr7 GROUP BY (SELECT 1 FROM forumconthardwarefr7 HAVING a=1);
|
||||
drop table if exists forumconthardwarefr7;
|
||||
-- error 1240
|
||||
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)
|
|||
DBUG_ENTER("select_singleval_subselect::send_data");
|
||||
Item_singleval_subselect *it= (Item_singleval_subselect *)item;
|
||||
if (it->assigned()){
|
||||
thd->fatal_error= 1;
|
||||
my_message(ER_SUBSELECT_NO_1_ROW, ER(ER_SUBSELECT_NO_1_ROW), MYF(0));
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
|
|
@ -336,7 +336,7 @@ public:
|
|||
}
|
||||
st_select_lex* outer_select();
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -1334,17 +1334,20 @@ mysql_execute_command(THD *thd)
|
|||
*/
|
||||
if (lex->derived_tables)
|
||||
{
|
||||
for (TABLE_LIST *cursor= tables;
|
||||
cursor;
|
||||
cursor= cursor->next)
|
||||
if (cursor->derived && (res=mysql_derived(thd, lex,
|
||||
(SELECT_LEX_UNIT *)cursor->derived,
|
||||
cursor)))
|
||||
{
|
||||
if (res < 0)
|
||||
send_error(thd,thd->killed ? ER_SERVER_SHUTDOWN : 0);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
for (SELECT_LEX *sl= &lex->select_lex; sl; sl= sl->next_select_in_list())
|
||||
if (sl->linkage != DERIVED_TABLE_TYPE)
|
||||
for (TABLE_LIST *cursor= sl->get_table_list();
|
||||
cursor;
|
||||
cursor= cursor->next)
|
||||
if (cursor->derived && (res=mysql_derived(thd, lex,
|
||||
(SELECT_LEX_UNIT *)
|
||||
cursor->derived,
|
||||
cursor)))
|
||||
{
|
||||
if (res < 0)
|
||||
send_error(thd,thd->killed ? ER_SERVER_SHUTDOWN : 0);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
}
|
||||
if ((lex->select_lex.next_select_in_list() &&
|
||||
lex->unit.create_total_list(thd, lex, &tables)) ||
|
||||
|
|
|
@ -994,7 +994,8 @@ JOIN::exec()
|
|||
}
|
||||
having=having_list; // Actually a parameter
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1078,7 +1079,7 @@ mysql_select(THD *thd, TABLE_LIST *tables, List<Item> &fields, COND *conds,
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (free_join && join->global_optimize())
|
||||
if (thd->net.report_error || (free_join && join->global_optimize()))
|
||||
goto err;
|
||||
|
||||
join->exec();
|
||||
|
|
Loading…
Reference in a new issue