Changeset: 39d4ebab7f05 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=39d4ebab7f05 Modified Files: sql/server/rel_select.c sql/test/SQLancer/Tests/sqlancer09.sql sql/test/SQLancer/Tests/sqlancer09.stable.err sql/test/SQLancer/Tests/sqlancer09.stable.out Branch: Oct2020 Log Message:
For case and coaleasce, ensure there is always a projection, so there won't be mismatches on the code generation diffs (61 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 @@ -3867,6 +3867,10 @@ rel_case_exp(sql_query *query, sql_rel * { dlist *l = se->data.lval; + /* Ensure there is always a projection */ + if (rel && !*rel) + *rel = rel_project(query->sql->sa, NULL, append(new_exp_list(query->sql->sa), exp_atom_bool(query->sql->sa, 1))); + if (se->token == SQL_COALESCE) { return rel_complex_case(query, rel, l, f, "coalesce"); } else if (se->token == SQL_NULLIF) { 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 @@ -94,3 +94,14 @@ SELECT 1 FROM (SELECT 1 FROM v0) AS v0(v -- 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; + +START TRANSACTION; +CREATE TABLE "sys"."t2" ("c0" BOOLEAN NOT NULL DEFAULT false, CONSTRAINT "t2_c0_pkey" PRIMARY KEY ("c0")); + +INSERT INTO t2(c0) VALUES((((((((least(r' ]', r'3''')) IS NULL)OR((((TIMESTAMP '1969-12-20 19:22:32') BETWEEN SYMMETRIC (TIMESTAMP '1969-12-29 05:03:02') AND (TIMESTAMP '1970-01-14 15:38:43'))OR +(CASE FALSE WHEN FALSE THEN TRUE WHEN TRUE THEN TRUE WHEN FALSE THEN FALSE WHEN FALSE THEN TRUE ELSE TRUE END)))))OR +(COALESCE((TIMESTAMP '1969-12-11 14:58:21') BETWEEN SYMMETRIC (TIMESTAMP '1970-01-09 21:56:14') AND (TIMESTAMP '1970-01-01 01:00:14'), +((0.26488915)>(1.345373227E9)), sql_min(FALSE, TRUE)))))AND("isauuid"(r'45456452')))), (TRUE); + +INSERT INTO t2 VALUES (COALESCE(1 BETWEEN 2 AND 3, 1)); +ROLLBACK; diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.err b/sql/test/SQLancer/Tests/sqlancer09.stable.err --- a/sql/test/SQLancer/Tests/sqlancer09.stable.err +++ b/sql/test/SQLancer/Tests/sqlancer09.stable.err @@ -5,6 +5,10 @@ stderr of test 'sqlancer09` in directory # 14:35:03 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-493376" "--port=30980" # 14:35:03 > +MAPI = (monetdb) /var/tmp/mtest-133412/.s.monetdb.36570 +QUERY = INSERT INTO t2 VALUES (COALESCE(1 BETWEEN 2 AND 3, 1)); +ERROR = !INSERT INTO: PRIMARY KEY constraint 't2.t2_c0_pkey' violated +CODE = 40002 # 14:35:03 > # 14:35:03 > "Done." 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 @@ -101,6 +101,11 @@ stdout of test 'sqlancer09` in directory % tinyint # type % 1 # length #ROLLBACK; +#START TRANSACTION; +#CREATE TABLE "sys"."t2" ("c0" BOOLEAN NOT NULL DEFAULT false, CONSTRAINT "t2_c0_pkey" PRIMARY KEY ("c0")); +#INSERT INTO t2(c0) VALUES((((((((least(r' ]', r'3''')) IS NULL)OR((((TIMESTAMP '1969-12-20 19:22:32') BETWEEN SYMMETRIC (TIMESTAMP '1969-12-29 05:03:02') AND (TIMESTAMP '1970-01-14 15:38:43'))OR(CASE FALSE WHEN FALSE THEN TRUE WHEN TRUE THEN TRUE WHEN FALSE THEN FALSE WHEN FALSE THEN TRUE ELSE TRUE END)))))OR(COALESCE((TIMESTAMP '1969-12-11 14:58:21') BETWEEN SYMMETRIC (TIMESTAMP '1970-01-09 21:56:14') AND (TIMESTAMP '1970-01-01 01:00:14'), ((0.26488915)>(1.345373227E9)), sql_min(FALSE, TRUE)))))AND("isauuid"(r'45456452')))), (TRUE); +[ 2 ] +#ROLLBACK; # 14:35:03 > # 14:35:03 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list