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 -- [email protected]
To unsubscribe send an email to [email protected]