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

Reply via email to