Changeset: 7c3c412601b7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7c3c412601b7
Modified Files:
        sql/backends/monet5/sql_statement.c
        sql/server/rel_basetable.c
        sql/server/rel_dump.c
Branch: nested
Log Message:

Changes to fix unnest code


diffs (59 lines):

diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2628,9 +2628,11 @@ stmt_project(backend *be, stmt *op1, stm
        if (op2->nested) {
                list *ops = unnest_stmt(op2);
                list *nops = sa_list(be->mvc->sa);
+               sql_subtype *st = tail_type(op2);
+               bool propagate = !st->multiset && st->type->composite;
                for(node *n = ops->h; n; n = n->next) {
                        stmt *i = n->data;
-                       if (!i->nested)
+                       if (propagate || (st->multiset && n == ops->t))
                                i = stmt_project(be, op1, i);
                        append(nops, i);
                }
@@ -2638,7 +2640,7 @@ stmt_project(backend *be, stmt *op1, stm
                if (s == NULL)
                        return NULL;
                s->nested = true;
-               s->subtype = op2->subtype;
+               s->subtype = *st;
                return s;
        }
        InstrPtr q = stmt_project_join(be, op1, op2, false);
@@ -3325,7 +3327,7 @@ nested_dump_header(mvc *sql, MalBlkPtr m
                        lenPtr = pushInt(mb, lenPtr, t->digits);
                        scalePtr = pushInt(mb, scalePtr, t->scale);
                        if (virt || c->nested) {
-                               multisetPtr = pushInt(mb, multisetPtr, 
c->multiset + ((virt || c->nested)?4:0));
+                               multisetPtr = pushInt(mb, multisetPtr, 
c->subtype.multiset + ((virt || c->nested)?4:0));
                                InstrPtr q = newStmt(mb, batRef, newRef);
 
                                if (q == NULL)
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
@@ -701,7 +701,7 @@ rewrite_basetable(mvc *sql, sql_rel *rel
                                continue;
 
                        sql_column *c = cn->data;
-                       sql_exp *e = exp_alias(sql, atname, c->base.name, ta, 
c->base.name, &c->type, CARD_MULTI, c->null, is_column_unique(c), 0);
+                       sql_exp *e = exp_alias(sql, atname, c->base.name, ta, 
c->base.name, &c->type, CARD_MULTI, c->null, is_column_unique(c), 
c->column_type == 16);
 
                        if (e == NULL) {
                                rel_destroy(rel);
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -373,6 +373,9 @@ exp_print(mvc *sql, stream *fout, sql_ex
                mnstr_printf(fout, "\"%s\"", dump_escape_ident(sql->ta, 
exp_name(e)));
        }
 
+       if (mvc_debug_on(sql, 4) && is_intern(e))
+               mnstr_printf(fout, " INTERN ");
+
        if (e->comment) {
                str s = ATOMformat(TYPE_str, e->comment);
                mnstr_printf(fout,  " COMMENT %s ", s);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to