Changeset: 82d20959d06f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/82d20959d06f
Modified Files:
        sql/server/rel_exp.c
        sql/server/rel_rel.c
        sql/server/rel_select.c
        sql/test/nested/Tests/array.test
Branch: nested
Log Message:

fixes some of the array test cases


diffs (119 lines):

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
@@ -411,7 +411,8 @@ nested_exps(mvc *sql, sql_subtype *t, sq
                                append(nested, e);
                        }
                } else {
-                       sql_exp *e = exp_alias(sql, atname, MSEL_NAME, atname, 
MSEL_NAME, t, CARD_MULTI, true, false, 1);
+                       sql_exp *e = exp_alias(sql, atname, MSEL_NAME, atname, 
MSEL_NAME, t,
+                                       CARD_MULTI, true, false, 1);
                        append(nested, e);
                }
        }
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -1269,7 +1269,7 @@ _rel_projections(mvc *sql, sql_rel *rel,
                        rexps = _rel_projections(sql, rel->r, tname, settname, 
intern, basecol);
                exps_reset_props(rexps, is_left(rel->op) || is_full(rel->op));
                if (rexps)
-                       lexps = list_merge(lexps, rexps, (fdup)NULL);
+                       lexps = list_join(lexps, rexps);
                if (rel->attr)
                        append(lexps, exp_ref(sql, rel->attr->h->data));
                return lexps;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -812,9 +812,11 @@ rel_unnest_func(sql_query *query, list *
                                        sql_exp *e = n->data;
                                        sql_exp *ne = exp_ref(query->sql, e);
                                        sql_subtype *tt = exp_subtype(ne);
-
-                                       if (first)
+                                       if (first) {
+                                               reset_intern(ne);
+                                               set_basecol(ne);
                                                tt->multiset = MS_VALUE;
+                                       }
                                        exp_setname(query->sql, ne, ta, 
exp_name(e));
                                        append(nexps, ne);
                                        first = false;
@@ -1081,6 +1083,8 @@ rel_named_table_function(sql_query *quer
                tname = NULL;
                if (ast->data.lval->t->type == type_symbol && 
ast->data.lval->t->data.sym)
                        tname = 
ast->data.lval->t->data.sym->data.lval->h->data.sval;
+               else
+                       tname = make_label(sql->sa, ++sql->label);
                rel = rel_unnest_func(query, exps, tname);
                if (!rel)
                        return NULL;
@@ -1377,6 +1381,8 @@ values_list(sql_query *query, symbol *ta
        list *exps = sa_list(sql->sa);
        exp_kind ek = {type_value, card_value, TRUE};
 
+       bool check_multiset = false;
+
        for (dnode *o = rowlist->h; o; o = o->next) {
                dlist *values = o->data.lval;
 
@@ -1397,7 +1403,10 @@ values_list(sql_query *query, symbol *ta
                                sql_exp *vals = m->data;
                                list *vals_list = vals->f;
                                sql_rel *r = NULL;
-                               sql_exp *e = rel_value_exp(query, &r, 
n->data.sym, sql_sel | sql_values, ek);
+                               symbol *s = n->data.sym;
+                               sql_exp *e = rel_value_exp(query, &r, s, 
sql_sel | sql_values, ek);
+                               if (s->token == SQL_SET && e && e->f)
+                                       check_multiset = true;
                                if (!e)
                                        return NULL;
                                if (r) {
@@ -1416,6 +1425,9 @@ values_list(sql_query *query, symbol *ta
                if (!(e = exp_values_set_supertype(sql, e, NULL)))
                        return NULL;
                e->card = card;
+               if (check_multiset)
+                       if ((e = exp_check_multiset(query->sql, e)) == NULL)
+                               return NULL;
                m->data = e;
        }
        return exps;
diff --git a/sql/test/nested/Tests/array.test b/sql/test/nested/Tests/array.test
--- a/sql/test/nested/Tests/array.test
+++ b/sql/test/nested/Tests/array.test
@@ -33,13 +33,13 @@ select u.elements from (select array[10,
 10
 11
 
-query III nosort 
+query I nosort 
 select u.* from (select array[10, 11] a) sq, unnest(sq.a) u
 ----
 10
 11
 
-query TIII nosort unnest_all
+query TI nosort unnest_all
 select * from (select array[10, 11] a) sq, unnest(sq.a) u
 ----
 {10,11}
@@ -47,7 +47,7 @@ select * from (select array[10, 11] a) s
 {10,11}
 11
 
-query TIII nosort unnest_all
+query TI nosort unnest_all
 select sq.*, u.* from (select array[10, 11] a) sq, unnest(sq.a) u
 ----
 {10,11}
@@ -194,7 +194,7 @@ select elements from amb, unnest(element
 {20,21}
 {20,21}
 
-query T nosort 
+query TI nosort 
 select elements, u.elements from amb, unnest(elements) u
 ----
 {10,11}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to