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