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]

Reply via email to