Changeset: 48b9f94f43ec for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/48b9f94f43ec Branch: sqlfuncfix Log Message:
Merged with default diffs (135 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -3121,7 +3121,8 @@ rewrite_exists(visitor *v, sql_rel *rel, } sq = exp_rel_get_rel(v->sql->sa, ie); /* get subquery */ - + if (is_set(sq->op) && list_length(sq->exps) > 1) /* number of expressions in set relations must match the children */ + sq = rel_project(v->sql->sa, sq, rel_projections(v->sql, sq, NULL, 1, 1)); le = rel_reduce2one_exp(v->sql, sq); le = exp_ref(v->sql, le); if (is_project(rel->op) && is_freevar(le)) { diff --git a/sql/test/SQLancer/Tests/sqlancer18.test b/sql/test/SQLancer/Tests/sqlancer18.test --- a/sql/test/SQLancer/Tests/sqlancer18.test +++ b/sql/test/SQLancer/Tests/sqlancer18.test @@ -547,3 +547,8 @@ DROP TABLE t0 statement ok DROP TABLE t1 +query T nosort +select (case when false then v100.vc1 when true then (values (2)) end) in (3) from (values (1),(2)) v100(vc1) +---- +False +False diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py b/sql/test/SQLancer/Tests/sqlancer19.SQL.py --- a/sql/test/SQLancer/Tests/sqlancer19.SQL.py +++ b/sql/test/SQLancer/Tests/sqlancer19.SQL.py @@ -315,6 +315,14 @@ with SQLTestCase() as cli: .assertSucceeded().assertDataResultMatch([(None,),(-7,),(-1,),(0,),(0,),(0,),(0,),(0,),(1,),(3,),(3,),(4,),(4,),(4,),(5,),(5,),(5,),(5,),(6,),(6,),(7,),(7,),(8,),(9,),(9,)]) cli.execute("SELECT CAST(SUM(count) AS BIGINT) FROM (SELECT CAST((((('5' LIKE '0.53')OR((VALUES (0 < ANY(VALUES (7), (0)))))))OR(4 NOT BETWEEN -rt7.c0 AND rt7.c0)) AS INT) as count FROM rt7) as res;") \ .assertSucceeded().assertDataResultMatch([(25,)]) + cli.execute("create view v8(vc0) as (select -24.6 from t3);") \ + .assertSucceeded() + cli.execute("create view v9(vc0) as (select -24.6 from rt3);") \ + .assertSucceeded() + cli.execute("SELECT 1 FROM t3 WHERE EXISTS ((SELECT 0.3, 4 FROM v8) EXCEPT ALL (SELECT 8, 1 FROM v8));") \ + .assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,)]) + cli.execute("SELECT 1 FROM t3 WHERE EXISTS ((SELECT 0.3, 4 FROM v9) EXCEPT ALL (SELECT 8, 1 FROM v9));") \ + .assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,)]) cli.execute("SELECT c1 FROM t6;") \ .assertSucceeded().assertDataResultMatch([("3",),("8ጮk|1*",),("27",),("Vrx^qA齀",),("J",),("18",),(">*4嘁pAP",),("+Jm*W0{",),(">V鷓",), ("BW5z",),(".#OJruk",),("lU1覃Nlm",),(None,),("968786590",)]) @@ -323,13 +331,6 @@ with SQLTestCase() as cli: ("BW5z",),(".#OJruk",),("lU1覃Nlm",),(None,),("968786590",)]) cli.execute("ROLLBACK;") - cli.execute("CREATE FUNCTION mybooludf(a bool) RETURNS BOOL RETURN a;") - # At the moment I take this as a feature. Later we could replace the algebra.fetch call with something more appropriate - cli.execute("SELECT 1 FROM rt3 HAVING (min(TIME '02:00:00') IN (TIME '02:00:00')) IS NULL;") \ - .assertFailed(err_message="Illegal argument: cannot fetch a single row from an empty input") - cli.execute("SELECT 1 FROM rt3 HAVING mybooludf(min(false));") \ - .assertFailed(err_message="Illegal argument: cannot fetch a single row from an empty input") - cli.execute(""" START TRANSACTION; DROP TABLE rt1; @@ -347,5 +348,4 @@ with SQLTestCase() as cli: DROP TABLE t5; DROP TABLE t6; DROP TABLE t7; - DROP FUNCTION mybooludf(bool); COMMIT;""").assertSucceeded() diff --git a/sql/test/SQLancer/Tests/sqlancer21.SQL.py b/sql/test/SQLancer/Tests/sqlancer21.SQL.py --- a/sql/test/SQLancer/Tests/sqlancer21.SQL.py +++ b/sql/test/SQLancer/Tests/sqlancer21.SQL.py @@ -12,6 +12,7 @@ with SQLTestCase() as cli: START TRANSACTION; CREATE TABLE "t1" ("c0" BIGINT,"c1" INTERVAL MONTH); INSERT INTO "t1" VALUES (1, INTERVAL '9' MONTH),(5, INTERVAL '6' MONTH),(5, NULL),(7, NULL),(2, INTERVAL '1' MONTH),(2, INTERVAL '1' MONTH); + CREATE FUNCTION mybooludf(a bool) RETURNS BOOL RETURN a; COMMIT; START TRANSACTION; @@ -36,8 +37,19 @@ with SQLTestCase() as cli: cli.execute("SELECT 1 FROM rt1 where rt1.c0 = 1 AND abs(0.4) = 0;") \ .assertSucceeded().assertDataResultMatch([]) + # We should replace algebra.fetch call with something more appropriate + cli.execute("SELECT 1 FROM t1 HAVING (min(TIME '02:00:00') IN (TIME '02:00:00')) IS NULL;") \ + .assertSucceeded().assertDataResultMatch([]) + cli.execute("SELECT 1 FROM rt1 HAVING (min(TIME '02:00:00') IN (TIME '02:00:00')) IS NULL;") \ + .assertSucceeded().assertDataResultMatch([]) + cli.execute("SELECT 1 FROM t1 HAVING mybooludf(min(false));") \ + .assertSucceeded().assertDataResultMatch([]) + cli.execute("SELECT 1 FROM rt1 HAVING mybooludf(min(false));") \ + .assertSucceeded().assertDataResultMatch([]) + cli.execute(""" START TRANSACTION; DROP TABLE rt1; DROP TABLE t1; + DROP FUNCTION mybooludf(bool); COMMIT;""").assertSucceeded() diff --git a/tools/merovingian/daemon/merovingian.c b/tools/merovingian/daemon/merovingian.c --- a/tools/merovingian/daemon/merovingian.c +++ b/tools/merovingian/daemon/merovingian.c @@ -411,8 +411,6 @@ main(int argc, char *argv[]) kv->val = strdup("no"); kv = findConfKey(_mero_db_props, "embedr"); kv->val = strdup("no"); - kv = findConfKey(_mero_db_props, "embedpy"); - kv->val = strdup("no"); kv = findConfKey(_mero_db_props, "embedpy3"); kv->val = strdup("no"); kv = findConfKey(_mero_db_props, "embedc"); diff --git a/tools/merovingian/utils/properties.c b/tools/merovingian/utils/properties.c --- a/tools/merovingian/utils/properties.c +++ b/tools/merovingian/utils/properties.c @@ -31,14 +31,12 @@ static const confkeyval _internal_prop_k {"optpipe", NULL, 0, STR}, {"readonly", NULL, 0, BOOLEAN}, {"embedr", NULL, 0, BOOLEAN}, - {"embedpy", NULL, 0, BOOLEAN}, {"embedpy3", NULL, 0, BOOLEAN}, {"embedc", NULL, 0, BOOLEAN}, {"listenaddr", NULL, 0, LADDR}, {"nclients", NULL, 0, INT}, {"mfunnel", NULL, 0, STR}, {"dbextra", NULL, 0, STR}, - {"dbtrace", NULL, 0, STR}, {"memmaxsize", NULL, 0, INT}, {"vmmaxsize", NULL, 0, INT}, {"raw_strings", NULL, 0, BOOLEAN}, diff --git a/tools/merovingian/utils/properties.h b/tools/merovingian/utils/properties.h --- a/tools/merovingian/utils/properties.h +++ b/tools/merovingian/utils/properties.h @@ -12,7 +12,6 @@ #include "utils.h" #define MEROPROPFILE ".merovingian_properties" -#define PROFILERBEATFREQ "profilerbeatfreq" confkeyval *getDefaultProps(void); int writeProps(confkeyval *ckv, const char *path); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list