Changeset: 2b40d5693440 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2b40d5693440
Modified Files:
sql/server/rel_select.c
sql/test/SQLancer/Tests/sqlancer11.stable.out
Branch: Oct2020
Log Message:
On the range case, if both ls and rs2 have atomic cardinality it's a select
case instead of join
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
@@ -1541,9 +1541,10 @@ rel_select_push_exp_down(mvc *sql, sql_r
{
if (!is_join(rel->op) && !is_select(rel->op))
return rel_select(sql->sa, rel, e);
- if (rs->card <= CARD_ATOM && (exp_is_atom(rs) || exp_has_freevar(sql,
rs) || exp_has_freevar(sql, ls)) &&
- (!rs2 || (rs2->card <= CARD_ATOM && (exp_is_atom(rs2) ||
exp_has_freevar(sql, rs2))))) {
- if ((ls->card == rs->card && (!rs2 || ls->card == rs2->card))
|| rel->processed) /* bin compare op */
+ if ((rs->card <= CARD_ATOM || (rs2 && ls->card <= CARD_ATOM)) &&
+ (exp_is_atom(rs) || (rs2 && exp_is_atom(ls)) ||
exp_has_freevar(sql, rs) || exp_has_freevar(sql, ls)) &&
+ (!rs2 || (rs2->card <= CARD_ATOM && (exp_is_atom(rs2) ||
exp_has_freevar(sql, rs2))))) {
+ if ((ls->card == rs->card && (!rs2 || ls->card == rs2->card ||
rs->card == rs2->card)) || rel->processed) /* bin compare op */
return rel_select(sql->sa, rel, e);
return push_select_exp(sql, rel, e, ls, L, f);
diff --git a/sql/test/SQLancer/Tests/sqlancer11.stable.out
b/sql/test/SQLancer/Tests/sqlancer11.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer11.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer11.stable.out
@@ -80,6 +80,33 @@ stdout of test 'sqlancer11` in directory
[ true ]
[ true ]
#ROLLBACK;
+#START TRANSACTION;
+#CREATE TABLE "t0" ("c0" REAL,"c1" BOOLEAN,"c3" DOUBLE PRECISION);
+#INSERT INTO "t0" VALUES (NULL, false, NULL);
+[ 1 ]
+#CREATE TABLE "t1" ("c0" REAL);
+#INSERT INTO "t1" VALUES
(2),(2),(2),(2),(2),(2),(2),(0.27167553),(0.67248166),(0.7818908),(-9.1086214e+08),(-0.9899925);
+[ 12 ]
+#CREATE TABLE "t2" ("c0" REAL,"c1" BOOLEAN);
+#INSERT INTO "t2" VALUES (-1.2357439e+08, false), (0.16160075, false), (NULL,
true);
+[ 3 ]
+#SELECT t0.c3 FROM t2, t0 WHERE FALSE BETWEEN t0.c3 = ANY(SELECT t0.c0 FROM t0
WHERE t0.c1) AND TRUE;
+% .t0 # table_name
+% c3 # name
+% double # type
+% 24 # length
+[ NULL ]
+[ NULL ]
+[ NULL ]
+#SELECT FALSE BETWEEN t0.c3 = ANY(SELECT t0.c0 FROM t0 WHERE t0.c1) AND TRUE
FROM t2, t0;
+% .%10 # table_name
+% %10 # name
+% boolean # type
+% 5 # length
+[ true ]
+[ true ]
+[ true ]
+#ROLLBACK;
# 13:59:46 >
# 13:59:46 > "Done."
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list