Changeset: 1f8247547dff for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1f8247547dff
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/test/SQLancer/Tests/sqlancer01.sql
        sql/test/SQLancer/Tests/sqlancer01.stable.out
Branch: Jun2020
Log Message:

Small fix, test for cardinality of expression, rather if the expression is an 
atom for more precise detection of select expressions inside joins


diffs (66 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2228,11 +2228,11 @@ rel2bin_join(backend *be, sql_rel *rel, 
                                        } else if (flag < cmp_filter && e->f) { 
/* range */
                                                int nrcr1 = 0, nrcr2 = 0, nrcl1 
= 0, nrcl2 = 0;
                                                if ((rel_find_exp(rel->l, e->l) 
&& !rel_find_exp(rel->r, e->l) &&
-                                                  ((rel_find_exp(rel->r, e->r) 
&& !rel_find_exp(rel->l, e->r)) || (nrcr1 = exp_is_atom(e->r))) &&
-                                                  ((rel_find_exp(rel->r, e->f) 
&& !rel_find_exp(rel->l, e->f)) || (nrcr2 = exp_is_atom(e->f))) && 
(nrcr1+nrcr2) <= 1) ||
+                                                  ((rel_find_exp(rel->r, e->r) 
&& !rel_find_exp(rel->l, e->r)) || (nrcr1 = ((sql_exp*)e->r)->card == 
CARD_ATOM)) &&
+                                                  ((rel_find_exp(rel->r, e->f) 
&& !rel_find_exp(rel->l, e->f)) || (nrcr2 = ((sql_exp*)e->f)->card == 
CARD_ATOM)) && (nrcr1+nrcr2) <= 1) ||
                                                    (rel_find_exp(rel->r, e->l) 
&& !rel_find_exp(rel->l, e->l) &&
-                                                  ((rel_find_exp(rel->l, e->r) 
&& !rel_find_exp(rel->r, e->r)) || (nrcl1 = exp_is_atom(e->r))) &&
-                                                  ((rel_find_exp(rel->l, e->f) 
&& !rel_find_exp(rel->r, e->f)) || (nrcl2 = exp_is_atom(e->f))) && 
(nrcl1+nrcl2) <= 1)) {
+                                                  ((rel_find_exp(rel->l, e->r) 
&& !rel_find_exp(rel->r, e->r)) || (nrcl1 = ((sql_exp*)e->r)->card == 
CARD_ATOM)) &&
+                                                  ((rel_find_exp(rel->l, e->f) 
&& !rel_find_exp(rel->r, e->f)) || (nrcl2 = ((sql_exp*)e->f)->card == 
CARD_ATOM)) && (nrcl1+nrcl2) <= 1)) {
                                                        append(jexps, e);
                                                        continue;
                                                }
@@ -2246,14 +2246,14 @@ rel2bin_join(backend *be, sql_rel *rel, 
 
                                                        fll &= 
rel_find_exp(rel->l, ee) != NULL;
                                                        frl &= 
rel_find_exp(rel->r, ee) != NULL;
-                                                       nrcl += exp_is_atom(ee);
+                                                       nrcl += ee->card == 
CARD_ATOM;
                                                }
                                                for (node *n = r->h ; n ; n = 
n->next) {
                                                        sql_exp *ee = n->data;
 
                                                        flr &= 
rel_find_exp(rel->l, ee) != NULL;
                                                        frr &= 
rel_find_exp(rel->r, ee) != NULL;
-                                                       nrcr += exp_is_atom(ee);
+                                                       nrcr += ee->card == 
CARD_ATOM;
                                                }
                                                if (!((fll && flr) || (frl && 
frr)) && 
                                                      nrcl < list_length(l) && 
nrcr < list_length(r)) {
diff --git a/sql/test/SQLancer/Tests/sqlancer01.sql 
b/sql/test/SQLancer/Tests/sqlancer01.sql
--- a/sql/test/SQLancer/Tests/sqlancer01.sql
+++ b/sql/test/SQLancer/Tests/sqlancer01.sql
@@ -297,6 +297,7 @@ ROLLBACK;
 START TRANSACTION; -- Bug 6906
 CREATE TABLE t0("c0" DOUBLE PRECISION, "c1" VARCHAR(496));
 create view v0(c0, c1) as (select all t0.c0, r'epfNW⟚榢tptPbC{5{ZW}6,R' from 
t0) with check option;
+select 1 from v0 full outer join t0 on (cast(('a') in ('a') as string) ilike 
v0.c0);
 select sum(all + (cast(t0.c0 as int))) from v0 full outer join t0 on 
((cast((cast(v0.c1 as boolean)) not in (true, ((t0.c0)=(t0.c0)), 
cast(1745166981 as boolean)) as string))ilike(v0.c0));
 ROLLBACK;
 
diff --git a/sql/test/SQLancer/Tests/sqlancer01.stable.out 
b/sql/test/SQLancer/Tests/sqlancer01.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer01.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer01.stable.out
@@ -580,6 +580,15 @@ stdout of test 'sqlancer01` in directory
 [ 1783007739   ]
 [ 498706403    ]
 #ROLLBACK;
+#START TRANSACTION; -- Bug 6906
+#CREATE TABLE t0("c0" DOUBLE PRECISION, "c1" VARCHAR(496));
+#create view v0(c0, c1) as (select all t0.c0, r'epfNW⟚榢tptPbC{5{ZW}6,R' from 
t0) with check option;
+#select 1 from v0 full outer join t0 on (cast(('a') in ('a') as string) ilike 
v0.c0);
+% .%11 # table_name
+% %11 # name
+% tinyint # type
+% 1 # length
+#ROLLBACK;
 #DROP TABLE tbl_ProductSales;
 #DROP TABLE another_T;
 #DROP TABLE integers;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to