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]