[prev in list] [next in list] [prev in thread] [next in thread]
List: monetdb-checkins
Subject: MonetDB: Oct2020 - Fix for SQLancer bug, ie there may not be a l...
From: Pedro Ferreira <commits+pedro.ferreira=monetdbsolutions.com () monetdb ! org>
Date: 2020-12-30 10:09:10
Message-ID: hg.7b76e12986b2.1609322950.6315528441665844383 () monetdb-vm0 ! spin-off ! cwi ! nl
[Download RAW message or body]
Changeset: 7b76e12986b2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7b76e12986b2
Modified Files:
sql/backends/monet5/rel_bin.c
sql/test/SQLancer/Tests/sqlancer09.sql
sql/test/SQLancer/Tests/sqlancer09.stable.out
Branch: Oct2020
Log Message:
Fix for SQLancer bug, ie there may not be a left statement while generating code for \
a between expression
diffs (74 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
@@ -1268,8 +1268,8 @@ exp_bin(backend *be, sql_exp *e, stmt *l
} else {
if (r2) { /* handle all cases in stmt_uselect,
reducing, non reducing, scalar etc */
- if (l->nrcols == 0 && left && left->nrcols > 0)
- l = stmt_const(be, bin_first_column(be, left), l);
+ if (l->nrcols == 0 && (!left || (left && left->nrcols > 0)))
+ l = left ? stmt_const(be, bin_first_column(be, left), l) : column(be, l);
s = stmt_uselect2(be, l, r, r2, (comp_type)e->flag, sel, is_anti(e), reduce);
} else {
/* value compare or select */
diff --git a/sql/test/SQLancer/Tests/sqlancer09.sql \
b/sql/test/SQLancer/Tests/sqlancer09.sql
--- a/sql/test/SQLancer/Tests/sqlancer09.sql
+++ b/sql/test/SQLancer/Tests/sqlancer09.sql
@@ -90,6 +90,7 @@ WHEN TRUE THEN 1702709680 WHEN r'TRUE' T
WHEN (UUID 'baF49A5B-1862-19aa-E6F8-b3C5A7F4b1FF') BETWEEN SYMMETRIC (UUID \
'63A9aBBe-87b1-683a-2c68-eCd5cC7FE7E9') AND (UUID \
'82eb84EF-dF3D-a45e-f92b-E42BdfFEB1B9') THEN - (1129823324) END) WHEN MATCHED THEN \
DELETE;
+SELECT 1 FROM (SELECT 1 FROM v0) AS v0(v0) inner join t1 ON 1 BETWEEN 2 AND 1;
-- Disable rel_simplify_ifthenelse optimizer
SELECT 1 FROM (SELECT 1 FROM v0) AS v0(v0) inner join t1 ON 1 BETWEEN 2 AND (CASE \
WHEN 1 BETWEEN 2 AND 3 THEN 2 END); ROLLBACK;
diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.out \
b/sql/test/SQLancer/Tests/sqlancer09.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer09.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer09.stable.out
@@ -62,6 +62,45 @@ stdout of test 'sqlancer09` in directory
#when -2 then -5 end), (((1)>>(1)))), case when least(true, false) then \
greatest(timestamp '1970-01-15 21:14:28', timestamp '1970-01-02 15:11:23') end, [ \
0 ] #ROLLBACK;
+#START TRANSACTION;
+#CREATE TABLE "sys"."t0" ("c0" TIME NOT NULL, "c1" VARCHAR(143),
+# CONSTRAINT "t0_c0_pkey" PRIMARY KEY ("c0"), CONSTRAINT "t0_c0_unique" UNIQUE \
("c0"), CONSTRAINT "t0_c1_unique" UNIQUE ("c1")); +#COPY 7 RECORDS INTO "sys"."t0" \
FROM stdin USING DELIMITERS E'\t',E'\n','"'; +#21:19:08 ""
+#13:02:49 NULL
+#01:02:11 NULL
+#16:34:25 NULL
+#12:11:43 NULL
+#10:35:38 NULL
+#04:26:50 NULL
+[ 7 ]
+#CREATE TABLE "sys"."t1" ("c0" CHAR(375) NOT NULL, CONSTRAINT "t1_c0_pkey" PRIMARY \
KEY ("c0"), CONSTRAINT "t1_c0_fkey" FOREIGN KEY ("c0") REFERENCES "sys"."t0" ("c1")); \
+#ROLLBACK; +#START TRANSACTION;
+#CREATE TABLE "sys"."t1" ("c0" BIGINT);
+#COPY 4 RECORDS INTO "sys"."t1" FROM stdin USING DELIMITERS E'\t',E'\n','"';
+#1096730569
+#-655229050
+#1040813052
+#-1340211666
+[ 4 ]
+#create view v0(vc0, vc1, vc2) as (values (uuid \
'39FcCcEE-5033-0d81-42Eb-Ac6fFaA9EF2d', ((case when true then lower(r'e') \
end)ilike(cast(sql_sub(interval '1600798007' month, interval '854525416' month) as \
string(583)))), +#cast((greatest(time '12:29:42', time '00:13:46')) not between \
asymmetric (sql_min(time '01:00:00', time '08:31:00')) and (greatest(time '00:12:32', \
time '11:40:56')) as bigint))); +#MERGE INTO t1 USING (SELECT * FROM v0) AS v0 ON \
(((COALESCE(24656, 0.42848459531531180033425698638893663883209228515625, 1153747454, \
0.04253046482486677604128999519161880016326904296875, \
417897684))%(((-4.65033856E8)/(98))))) +#NOT BETWEEN SYMMETRIC (+ \
(NULLIF(-1338511329, 12))) AND (CASE WHEN CASE TIME '06:02:29' WHEN TIME '22:17:20' \
THEN TRUE ELSE TRUE END THEN "second"(INTERVAL '1243665924' DAY) WHEN (FALSE) = TRUE \
THEN CASE WHEN FALSE THEN -116446524 +#WHEN TRUE THEN 1702709680 WHEN r'TRUE' THEN \
1255285064 END +[ 4 ]
+#SELECT 1 FROM (SELECT 1 FROM v0) AS v0(v0) inner join t1 ON 1 BETWEEN 2 AND 1;
+% .%11 # table_name
+% %11 # name
+% tinyint # type
+% 1 # length
+#SELECT 1 FROM (SELECT 1 FROM v0) AS v0(v0) inner join t1 ON 1 BETWEEN 2 AND (CASE \
WHEN 1 BETWEEN 2 AND 3 THEN 2 END); +% .%12 # table_name
+% %12 # name
+% tinyint # type
+% 1 # length
+#ROLLBACK;
# 14:35:03 >
# 14:35:03 > "Done."
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic