Changeset: 924377be0ef8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/924377be0ef8
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/include/sql_relation.h
        sql/server/rel_basetable.c
        sql/server/rel_exp.c
Branch: nested
Log Message:

protect against virtual cols


diffs (71 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4926,11 +4926,11 @@ rel2bin_project(backend *be, sql_rel *re
                return NULL;
        for (en = rel->exps->h; en; en = en->next) {
                sql_exp *exp = en->data;
-               /* we need to ouput composite properly, for insert statements
-               sql_subtype *st = exp_subtype(exp);
-               if (rel->l && st && st->type->composite)
+
+               if (exp->virt) {
+                       /* we need to ouput composite properly, for insert 
statements */
                        continue;
-                       */
+               }
                int oldvtop = be->mb->vtop, oldstop = be->mb->stop;
                stmt *s = exp_bin(be, exp, sub, NULL /*psub*/, NULL, NULL, 
NULL, NULL, 0, 0, 0);
 
diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -33,7 +33,6 @@ typedef struct sql_alias {
        int label;
        struct sql_alias *parent;
        const char *name;
-       //const char *rname;
 } sql_alias;
 
 typedef struct sql_var_name {
@@ -70,6 +69,7 @@ typedef struct expression {
         row:1,         /* e_atom ->f is a list of values or a list of 
attributes aka a row/tuple */
 
         base:1,
+        virt:1,
         ref:1,         /* used to indicate an other expression may reference 
this one */
         used:1,        /* used for quick dead code removal */
         symmetric:1; /* compare between symmetric */
diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c
--- a/sql/server/rel_basetable.c
+++ b/sql/server/rel_basetable.c
@@ -383,6 +383,8 @@ bind_col_exp(mvc *sql, rel_base_t *ba, s
                e->nid = -(ba->basenr + c->colnr);
                e->alias.label = e->nid;
        }
+       if (c->type.type->composite && !c->type.multiset)
+               e->virt = 1;
        if (c->t->pkey && ((sql_kc*)c->t->pkey->k.columns->h->data)->c == c) {
                p = e->p = prop_create(sql->sa, PROP_HASHCOL, e->p);
                p->value.pval = c->t->pkey;
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -761,6 +761,8 @@ exp_propagate(allocator *sa, sql_exp *ne
                set_unique(ne);
        if (is_basecol(oe))
                set_basecol(ne);
+       if (oe->virt)
+               ne->virt = 1;
        ne->p = prop_copy(sa, oe->p);
        return ne;
 }
@@ -790,6 +792,8 @@ exp_ref_by_label(allocator *sa, sql_exp 
                set_unique(e);
        if (is_intern(o))
                set_intern(e);
+       if (o->virt)
+               e->virt = 1;
        return exp_propagate(sa, e, o);
 }
 
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to