Changeset: ba2b6178ae8d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ba2b6178ae8d
Modified Files:
sql/server/rel_select.c
Branch: default
Log Message:
fix for problem with in without subquery (new output of bug 6605)
diffs (36 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
@@ -2691,6 +2691,7 @@ rel_in_exp(sql_query *query, sql_rel *re
r = rel_value_exp(query, &z, n->data.sym, f /* ie no
result project */, ek);
if (!r) {
+ sql_rel *oleft = left;
/* reset error */
sql->session->status = 0;
sql->errstr[0] = 0;
@@ -2698,6 +2699,8 @@ rel_in_exp(sql_query *query, sql_rel *re
r = rel_value_exp(query, &left, n->data.sym, f
/* ie no result project */, ek);
if (r)
l_used = is_join(left->op);
+ if (oleft != left)
+ l_outer = 1;
}
if (!r) {
/* reset error */
@@ -2758,12 +2761,13 @@ rel_in_exp(sql_query *query, sql_rel *re
}
if (rel_convert_types(sql, &l, &r, 1,
type_equal_no_any) < 0)
return NULL;
- r = exp_compare(sql->sa, l, r,
sc->token==SQL_IN?mark_in:mark_notin);
+ r = exp_compare(sql->sa, l, r,
(z||l_outer)?(sc->token==SQL_IN?mark_in:mark_notin):
+
(sc->token==SQL_IN?cmp_equal:cmp_notequal));
if (z) {
left =
rel_crossproduct(sql->sa, left, z, sc->token==SQL_IN?op_semi:op_anti);
if (rel_has_freevar(z))
set_dependent(left);
- } else {
+ } else if (l_outer) {
left->op =
sc->token==SQL_IN?op_semi:op_anti;
}
rel_join_add_exp(sql->sa, left, r);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list