Changeset: 4c40089a57c9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4c40089a57c9
Added Files:
        sql/test/SQLancer/Tests/sqlancer15.test
Modified Files:
        sql/server/rel_select.c
        sql/test/SQLancer/Tests/All
Branch: Jul2021
Log Message:

On aggregation cardinality generate single join over subquery


diffs (54 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
@@ -2444,7 +2444,7 @@ rel_logical_value_exp(sql_query *query, 
                        return NULL;
                if (ek.card <= card_set && is_project(sq->op) && 
list_length(sq->exps) > 1)
                        return sql_error(sql, 02, SQLSTATE(42000) "SELECT: 
subquery must return only one column");
-               if (ek.card < card_set && sq->card >= CARD_MULTI && 
(is_sql_sel(f) | is_sql_having(f) | ( is_sql_where(f) && rel && (!*rel || 
is_basetable((*rel)->op) || is_simple_project((*rel)->op) || 
is_joinop((*rel)->op)))))
+               if (ek.card < card_set && sq->card >= CARD_AGGR && 
(is_sql_sel(f) | is_sql_having(f) | ( is_sql_where(f) && rel && (!*rel || 
is_basetable((*rel)->op) || is_simple_project((*rel)->op) || 
is_joinop((*rel)->op)))))
                        sq = rel_zero_or_one(sql, sq, ek);
                return exp_rel(sql, sq);
        }
@@ -6064,7 +6064,7 @@ rel_subquery(sql_query *query, sql_rel *
        rel = rel_query(query, rel, sq, toplevel, ek);
        stack_pop_frame(sql);
 
-       if (rel && ek.type == type_relation && ek.card < card_set && rel->card 
>= CARD_MULTI)
+       if (rel && ek.type == type_relation && ek.card < card_set && rel->card 
>= CARD_AGGR)
                return rel_zero_or_one(sql, rel, ek);
        return rel;
 }
diff --git a/sql/test/SQLancer/Tests/All b/sql/test/SQLancer/Tests/All
--- a/sql/test/SQLancer/Tests/All
+++ b/sql/test/SQLancer/Tests/All
@@ -12,3 +12,4 @@ sqlancer11
 sqlancer12
 sqlancer13
 sqlancer14
+sqlancer15
diff --git a/sql/test/SQLancer/Tests/sqlancer15.test 
b/sql/test/SQLancer/Tests/sqlancer15.test
new file mode 100644
--- /dev/null
+++ b/sql/test/SQLancer/Tests/sqlancer15.test
@@ -0,0 +1,20 @@
+statement ok
+START TRANSACTION
+
+statement ok
+CREATE TABLE "t0" ("c4" INTEGER)
+
+statement ok rowcount 3
+INSERT INTO "t0" VALUES (-6), (6), (1)
+
+statement ok
+CREATE TABLE "t1" ("c4" DOUBLE PRECISION)
+
+statement ok rowcount 3
+INSERT INTO "t1" VALUES (-0.1), (0.3), (0.9)
+
+statement error GDK reported error: BATsubcross: more than one match
+INSERT INTO t0(c4) VALUES(1), ("epoch_ms"(((SELECT TIME '01:00:00' FROM t0 
GROUP BY t0.c4) EXCEPT ALL (SELECT DISTINCT TIME '01:00:00' FROM t1))))
+
+statement ok
+ROLLBACK
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to