[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