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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list