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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list