Changeset: 789fc2660ebf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=789fc2660ebf
Modified Files:
sql/server/rel_select.c
sql/test/SQLancer/Tests/sqlancer11.test
Branch: default
Log Message:
Having is a filter condition like where. Now I will test only on default
diffs (91 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
@@ -1957,7 +1957,7 @@ rel_in_value_exp(sql_query *query, sql_r
supertype(&super, exp_subtype(values), exp_subtype(le));
/* on selection/join cases we can generate cmp
expressions instead of anyequal for trivial cases */
- if (is_sql_where(f) && !is_sql_farg(f) &&
!exp_has_rel(le) && exps_are_atoms(vals)) {
+ if ((is_sql_where(f) || is_sql_having(f)) &&
!is_sql_farg(f) && !exp_has_rel(le) && exps_are_atoms(vals)) {
if (list_length(vals) == 1) { /* use cmp_equal
instead of cmp_in for 1 expression */
sql_exp *first = vals->h->data;
if (rel_convert_types(sql, rel ? *rel :
NULL, rel ? *rel : NULL, &le, &first, 1, type_equal_no_any) < 0)
@@ -2659,7 +2659,7 @@ rel_logical_exp(sql_query *query, sql_re
if (!rel)
return sq;
sq = rel_zero_or_one(sql, sq, ek);
- if (is_sql_where(f)) {
+ if (is_sql_where(f) || is_sql_having(f)) {
sql_exp *le = exp_rel(sql, sq);
sql_subtype bt;
diff --git a/sql/test/SQLancer/Tests/sqlancer11.test
b/sql/test/SQLancer/Tests/sqlancer11.test
--- a/sql/test/SQLancer/Tests/sqlancer11.test
+++ b/sql/test/SQLancer/Tests/sqlancer11.test
@@ -642,4 +642,66 @@ NULL
statement ok
ROLLBACK
+statement ok
+START TRANSACTION
+statement ok
+CREATE TABLE "t0" ("c0" BIGINT NOT NULL)
+
+statement ok
+INSERT INTO "t0" VALUES (4), (5), (6), (8), (1), (3)
+
+statement ok
+CREATE TABLE "t1" ("c0" BIGINT NOT NULL)
+
+statement ok
+INSERT INTO "t1" VALUES (1), (2), (3), (4), (5), (6), (7), (-28044611),
(2089944981)
+
+statement ok
+CREATE TABLE "t2" ("c0" UUID,"c2" DOUBLE PRECISION)
+
+statement ok
+INSERT INTO "t2" VALUES ('55c1fcb5-9a6d-bbd0-adad-63bd0bdceb6c', 1643235318),
(NULL, 1643235318), ('2adc9dae-4bee-e16b-009c-5597cf3129eb', 1643235318),
+('c235ee8f-3ade-64b3-df8e-0aa8b72e9ee8', 1643235318), (NULL, 1643235318),
(NULL, 1643235318), ('e991e02d-81e5-8e1b-f619-bb2c3d0ee13e', 1643235318),
('62f0ffc6-d452-5f88-fb8a-fd752b88db3e', 1643235318)
+
+query I rowsort
+SELECT count(*) FROM t1 GROUP BY t1.c0, least(COALESCE(7,
0.0021309160474272115237681646249257028102874755859375, t1.c0), 1024325040),
BLOB '', BLOB 'E0'
+----
+1
+1
+1
+1
+1
+1
+1
+1
+1
+
+query I rowsort
+SELECT count(*) FROM t1 GROUP BY t1.c0, least(COALESCE(7,
0.0021309160474272115237681646249257028102874755859375, t1.c0), 1024325040),
BLOB '', BLOB 'E0'
+HAVING ((SELECT DISTINCT least(FALSE, TRUE) FROM t1 AS l1t1, t0 AS l1t0, t2 AS
l1t2 WHERE TRUE) EXCEPT ALL (SELECT DISTINCT least(FALSE, FALSE) FROM t2 AS
l1t2, t1 AS l1t1, t0 AS l1t0 WHERE TRUE)) ORDER BY 0.656665542677417 ASC NULLS
FIRST
+----
+
+query I rowsort
+SELECT count(*) FROM t1 GROUP BY t1.c0, least(COALESCE(7,
0.0021309160474272115237681646249257028102874755859375, t1.c0), 1024325040),
BLOB '', BLOB 'E0'
+HAVING NOT (((SELECT DISTINCT least(FALSE, TRUE) FROM t1 AS l1t1, t0 AS l1t0,
t2 AS l1t2 WHERE TRUE) EXCEPT ALL (SELECT DISTINCT least(FALSE, FALSE) FROM t2
AS l1t2, t1 AS l1t1, t0 AS l1t0 WHERE TRUE))) ORDER BY 0.656665542677417 ASC
NULLS FIRST
+----
+
+query I rowsort
+SELECT count(*) FROM t1 GROUP BY t1.c0, least(COALESCE(7,
0.0021309160474272115237681646249257028102874755859375, t1.c0), 1024325040),
BLOB '', BLOB 'E0'
+HAVING (((SELECT DISTINCT least(FALSE, TRUE) FROM t1 AS l1t1, t0 AS l1t0, t2
AS l1t2 WHERE TRUE) EXCEPT ALL (SELECT DISTINCT least(FALSE, FALSE) FROM t2 AS
l1t2, t1 AS l1t1, t0 AS l1t0 WHERE TRUE))) IS NULL ORDER BY 0.656665542677417
ASC NULLS FIRST
+----
+1
+1
+1
+1
+1
+1
+1
+1
+1
+
+statement ok
+ROLLBACK
+
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list