Changeset: a4ca359a62d1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a4ca359a62d1
Modified Files:
        monetdb5/modules/mal/mal_weld.c
        monetdb5/modules/mal/mal_weld.h
        monetdb5/modules/mal/mal_weld.mal
        monetdb5/modules/mal/mal_weld.mal.sh
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_weld.c
Branch: mal-weld
Log Message:

weld impl for batcalc.[/ % == < <= > >= !=]


diffs (truncated from 1417 to 300 lines):

diff --git a/monetdb5/modules/mal/mal_weld.c b/monetdb5/modules/mal/mal_weld.c
--- a/monetdb5/modules/mal/mal_weld.c
+++ b/monetdb5/modules/mal/mal_weld.c
@@ -438,7 +438,7 @@ WeldAlgebraSelect1(Client cntxt, MalBlkP
        weldState *wstate = *getArgReference_ptr(stk, pci, 7); /* has value */
 
        char *lCmp, *op, *rCmp;
-       char x[STR_SIZE_INC], weldStmt[STR_SIZE_INC];
+       char weldStmt[STR_SIZE_INC];
 
        /* Inspired from gdk_select.c */
        if (!anti) {
@@ -601,7 +601,13 @@ WeldBatcalcBinary(MalBlkPtr mb, MalStkPt
                throw(MAL, malfunc, PROGRAM_NYI);
        }
 
-       char weldStmt[STR_SIZE_INC];
+       char weldStmt[STR_SIZE_INC], *cast;
+       if (getBatType(getArgType(mb, pci, 0)) == TYPE_bit) {
+               cast = any_1;
+       } else {
+               cast = "";
+       }
+
        if (sid != -1) {
                char leftStmt[STR_SIZE_INC];
                char rightStmt[STR_SIZE_INC];
@@ -618,40 +624,40 @@ WeldBatcalcBinary(MalBlkPtr mb, MalStkPt
 
                sprintf(weldStmt,
                "let v%d = result("
-               "       for (%s, appender[%s], |b, i, oid|"
-               "               merge(b, %s %s %s)"
+               "       for (%s, appender[?], |b, i, oid|"
+               "               merge(b, %s(%s %s %s))"
                "       )"
                ");"
                "let v%dhseqbase = 0L;",
-               ret, getWeldCandList(sid, s), any_1, leftStmt, op, rightStmt, 
ret);
+               ret, getWeldCandList(sid, s), cast, leftStmt, op, rightStmt, 
ret);
        } else {
                if (isaBatType(leftType) && isaBatType(rightType)) {
                        sprintf(weldStmt,
                        "let v%d = result("
-                       "       for (zip(v%d, v%d), appender[%s], |b , i, x|"
-                       "               merge(b, x.$0 %s x.$1)"
+                       "       for (zip(v%d, v%d), appender[?], |b , i, x|"
+                       "               merge(b, %s(x.$0 %s x.$1))"
                        "       )"
                        ");"
                        "let v%dhseqbase = 0L;",
-                       ret, left, right, any_1, op, ret);
+                       ret, left, right, cast, op, ret);
                } else if (isaBatType(leftType)) {
                        sprintf(weldStmt,
                        "let v%d = result("
-                       "       for (v%d, appender[%s], |b, i, x|"
-                       "               merge(b, x %s v%d)"
+                       "       for (v%d, appender[?], |b, i, x|"
+                       "               merge(b, %s(x %s v%d))"
                        "       )"
                        ");"
                        "let v%dhseqbase = 0L;",
-                       ret, left, any_1, op, right, ret);
+                       ret, left, cast, op, right, ret);
                } else if (isaBatType(rightType)) {
                        sprintf(weldStmt,
                        "let v%d = result("
-                       "       for (v%d, appender[%s], |b, i, x|"
-                       "               merge(b, v%d %s x)"
+                       "       for (v%d, appender[?], |b, i, x|"
+                       "               merge(b, %s(v%d %s x))"
                        "       )"
                        ");"
                        "let v%dhseqbase = 0L;",
-                       ret, right, any_1, left, op, ret);
+                       ret, right, cast, left, op, ret);
                }
        }
        appendWeldStmt(wstate, weldStmt);
@@ -679,6 +685,61 @@ WeldBatcalcMULsignal(Client cntxt, MalBl
        return WeldBatcalcBinary(mb, stk, pci, "*", "weld.batcalcmul");
 }
 
+str
+WeldBatcalcDIVsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       return WeldBatcalcBinary(mb, stk, pci, "/", "weld.batcalcdiv");
+}
+
+str
+WeldBatcalcLTsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       return WeldBatcalcBinary(mb, stk, pci, "<", "weld.batcalclt");
+}
+
+str
+WeldBatcalcLEsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       return WeldBatcalcBinary(mb, stk, pci, "<=", "weld.batcalcle");
+}
+str
+WeldBatcalcEQsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       return WeldBatcalcBinary(mb, stk, pci, "==", "weld.batcalceq");
+}
+
+str
+WeldBatcalcGTsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       return WeldBatcalcBinary(mb, stk, pci, ">", "weld.batcalcgt");
+}
+
+str
+WeldBatcalcGEsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       return WeldBatcalcBinary(mb, stk, pci, ">=", "weld.batcalcge");
+}
+
+str
+WeldBatcalcNEsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       return WeldBatcalcBinary(mb, stk, pci, "!=", "weld.batcalcne");
+}
+
+str
+WeldBatcalcMODsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       return WeldBatcalcBinary(mb, stk, pci, "%", "weld.batcalcmod");
+}
+
 /* Ignore the existing groups and instead use all the columns up to this point 
to
  * generate the new group ids. Weld will remove the unnecessary computations. 
e.g.:
  * g1, e1, h1 = group.group(col1)  -> for(zip(col1), dictmerger[ty1, i64, 
min]...
diff --git a/monetdb5/modules/mal/mal_weld.h b/monetdb5/modules/mal/mal_weld.h
--- a/monetdb5/modules/mal/mal_weld.h
+++ b/monetdb5/modules/mal/mal_weld.h
@@ -29,6 +29,14 @@ mal_export str WeldAlgebraThetaselect2(C
 mal_export str WeldBatcalcADDsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mal_export str WeldBatcalcSUBsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mal_export str WeldBatcalcMULsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str WeldBatcalcDIVsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str WeldBatcalcMODsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str WeldBatcalcLTsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str WeldBatcalcLEsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str WeldBatcalcEQsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str WeldBatcalcGTsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str WeldBatcalcGEsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str WeldBatcalcNEsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mal_export str WeldGroup(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 mal_export str WeldAggrSubSum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mal_export str WeldAggrSubProd(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
diff --git a/monetdb5/modules/mal/mal_weld.mal 
b/monetdb5/modules/mal/mal_weld.mal
--- a/monetdb5/modules/mal/mal_weld.mal
+++ b/monetdb5/modules/mal/mal_weld.mal
@@ -1545,6 +1545,1070 @@ pattern batcalcmul(v:dbl, b:bat[:dbl], s
 address WeldBatcalcMULsignal
 comment "batcalcmul with candidates list";
 
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:bte], wstate:ptr):bat[:bte]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:bte], s:bat[:oid], 
wstate:ptr):bat[:bte]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(b:bat[:bte], v:bte, wstate:ptr):bat[:bte]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b:bat[:bte], v:bte, s:bat[:oid], wstate:ptr):bat[:bte]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(v:bte, b:bat[:bte], wstate:ptr):bat[:bte]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(v:bte, b:bat[:bte], s:bat[:oid], wstate:ptr):bat[:bte]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:int], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:int], s:bat[:oid], 
wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(b:bat[:bte], v:int, wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b:bat[:bte], v:int, s:bat[:oid], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(v:bte, b:bat[:int], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(v:bte, b:bat[:int], s:bat[:oid], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:lng], wstate:ptr):bat[:lng]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:lng], s:bat[:oid], 
wstate:ptr):bat[:lng]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(b:bat[:bte], v:lng, wstate:ptr):bat[:lng]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b:bat[:bte], v:lng, s:bat[:oid], wstate:ptr):bat[:lng]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(v:bte, b:bat[:lng], wstate:ptr):bat[:lng]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(v:bte, b:bat[:lng], s:bat[:oid], wstate:ptr):bat[:lng]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:flt], wstate:ptr):bat[:flt]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:flt], s:bat[:oid], 
wstate:ptr):bat[:flt]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(b:bat[:bte], v:flt, wstate:ptr):bat[:flt]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b:bat[:bte], v:flt, s:bat[:oid], wstate:ptr):bat[:flt]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(v:bte, b:bat[:flt], wstate:ptr):bat[:flt]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(v:bte, b:bat[:flt], s:bat[:oid], wstate:ptr):bat[:flt]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:dbl], wstate:ptr):bat[:dbl]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b1:bat[:bte], b2:bat[:dbl], s:bat[:oid], 
wstate:ptr):bat[:dbl]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(b:bat[:bte], v:dbl, wstate:ptr):bat[:dbl]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b:bat[:bte], v:dbl, s:bat[:oid], wstate:ptr):bat[:dbl]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(v:bte, b:bat[:dbl], wstate:ptr):bat[:dbl]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(v:bte, b:bat[:dbl], s:bat[:oid], wstate:ptr):bat[:dbl]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+
+pattern batcalcdiv(b1:bat[:int], b2:bat[:bte], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b1:bat[:int], b2:bat[:bte], s:bat[:oid], 
wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(b:bat[:int], v:bte, wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b:bat[:int], v:bte, s:bat[:oid], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(v:int, b:bat[:bte], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(v:int, b:bat[:bte], s:bat[:oid], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+
+pattern batcalcdiv(b1:bat[:int], b2:bat[:int], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b1:bat[:int], b2:bat[:int], s:bat[:oid], 
wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(b:bat[:int], v:int, wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(b:bat[:int], v:int, s:bat[:oid], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+pattern batcalcdiv(v:int, b:bat[:int], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv";
+pattern batcalcdiv(v:int, b:bat[:int], s:bat[:oid], wstate:ptr):bat[:int]
+address WeldBatcalcDIVsignal
+comment "batcalcdiv with candidates list";
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to