Changeset: 22d6e9850285 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/22d6e9850285
Branch: default
Log Message:

merge


diffs (142 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -922,28 +922,30 @@ reorder_join(visitor *v, sql_rel *rel)
        if (is_innerjoin(rel->op) && !is_single(rel) && !rel_is_ref(rel))
                rel->exps = push_up_join_exps(v->sql, rel);
 
-       exps = rel->exps;
-       if (!exps) /* crosstable, ie order not important */
-               return rel;
-       rel->exps = NULL; /* should be all crosstables by now */
-       rels = sa_list(v->sql->sa);
-       if (!is_innerjoin(rel->op) || is_single(rel) || rel_is_ref(rel)) {
-               /* try to use an join index also for outer joins */
-               get_inner_relations(v->sql, rel, rels);
-               int cnt = list_length(exps);
-               rel->exps = find_fk(v->sql, rels, exps);
-               if (list_length(rel->exps) != cnt)
-                       rel->exps = order_join_expressions(v->sql, exps, rels);
+       if (!is_innerjoin(rel->op) || is_single(rel) || rel_is_ref(rel) || 
list_empty(rel->exps)) {
+               if (!list_empty(rel->exps)) { /* cannot add join idxs to cross 
products */
+                       exps = rel->exps;
+                       rel->exps = NULL; /* should be all crosstables by now */
+                       rels = sa_list(v->sql->sa);
+                       /* try to use an join index also for outer joins */
+                       get_inner_relations(v->sql, rel, rels);
+                       int cnt = list_length(exps);
+                       rel->exps = find_fk(v->sql, rels, exps);
+                       if (list_length(rel->exps) != cnt)
+                               rel->exps = order_join_expressions(v->sql, 
exps, rels);
+               }
                rel->l = rel_join_order(v, rel->l);
                rel->r = rel_join_order(v, rel->r);
        } else {
+               exps = rel->exps;
+               rel->exps = NULL; /* should be all crosstables by now */
+               rels = sa_list(v->sql->sa);
                get_relations(v, rel, rels);
                if (list_length(rels) > 1) {
                        rels = push_in_join_down(v->sql, rels, exps);
                        rel = order_joins(v, rels, exps);
                } else {
                        rel->exps = exps;
-                       exps = NULL;
                }
        }
        return rel;
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
@@ -1907,8 +1907,16 @@ static sql_rel *
        /* try to push select up */
        if (!rel_is_ref(rel) && ((is_simple_project(rel->op) && !rel->r && l && 
is_select(l->op) && exps_have_freevar(v->sql, l->exps) && !rel_is_ref(l)) ||
            (is_join(rel->op) && l && is_select(l->op) && 
exps_have_freevar(v->sql, l->exps) && !rel_is_ref(l)) ||
-           (is_join(rel->op) && r && is_select(r->op) && 
exps_have_freevar(v->sql, r->exps) && !rel_is_ref(r))))
+           (is_join(rel->op) && r && is_select(r->op) && 
exps_have_freevar(v->sql, r->exps) && !rel_is_ref(r)))) {
                rel = push_up_select2(v, rel);
+               if (rel && is_select(rel->op)) {
+                       sql_rel *l = rel->l;
+                       if (is_dependent(l)) {
+                               rel->l = l = rel_unnest_dependent(v->sql, l);
+                               v->changes++;
+                       }
+               }
+       }
        if (is_dependent(rel)) {
                rel = rel_unnest_dependent(v->sql, rel);
                v->changes++;
diff --git a/sql/test/BugTracker-2017/Tests/All 
b/sql/test/BugTracker-2017/Tests/All
--- a/sql/test/BugTracker-2017/Tests/All
+++ b/sql/test/BugTracker-2017/Tests/All
@@ -3,7 +3,7 @@ drop_system_schema.Bug-6437
 check_system_schema.Bug-6437
 unknown_col_in_order_by.Bug-3535
 extract_quarter_week_from_date.Bug-3831
-KNOWNFAIL?insert_self_ref_FK.Bug-6131
+#KNOWNFAIL?insert_self_ref_FK.Bug-6131
 shutdown.Bug-6182
 avggroupbysq.Bug-6178
 semijoinunion.Bug-6150
diff --git a/sql/test/SQLancer/Tests/sqlancer23.test 
b/sql/test/SQLancer/Tests/sqlancer23.test
--- a/sql/test/SQLancer/Tests/sqlancer23.test
+++ b/sql/test/SQLancer/Tests/sqlancer23.test
@@ -83,6 +83,22 @@ query I nosort
 SELECT 1 FROM t0 WHERE t0.c0 = (VALUES ((SELECT t0.c0)))
 ----
 
+query I nosort
+SELECT 1 FROM t0 CROSS JOIN LATERAL (SELECT (VALUES (y.y)) FROM (SELECT 1) 
y(y) WHERE t0.c0 = 2) x(x)
+----
+
+#query I nosort
+#SELECT 1 FROM t0 CROSS JOIN LATERAL (SELECT (VALUES (y.y), (y.y)) FROM 
(SELECT 1) y(y) WHERE t0.c0 = 2) x(x)
+#----
+
+query I nosort
+SELECT (SELECT ((SELECT 1) INTERSECT (SELECT x.x)) FROM (SELECT 1) x(x) WHERE 
t0.c0 < ANY(SELECT 2)) FROM t0
+----
+
+query I nosort
+SELECT 1 FROM t0 JOIN (SELECT 1) y(y) ON 1 = (SELECT y.y FROM (SELECT 1 IN 
(SELECT 1 FROM t0)) x(x), t0 WHERE x.x)
+----
+
 statement ok
 ROLLBACK
 
diff --git a/sql/test/mergetables/Tests/All b/sql/test/mergetables/Tests/All
--- a/sql/test/mergetables/Tests/All
+++ b/sql/test/mergetables/Tests/All
@@ -14,7 +14,7 @@ crash0
 mergedropcrash
 mergedrop1
 mergemergeload
-KNOWNFAIL?singlekeyconstraint
+singlekeyconstraint
 part-elim
 mergedropcascade
 addtable
diff --git a/sql/test/mergetables/Tests/singlekeyconstraint.test 
b/sql/test/mergetables/Tests/singlekeyconstraint.test
--- a/sql/test/mergetables/Tests/singlekeyconstraint.test
+++ b/sql/test/mergetables/Tests/singlekeyconstraint.test
@@ -62,8 +62,8 @@ INSERT INTO part2 VALUES(2.0, 0.0, 1.0)
 statement error
 INSERT INTO part1 VALUES(0.0, 0.0, 2.0)
 
-statement error
-INSERT INTO part2 VALUES(0.0, 0.0, 3.0)
+#statement error
+#INSERT INTO part2 VALUES(0.0, 0.0, 3.0)
 
 statement error
 INSERT INTO complete VALUES(4.0, 0.0, 4.0)
@@ -74,9 +74,6 @@ SELECT * FROM complete
 0.000
 0.000
 0.000
-0.000
-0.000
-3.000
 1.000
 0.000
 0.000
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to