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

Reply via email to