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

Reply via email to