Changeset: f2b70c7fb5d6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f2b70c7fb5d6
Modified Files:
        sql/server/rel_rel.h
        sql/server/rel_select.c
        sql/test/BugTracker-2026/Tests/7852-complex-not-in.test
        sql/test/BugTracker-2026/Tests/All
Branch: Dec2025
Log Message:

handle issue #7852 by returning proper error.


diffs (110 lines):

diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h
--- a/sql/server/rel_rel.h
+++ b/sql/server/rel_rel.h
@@ -24,18 +24,19 @@
 #define sql_aggr         (1 << 6)  //ORed
 #define sql_farg         (1 << 7)  //ORed
 #define sql_window       (1 << 8)  //ORed
-#define sql_join         (1 << 9)  //ORed
-#define sql_outer        (1 << 10) //ORed
-#define sql_group_totals (1 << 11) //ORed
-#define sql_update_set   (1 << 12) //ORed
-#define sql_psm          (1 << 13) //ORed
-#define sql_values       (1 << 14) //ORed
-#define psm_call         (1 << 15) //ORed
-#define sql_or           (1 << 16) //ORed
-#define sql_merge        (1 << 17) //ORed
-#define sql_no_subquery  (1 << 18) //ORed
-#define sql_qualify      (1 << 19) //ORed
-#define sql_check        (1 << 20) //ORed
+#define sql_window_rows  (1 << 9)  //ORed
+#define sql_join         (1 << 10)  //ORed
+#define sql_outer        (1 << 11) //ORed
+#define sql_group_totals (1 << 12) //ORed
+#define sql_update_set   (1 << 13) //ORed
+#define sql_psm          (1 << 14) //ORed
+#define sql_values       (1 << 15) //ORed
+#define psm_call         (1 << 16) //ORed
+#define sql_or           (1 << 17) //ORed
+#define sql_merge        (1 << 18) //ORed
+#define sql_no_subquery  (1 << 19) //ORed
+#define sql_qualify      (1 << 20) //ORed
+#define sql_check        (1 << 21) //ORed
 
 #define is_sql_from(X)         ((X & sql_from) == sql_from)
 #define is_sql_where(X)        ((X & sql_where) == sql_where)
@@ -46,6 +47,7 @@
 #define is_sql_aggr(X)         ((X & sql_aggr) == sql_aggr)
 #define is_sql_farg(X)         ((X & sql_farg) == sql_farg)
 #define is_sql_window(X)       ((X & sql_window) == sql_window)
+#define is_sql_window_rows(X)  ((X & sql_window_rows) == sql_window_rows)
 #define is_sql_join(X)         ((X & sql_join) == sql_join)
 #define is_sql_outer(X)        ((X & sql_outer) == sql_outer)
 #define is_sql_group_totals(X) ((X & sql_group_totals) == sql_group_totals)
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
@@ -3581,6 +3581,10 @@ _rel_aggr(sql_query *query, sql_rel **re
                        if (GDKtoupper(ta, &uaname, &(size_t){0}, aname) != 
GDK_SUCCEED)
                                uaname = aname;
                        return sql_error(sql, 02, SQLSTATE(42000) "%s: 
aggregate functions not allowed in WHERE clause", uaname);
+               } else if (is_sql_window_rows(f)) {
+                       if (GDKtoupper(ta, &uaname, &(size_t){0}, aname) != 
GDK_SUCCEED)
+                               uaname = aname;
+                       return sql_error(sql, 02, SQLSTATE(42000) "%s: 
aggregate functions not allowed in window ROWS", uaname);
                } else if (is_sql_update_set(f) || is_sql_psm(f)) {
                        if (GDKtoupper(ta, &uaname, &(size_t){0}, aname) != 
GDK_SUCCEED)
                                uaname = aname;
@@ -3670,6 +3674,10 @@ _rel_aggr(sql_query *query, sql_rel **re
                        if (GDKtoupper(ta, &uaname, &(size_t){0}, aname) != 
GDK_SUCCEED)
                                uaname = aname;
                        return sql_error(sql, 02, SQLSTATE(42000) "%s: 
aggregate functions not allowed in WHERE clause", uaname);
+               } else if (is_sql_window_rows(f)) {
+                       if (GDKtoupper(ta, &uaname, &(size_t){0}, aname) != 
GDK_SUCCEED)
+                               uaname = aname;
+                       return sql_error(sql, 02, SQLSTATE(42000) "%s: 
aggregate functions not allowed in window ROWS", uaname);
                } else if (!all_aggr && !list_empty(ungrouped_cols)) {
                        for (node *n = ungrouped_cols->h ; n ; n = n->next) {
                                sql_rel *outer;
@@ -3697,6 +3705,10 @@ _rel_aggr(sql_query *query, sql_rel **re
                                                if (GDKtoupper(ta, &uaname, 
&(size_t){0}, aname) != GDK_SUCCEED)
                                                        uaname = aname;
                                                return sql_error(sql, 02, 
SQLSTATE(42000) "%s: aggregate functions not allowed in WHERE clause", uaname);
+                                       } else if (!used_rel && 
is_sql_window_rows(of)) {
+                                               if (GDKtoupper(ta, &uaname, 
&(size_t){0}, aname) != GDK_SUCCEED)
+                                                       uaname = aname;
+                                               return sql_error(sql, 02, 
SQLSTATE(42000) "%s: aggregate functions not allowed in window ROWS", uaname);
                                        } else if (!is_sql_aggr(of)) {
                                                set_outer(outer);
                                        }
@@ -4842,6 +4854,7 @@ calculate_window_bound(sql_query *query,
        sql_subtype *bt, *bound_tp = sql_fetch_localtype(TYPE_lng), *iet = 
exp_subtype(ie);
        sql_exp *res = NULL;
 
+       f = f|sql_window_rows;
        if ((bound->token == SQL_PRECEDING || bound->token == SQL_FOLLOWING || 
bound->token == SQL_CURRENT_ROW) && bound->type == type_int) {
                atom *a = NULL;
                bt = (frame_type == FRAME_ROWS || frame_type == FRAME_GROUPS) ? 
bound_tp : iet;
diff --git a/sql/test/BugTracker-2026/Tests/7852-complex-not-in.test 
b/sql/test/BugTracker-2026/Tests/7852-complex-not-in.test
--- a/sql/test/BugTracker-2026/Tests/7852-complex-not-in.test
+++ b/sql/test/BugTracker-2026/Tests/7852-complex-not-in.test
@@ -30,6 +30,5 @@ statement error SELECT: subquery must re
 SELECT ( 1 , 0 , 3 ) != ( 1 , 2 , 3 ) 
 ----
 
-query I
+statement error COUNT: aggregate functions not allowed in window ROWS
 SELECT COUNT ( * ) OVER ( ROWS BETWEEN CASE WHEN 'foo' < 'foobar' THEN 1 ELSE 
- 13 * - ( 0 ) + 39 * - COUNT ( * ) * - COUNT ( * ) END PRECEDING AND CURRENT 
ROW ) = 0 AS x FROM ( SELECT 1 AS x UNION SELECT 0 AS x UNION SELECT 3 AS x ) 
WHERE 48 * 51 * - - 54 * - 77 * 46 NOT IN ( SELECT DISTINCT CASE WHEN NULL = 
NULL THEN NULL ELSE NULL END UNION SELECT 2 AS x UNION SELECT 3 AS x ) 
-----
diff --git a/sql/test/BugTracker-2026/Tests/All 
b/sql/test/BugTracker-2026/Tests/All
--- a/sql/test/BugTracker-2026/Tests/All
+++ b/sql/test/BugTracker-2026/Tests/All
@@ -53,7 +53,7 @@ KNOWNFAIL?7774-insert-into-renamed-table
 7849-assertion-failure
 7850-assertion-failure
 7851-assertion-failure
+7852-complex-not-in
 7853-in-rcte-generator
 7854-rcte-trims
 7855-ntile
-KNONWFAIL?7852-complex-not-in
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to