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

Reply via email to