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]