Update of /cvsroot/monetdb/sql/src/server
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv1170/src/server
Modified Files:
rel_bin.mx
Log Message:
be more safe with unions and outer joins (ie copy also the first part
of the unions and joins, before any append)
U rel_bin.mx
Index: rel_bin.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_bin.mx,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- rel_bin.mx 29 Dec 2008 21:30:08 -0000 1.67
+++ rel_bin.mx 30 Dec 2008 19:19:06 -0000 1.68
@@ -114,6 +114,14 @@
return val;
}
+static stmt *Column( stmt *val )
+{
+ val = stmt_dup(val);
+ if (val->nrcols == 0)
+ val = const_column(val);
+ return stmt_append(stmt_temp(tail_type(val)), val);
+}
+
static stmt *
bin_first_column( stmt *sub )
{
@@ -722,6 +730,9 @@
char *nme = column_name(c);
stmt *s = stmt_join(stmt_dup(jl), column(c), cmp_equal);
+ /* as append isn't save, we append to a new copy */
+ if (rel->op == op_left || rel->op == op_full || rel->op ==
op_right)
+ s = Column(s);
if (rel->op == op_left || rel->op == op_full)
s = stmt_append(s, stmt_join(stmt_dup(ld), stmt_dup(c),
cmp_equal));
if (rel->op == op_right || rel->op == op_full)
@@ -739,6 +750,9 @@
char *nme = column_name(c);
stmt *s = stmt_join(stmt_dup(jr), column(c), cmp_equal);
+ /* as append isn't save, we append to a new copy */
+ if (rel->op == op_left || rel->op == op_full || rel->op ==
op_right)
+ s = Column(s);
if (rel->op == op_left || rel->op == op_full)
s = stmt_append(s, stmt_const(stmt_dup(ld),
stmt_atom(atom_general(tail_type(c), NULL, 0))));
if (rel->op == op_right || rel->op == op_full)
@@ -915,7 +929,7 @@
n = n->next, m = m->next ) {
stmt *c1 = n->data;
stmt *c2 = stmt_dup(m->data);
- char *rnme = NULL;
+ char *rnme = table_name(c1);
char *nme = column_name(c1);
stmt *s;
@@ -924,8 +938,7 @@
so we create append on copies.
*/
- s = stmt_append(column(c1), c2);
- rnme = table_name(c1);
+ s = stmt_append(Column(c1), c2);
nme = _strdup(nme);
rnme = (rnme)?_strdup(rnme):NULL;
s = stmt_alias(s, rnme, nme);
------------------------------------------------------------------------------
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins