Changeset: a41a4bf54656 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a41a4bf54656
Modified Files:
sql/backends/monet5/rel_bin.c
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out.single
Branch: Oct2020
Log Message:
don't use the output of a replace in anything else then result-set or replace.
This way the dataflow optimizer can create one large
data flow block.
diffs (92 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -623,7 +623,7 @@ exp_bin_or(backend *be, sql_exp *e, stmt
static stmt *
exp2bin_case(backend *be, sql_exp *fe, stmt *left, stmt *right, stmt *isel,
int depth)
{
- stmt *res = NULL, *rsel = NULL, *osel = NULL, *ncond = NULL, *ocond =
NULL, *cond = NULL;
+ stmt *res = NULL, *ires = NULL, *rsel = NULL, *osel = NULL, *ncond =
NULL, *ocond = NULL, *cond = NULL;
int next_cond = 1, single_value = (fe->card <= CARD_ATOM && (!left ||
!left->nrcols));
char name[16], *nme = NULL;
sql_subtype *bt = sql_bind_localtype("bit");
@@ -666,6 +666,7 @@ exp2bin_case(backend *be, sql_exp *fe, s
if (!l)
l = bin_first_column(be, left);
res = stmt_const(be, l, stmt_atom(be,
atom_general(be->mvc->sa, exp_subtype(fe), NULL)));
+ ires = l;
if (res)
res->cand = isel;
} else if (res && !next_cond) { /* use result too
update column */
@@ -685,7 +686,7 @@ exp2bin_case(backend *be, sql_exp *fe, s
if (en->next) {
/* osel - rsel */
if (!osel)
- osel = stmt_mirror(be, res);
+ osel = stmt_mirror(be, ires);
stmt *d = stmt_tdiff(be, osel, rsel,
NULL);
osel = rsel = stmt_project(be, d, osel);
}
diff --git
a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
---
a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
+++
b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
@@ -43,7 +43,7 @@ barrier X_1093:bit := language.dataflow(
X_61:bat[:timestamp] :=
batmtime.timestamp_add_msec_interval(X_45:bat[:timestamp], -28800000:lng);
X_64:bat[:timestamp] := algebra.projection(C_58:bat[:oid],
X_61:bat[:timestamp]);
X_65:bat[:timestamp] := bat.replace(X_56:bat[:timestamp], C_58:bat[:oid],
X_64:bat[:timestamp], true:bit);
- C_66:bat[:oid] := bat.mirror(X_65:bat[:timestamp]);
+ C_66:bat[:oid] := bat.mirror(X_43:bat[:str]);
C_67:bat[:oid] := algebra.difference(C_66:bat[:oid], C_58:bat[:oid],
nil:BAT, nil:BAT, false:bit, false:bit, nil:lng);
C_71:bat[:oid] := algebra.projection(C_67:bat[:oid], C_66:bat[:oid]);
X_75:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2000-04-02
10:00:00.000000":timestamp, "2000-10-29 09:00:00.000000":timestamp,
C_71:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
@@ -51,11 +51,7 @@ barrier X_1093:bit := language.dataflow(
C_80:bat[:oid] := algebra.projection(C_78:bat[:oid], C_71:bat[:oid]);
X_83:bat[:timestamp] :=
batmtime.timestamp_add_msec_interval(X_45:bat[:timestamp], -25200000:lng);
X_84:bat[:timestamp] := algebra.projection(C_80:bat[:oid],
X_83:bat[:timestamp]);
- language.pass(C_58:bat[:oid]);
- language.pass(C_66:bat[:oid]);
-exit X_1093:bit;
X_85:bat[:timestamp] := bat.replace(X_65:bat[:timestamp], C_80:bat[:oid],
X_84:bat[:timestamp], true:bit);
-barrier X_1098:bit := language.dataflow();
C_86:bat[:oid] := algebra.difference(C_71:bat[:oid], C_80:bat[:oid],
nil:BAT, nil:BAT, false:bit, false:bit, nil:lng);
C_89:bat[:oid] := algebra.projection(C_86:bat[:oid], C_71:bat[:oid]);
X_94:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2000-10-29
09:00:00.000000":timestamp, "2001-04-01 10:00:00.000000":timestamp,
C_89:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
@@ -374,6 +370,11 @@ barrier X_1098:bit := language.dataflow(
X_941:bat[:int] := bat.pack(0:int);
X_930:bat[:timestamp] := batcalc.timestamp(X_929:bat[:timestamp], 7:int);
X_934:bat[:str] := batmtime.timestamp_to_str(X_930:bat[:timestamp],
"%Y":str);
+ language.pass(X_43:bat[:str]);
+ language.pass(C_58:bat[:oid]);
+ language.pass(C_66:bat[:oid]);
+ language.pass(C_80:bat[:oid]);
+ language.pass(C_71:bat[:oid]);
language.pass(C_97:bat[:oid]);
language.pass(C_89:bat[:oid]);
language.pass(C_118:bat[:oid]);
@@ -460,10 +461,13 @@ barrier X_1098:bit := language.dataflow(
language.pass(C_869:bat[:oid]);
language.pass(C_895:bat[:oid]);
language.pass(C_887:bat[:oid]);
+ language.pass(X_45:bat[:timestamp]);
+ language.pass(X_83:bat[:timestamp]);
language.pass(C_916:bat[:oid]);
language.pass(C_907:bat[:oid]);
+ language.pass(X_61:bat[:timestamp]);
language.pass(C_925:bat[:oid]);
-exit X_1098:bit;
+exit X_1093:bit;
sql.resultSet(X_938:bat[:str], X_939:bat[:str], X_940:bat[:str],
X_941:bat[:int], X_941:bat[:int], X_934:bat[:str]);
end user.main;
# optimizer.mitosis()
diff --git
a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out.single
b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out.single
---
a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out.single
+++
b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out.single
@@ -42,7 +42,7 @@ function user.main():void;
X_61:bat[:timestamp] :=
batmtime.timestamp_add_msec_interval(X_45:bat[:timestamp], -28800000:lng);
X_64:bat[:timestamp] := algebra.projection(C_58:bat[:oid],
X_61:bat[:timestamp]);
X_65:bat[:timestamp] := bat.replace(X_56:bat[:timestamp], C_58:bat[:oid],
X_64:bat[:timestamp], true:bit);
- C_66:bat[:oid] := bat.mirror(X_65:bat[:timestamp]);
+ C_66:bat[:oid] := bat.mirror(X_43:bat[:str]);
C_67:bat[:oid] := algebra.difference(C_66:bat[:oid], C_58:bat[:oid],
nil:BAT, nil:BAT, false:bit, false:bit, nil:lng);
C_71:bat[:oid] := algebra.projection(C_67:bat[:oid], C_66:bat[:oid]);
X_75:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2000-04-02
10:00:00.000000":timestamp, "2000-10-29 09:00:00.000000":timestamp,
C_71:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list