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]