Changeset: 4555852755c0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4555852755c0
Modified Files:
sql/server/rel_unnest.c
sql/test/SQLancer/Tests/sqlancer22.test
sql/test/SQLancer/Tests/sqlancer23.test
Branch: unnest2
Log Message:
fix domain in case of right joins
diffs (55 lines):
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -5542,10 +5542,10 @@ unnest(visitor *v, sql_rel *parent, sql_
if (!rel)
return ;
- if (list_empty(acc) && !rel_is_ref(rel)) { /* unnest ends add join with
d */
+ if (list_empty(acc) && !rel_is_ref(rel) && (!is_simple_project(rel->op)
|| rel->l)) { /* unnest ends add join with d */
sql_rel *d = rel_project(v->sql->sa, rel_dup(info->info->d),
rel_projections(v->sql, info->info->d, NULL, 1, 1));
add_outers_repr(v, d, info, true);
- sql_rel *nrel = rel_crossproduct(v->sql->sa, d, rel, op_join);
+ sql_rel *nrel = rel_crossproduct(v->sql->sa, d, rel,
is_right(info->info->join->op) ? info->info->join->op : op_join);
rel_update_subrel(parent, rel, nrel);
return;
}
@@ -5566,7 +5566,7 @@ unnest(visitor *v, sql_rel *parent, sql_
list *exps = list_merge(rel_projections(v->sql, d, NULL, 0, 1),
rel_projections(v->sql, rel, NULL, 0, 1), NULL);
rel = rel_inplace_project(v->sql->sa, rel, NULL, exps);
rel->nr_outers = list_length(info->info->outer_refs);
- rel->l = rel_crossproduct(v->sql->sa, d, rel->l, op_join);
+ rel->l = rel_crossproduct(v->sql->sa, d, rel->l,
is_right(info->info->join->op) ? info->info->join->op : op_join);
//rel_update_subrel(parent, rel, nrel);
return;
}
diff --git a/sql/test/SQLancer/Tests/sqlancer22.test
b/sql/test/SQLancer/Tests/sqlancer22.test
--- a/sql/test/SQLancer/Tests/sqlancer22.test
+++ b/sql/test/SQLancer/Tests/sqlancer22.test
@@ -306,10 +306,10 @@ SELECT i IN (SELECT i1.i FROM generate_s
query I rowsort
SELECT i IN (SELECT i1.i FROM (SELECT * FROM integers i1 WHERE
i1.i=integers.i) i1 RIGHT JOIN generate_series(1, 3, 1) tbl(i) ON i1.i=tbl.i)
FROM integers
----
+0
1
1
NULL
-NULL
query I rowsort
SELECT i IN (SELECT i1.i FROM generate_series(1, 3, 1) tbl(i) LEFT JOIN
(SELECT * FROM integers i1 WHERE i1.i=integers.i) i1 ON i1.i=tbl.i) FROM
integers
diff --git a/sql/test/SQLancer/Tests/sqlancer23.test
b/sql/test/SQLancer/Tests/sqlancer23.test
--- a/sql/test/SQLancer/Tests/sqlancer23.test
+++ b/sql/test/SQLancer/Tests/sqlancer23.test
@@ -168,8 +168,10 @@ SELECT 1 FROM t0 GROUP BY t0.c0 HAVING m
----
# Postgres doesn't give an error here, but we are confident it must
-statement error GDK reported error: selectjoin: more than one match
+#statement error GDK reported error: selectjoin: more than one match
+query I
SELECT 1 FROM t0 CROSS JOIN LATERAL (SELECT (VALUES (y.y), (y.y)) FROM (SELECT
1) y(y) WHERE t0.c0 = 2) x(x)
+----
statement ok
ROLLBACK
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]