Changeset: 62e1a865cdd1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/62e1a865cdd1
Added Files:
sql/test/BugTracker-2025/Tests/7763-exits-with-null.test
Modified Files:
sql/backends/monet5/sql_statement.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/test/BugTracker-2025/Tests/All
Branch: Mar2025
Log Message:
cleanup of null representation in relational part, ie allways use type void
diffs (84 lines):
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -315,8 +315,6 @@ stmt_bat_new(backend *be, sql_subtype *t
if (q == NULL)
return NULL;
- if (tt == TYPE_void)
- tt = TYPE_bte;
setVarType(be->mb, getArg(q, 0), newBatType(tt));
q = pushType(be->mb, q, tt);
if (estimate > 0)
@@ -1547,6 +1545,12 @@ stmt_atom(backend *be, atom *a)
goto bailout;
if (atom_null(a)) {
q = pushNil(mb, q, atom_type(a)->type->localtype);
+ /*
+ int localtype = TYPE_bte;
+ if (atom_type(a)->type->localtype != TYPE_void)
+ localtype = atom_type(a)->type->localtype;
+ q = pushNil(mb, q, localtype);
+ */
} else {
int k;
if ((k = constantAtom(be, mb, a)) == -1) {
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
@@ -3487,14 +3487,6 @@ static sql_exp *
char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
return sql_error(sql, 02, SQLSTATE(42000) "%s:
parameters not allowed as arguments to aggregate functions",
toUpperCopy(uaname, aname));
}
- if (!t->type->localtype) {
- if (e->type == e_atom && !e->f) {
- t = sql_bind_localtype("bte");
- e->tpe = *t;
- if (e->l)
- e->l = atom_set_type(sql->sa,
e->l, t);
- }
- }
all_aggr &= (exp_card(e) <= CARD_AGGR &&
!exp_is_atom(e) && is_aggr(e->type) && !is_func(e->type) && (!groupby ||
!is_groupby(groupby->op) || !groupby->r || !exps_find_exp(groupby->r, e)));
exp_only_freevar(query, e, &arguments_correlated,
&found_one_freevar, &ungrouped_cols);
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
@@ -2576,11 +2576,7 @@ rel_set_type(visitor *v, sql_rel *rel)
}
} else if (te->type == e_atom &&
!te->f) {
sql_subtype *t =
exp_subtype(te);
- if (t && !t->type->localtype) {
- te->tpe =
*sql_bind_localtype("bte");
- if (te->l)
- te->l =
atom_set_type(v->sql->sa, te->l, &te->tpe);
- } else if (!t && !te->l &&
!te->r) { /* parameter, set type, or return ERR?? */
+ if (!t && !te->l && !te->r) {
/* parameter, set type, or return ERR?? */
sql_arg *a =
sql_bind_paramnr(v->sql, te->flag);
if (!a->type.type)
return
sql_error(v->sql, 10, SQLSTATE(42000) "Could not determine type for argument
number %d", te->flag+1);
diff --git a/sql/test/BugTracker-2025/Tests/7763-exits-with-null.test
b/sql/test/BugTracker-2025/Tests/7763-exits-with-null.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7763-exits-with-null.test
@@ -0,0 +1,12 @@
+query I
+SELECT *
+FROM (SELECT NULL x FROM (SELECT 1)) y
+WHERE EXISTS (SELECT 1 FROM (SELECT 2) WHERE y.x is NULL);
+----
+NULL
+
+query I
+SELECT *
+FROM (SELECT NULL x FROM (SELECT 1)) y
+WHERE NOT EXISTS (SELECT 1 FROM (SELECT 2) WHERE y.x is NULL);
+----
diff --git a/sql/test/BugTracker-2025/Tests/All
b/sql/test/BugTracker-2025/Tests/All
--- a/sql/test/BugTracker-2025/Tests/All
+++ b/sql/test/BugTracker-2025/Tests/All
@@ -52,3 +52,4 @@ 7753-like-in-projection
7725-crash-find-rel-ref
7745-antijoin-bad-mal-gen
7759-replace-wrong-error
+7763-exits-with-null
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]