Changeset: f07f939ed6b6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/f07f939ed6b6 Modified Files: sql/backends/monet5/sql_statement.c sql/test/SQLancer/Tests/sqlancer19.SQL.py sql/test/SQLancer/Tests/sqlancer20.SQL.py Branch: default Log Message:
Before optimizing a remote plan, make sure the topmost relation only contains references diffs (60 lines): diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -3410,6 +3410,8 @@ stmt_func(backend *be, stmt *ops, const if ((p = find_prop(rel->p, PROP_REMOTE))) rel->p = prop_remove(rel->p, p); + /* sql_processrelation may split projections, so make sure the topmost relation only contains references */ + rel = rel_project(be->mvc->sa, rel, rel_projections(be->mvc, rel, NULL, 1, 1)); if (!(rel = sql_processrelation(be->mvc, rel, 1, 1))) return NULL; if (p) { 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 @@ -256,6 +256,12 @@ with SQLTestCase() as cli: .assertSucceeded() cli.execute("SELECT 1 FROM v7 CROSS JOIN ((SELECT 1) UNION ALL (SELECT 2)) AS sub0(c0);") \ .assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,)]) + cli.execute(""" + SELECT 1 FROM (VALUES (2),(3)) x(x) FULL OUTER JOIN (SELECT rt1.c1 <= CAST(rt1.c1 AS INT) FROM rt1) AS sub0(c0) ON true WHERE sub0.c0 + UNION ALL + SELECT 1 FROM (VALUES (2),(3)) x(x) FULL OUTER JOIN (SELECT rt1.c1 <= CAST(rt1.c1 AS INT) FROM rt1) AS sub0(c0) ON true; + """).assertSucceeded() \ + .assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,)]) cli.execute("ROLLBACK;") cli.execute("CREATE FUNCTION mybooludf(a bool) RETURNS BOOL RETURN a;") diff --git a/sql/test/SQLancer/Tests/sqlancer20.SQL.py b/sql/test/SQLancer/Tests/sqlancer20.SQL.py --- a/sql/test/SQLancer/Tests/sqlancer20.SQL.py +++ b/sql/test/SQLancer/Tests/sqlancer20.SQL.py @@ -10,8 +10,6 @@ with SQLTestCase() as cli: cli.connect(username="monetdb", password="monetdb") cli.execute(""" START TRANSACTION; - CREATE TABLE "t0" ("c0" INTERVAL SECOND NOT NULL, "c1" JSON); - INSERT INTO "t0" VALUES (INTERVAL '9' SECOND, '""'); 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); COMMIT; @@ -20,12 +18,6 @@ with SQLTestCase() as cli: CREATE REMOTE TABLE "rt1" ("c0" BIGINT,"c1" INTERVAL MONTH) ON 'mapi:monetdb://localhost:%s/%s/sys/t1'; COMMIT;""" % (port, db)).assertSucceeded() - cli.execute(""" - SELECT 1 FROM t0 FULL OUTER JOIN (SELECT rt1.c0 <= CAST(rt1.c0 AS INT) FROM rt1) AS sub0(c0) ON true WHERE sub0.c0 - UNION ALL - SELECT 1 FROM t0 FULL OUTER JOIN (SELECT rt1.c0 <= CAST(rt1.c0 AS INT) FROM rt1) AS sub0(c0) ON true; - """).assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,)]) - # Issues related to digits and scale propagation in the sql layer cli.execute("SELECT CAST(2 AS DECIMAL) & CAST(3 AS DOUBLE) FROM t1 where t1.c0 = 1;") \ .assertSucceeded().assertDataResultMatch([(Decimal('0.002'),)]) @@ -35,6 +27,5 @@ with SQLTestCase() as cli: cli.execute(""" START TRANSACTION; DROP TABLE rt1; - DROP TABLE t0; DROP TABLE t1; COMMIT;""").assertSucceeded() _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list