Changeset: d3a2c0438f99 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d3a2c0438f99
Added Files:
sql/test/BugTracker-2024/Tests/7524-right-outer-join.test
Modified Files:
sql/server/rel_select.c
sql/test/BugTracker-2024/Tests/All
Branch: default
Log Message:
fixed issue #7524
diffs (79 lines):
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
@@ -5556,7 +5556,7 @@ static sql_rel *
join_on_column_name(sql_query *query, sql_rel *rel, sql_rel *t1, sql_rel *t2,
int op, int l_nil, int r_nil)
{
mvc *sql = query->sql;
- int found = 0, full = (op != op_join);
+ int found = 0, full = (op == op_full), right = (op == op_right);
list *exps = rel_projections(sql, t1, NULL, 1, 0);
list *r_exps = rel_projections(sql, t2, NULL, 1, 0);
list *outexps = new_exp_list(sql->sa);
@@ -5580,18 +5580,22 @@ join_on_column_name(sql_query *query, sq
found = 1;
if (!(rel = rel_compare_exp(query, rel, le, re, "=",
TRUE, 0, 0, 0, 0)))
return NULL;
+ list_remove_data(r_exps, NULL, re);
if (full) {
sql_exp *cond = rel_unop_(sql, rel, le, "sys",
"isnull", card_value);
if (!cond)
return NULL;
set_has_no_nil(cond);
+ if (rel_convert_types(sql, NULL, NULL, &le,
&re, 1, type_equal_no_any) < 0)
+ return NULL;
if (!(le = rel_nop_(sql, rel, cond, re, le,
NULL, "sys", "ifthenelse", card_value)))
return NULL;
+ } else if (right) {
+ le = re;
}
exp_setname(sql->sa, le, rname, name);
set_not_unique(le);
append(outexps, le);
- list_remove_data(r_exps, NULL, re);
} else {
if (l_nil)
set_has_nil(le);
diff --git a/sql/test/BugTracker-2024/Tests/7524-right-outer-join.test
b/sql/test/BugTracker-2024/Tests/7524-right-outer-join.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/7524-right-outer-join.test
@@ -0,0 +1,30 @@
+
+statement ok
+CREATE TABLE t0(c0 INT)
+
+statement ok
+CREATE TABLE t1(c0 VARCHAR)
+
+query II
+SELECT * FROM t1 LEFT JOIN t0 ON t1.c0 = t0.c0
+----
+
+query II
+SELECT * FROM t1 RIGHT JOIN t0 ON t1.c0 = t0.c0
+----
+
+query II
+SELECT * FROM t1 FULL JOIN t0 ON t1.c0 = t0.c0
+----
+
+query I
+SELECT * FROM t1 NATURAL LEFT JOIN t0
+----
+
+query I
+SELECT * FROM t1 NATURAL RIGHT JOIN t0
+----
+
+query I
+SELECT * FROM t1 NATURAL FULL JOIN t0
+----
diff --git a/sql/test/BugTracker-2024/Tests/All
b/sql/test/BugTracker-2024/Tests/All
--- a/sql/test/BugTracker-2024/Tests/All
+++ b/sql/test/BugTracker-2024/Tests/All
@@ -59,3 +59,4 @@ 7511-password-hash-missing-error
7512-concurrent-globaltmp-instantiate-crash
7513-uri-authority-parse-issue
7514-wrong-window-function
+7524-right-outer-join
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]