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