summaryrefslogtreecommitdiff
path: root/sql/sql_union.cc
diff options
context:
space:
mode:
authorunknown <Sinisa@sinisa.nasamreza.org>2001-10-25 14:41:49 +0300
committerunknown <Sinisa@sinisa.nasamreza.org>2001-10-25 14:41:49 +0300
commit1c908336061adcc88705c0e8f99ac849bb31b1d6 (patch)
tree8fa4e9dfeef51e31e2d6a03e2ba79a26d832f7c5 /sql/sql_union.cc
parentf9b331ff8a647dbb689061ec1cc0a03d73b53446 (diff)
downloadmariadb-git-1c908336061adcc88705c0e8f99ac849bb31b1d6.tar.gz
New alternate UNION syntax and bug fix for multi-table deletes
mysql-test/r/union.result: New results for optional UNION syntax mysql-test/t/union.test: New test for alternate syntax for UNION sql/sql_delete.cc: Fixed bug in multi-table delete's with transactional tables sql/sql_parse.cc: A small change to enable new UNION syntax sql/sql_union.cc: New alternate UNION syntax sql/sql_yacc.yy: New alternate UNION syntax
Diffstat (limited to 'sql/sql_union.cc')
-rw-r--r--sql/sql_union.cc11
1 files changed, 6 insertions, 5 deletions
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 0d8a6dc4ed1..a6ea88d9adc 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -27,7 +27,7 @@
int mysql_union(THD *thd, LEX *lex,select_result *result)
{
- SELECT_LEX *sl, *last_sl, lex_sl;
+ SELECT_LEX *sl, *last_sl=(SELECT_LEX *)NULL, lex_sl;
ORDER *order;
List<Item> item_list;
TABLE *table;
@@ -38,7 +38,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
DBUG_ENTER("mysql_union");
/* Fix tables 'to-be-unioned-from' list to point at opened tables */
- for (sl=&lex->select_lex; sl && sl->linkage != NOT_A_SELECT; sl=sl->next)
+ for (sl=&lex->select_lex; sl && sl->linkage != NOT_A_SELECT; last_sl=sl, sl=sl->next)
{
for (TABLE_LIST *cursor= (TABLE_LIST *)sl->table_list.first;
cursor;
@@ -50,6 +50,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
{
lex_sl=*sl;
sl=(SELECT_LEX *)NULL;
+ if (last_sl) last_sl->next=sl;
}
else
lex_sl.linkage=UNSPECIFIED_TYPE;
@@ -68,7 +69,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
sl->item_list,
sl->where,
sl->ftfunc_list,
- (sl->braces) ? (ORDER*) 0 : (ORDER *) sl->order_list.first,
+ (sl->braces) ? (ORDER *) sl->order_list.first : (ORDER *) 0,
(ORDER*) sl->group_list.first,
sl->having,
(ORDER*) NULL,
@@ -79,7 +80,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
DBUG_RETURN(0);
}
- order = (lex_sl.linkage == UNSPECIFIED_TYPE) ? (ORDER *) last_sl->order_list.first : (ORDER *) lex_sl.order_list.first;
+ order = (lex_sl.linkage == UNSPECIFIED_TYPE) ? ( (last_sl->braces) ? (ORDER *) 0 : (ORDER *) last_sl->order_list.first) : (ORDER *) lex_sl.order_list.first;
{
Item *item;
@@ -127,7 +128,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
sl->item_list,
sl->where,
sl->ftfunc_list,
- (sl->braces) ? (ORDER*) 0 : (ORDER *)sl->order_list.first,
+ (sl->braces) ? (ORDER *)sl->order_list.first : (ORDER *) 0,
(ORDER*) sl->group_list.first,
sl->having,
(ORDER*) NULL,