Changeset: a57bb0d1a461 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a57bb0d1a461
Modified Files:
        sql/backends/monet5/sql_rank.c
        sql/backends/monet5/sql_rank.h
        sql/backends/monet5/sql_rank.mal
        sql/backends/monet5/sql_rank.mal.sh
        sql/backends/monet5/sql_rank_hge.mal
        sql/backends/monet5/sql_rank_hge.mal.sh
Branch: analytics
Log Message:

Cleaned SQLsum and SQLprod implementations.


diffs (truncated from 531 to 300 lines):

diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -737,10 +737,9 @@ SQLcount_no_nil(Client cntxt, MalBlkPtr 
 
 static str
 do_analytical_sumprod(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci,
-                                         gdk_return (*func)(BAT *, BAT *, BAT 
*, BAT *, int, int), int tpe, const str op, const str err)
+                                         gdk_return (*func)(BAT *, BAT *, BAT 
*, BAT *, int, int), const str op, const str err)
 {
-       BAT *r, *b, *p, *o;
-       str msg = SQLanalytics_args(&r, &b, &p, &o, cntxt, mb, stk, pci, tpe, 
op, err);
+       BAT *r = NULL, *b = NULL, *p = NULL, *o = NULL;
        int tp1 = getArgType(mb, pci, 1), tp2;
        int unit = *getArgReference_int(stk, pci, 4);
        int start = *getArgReference_int(stk, pci, 5);
@@ -748,19 +747,73 @@ do_analytical_sumprod(Client cntxt, MalB
        int excl = *getArgReference_int(stk, pci, 7);
        gdk_return gdk_res;
 
+       (void) cntxt;
+       if (pci->argc != 8 ||
+               (getArgType(mb, pci, 2) != TYPE_bit && 
getBatType(getArgType(mb, pci, 2)) != TYPE_bit) ||
+               (getArgType(mb, pci, 3) != TYPE_bit && 
getBatType(getArgType(mb, pci, 3)) != TYPE_bit)) {
+               throw(SQL, op, "%s", err);
+       }
+       if (isaBatType(tp1))
+               tp1 = getBatType(tp1);
+       if (isaBatType(getArgType(mb, pci, 1))) {
+               b = BATdescriptor(*getArgReference_bat(stk, pci, 1));
+               if (!b)
+                       throw(SQL, op, SQLSTATE(HY005) "Cannot access column 
descriptor");
+       }
+       switch (tp1) {
+               case TYPE_bte:
+               case TYPE_sht:
+               case TYPE_int:
+               case TYPE_lng:
+#ifdef HAVE_HGE
+               case TYPE_hge:
+#endif
+#ifdef HAVE_HGE
+                       tp2 = TYPE_hge;
+#else
+                       tp2 = TYPE_lng;
+#endif
+                       break;
+               case TYPE_flt:
+                       tp2 = TYPE_flt;
+                       break;
+               case TYPE_dbl:
+                       tp2 = TYPE_dbl;
+                       break;
+               default: {
+                       if(b) BBPunfix(b->batCacheid);
+                       throw(SQL, op, SQLSTATE(42000) "%s not available for 
%s", op, ATOMname(tp1));
+               }
+       }
+       if (b) {
+               BUN cnt = BATcount(b);
+               voidresultBAT(r, tp2, cnt, b, op);
+       }
+       if (isaBatType(getArgType(mb, pci, 2))) {
+               p = BATdescriptor(*getArgReference_bat(stk, pci, 2));
+               if (!p) {
+                       if (b) BBPunfix(b->batCacheid);
+                       if (r) BBPunfix(r->batCacheid);
+                       throw(SQL, op, SQLSTATE(HY005) "Cannot access column 
descriptor");
+               }
+       }
+       if (isaBatType(getArgType(mb, pci, 3))) {
+               o = BATdescriptor(*getArgReference_bat(stk, pci, 3));
+               if (!o) {
+                       if (b) BBPunfix(b->batCacheid);
+                       if (r) BBPunfix(r->batCacheid);
+                       if (p) BBPunfix(p->batCacheid);
+                       throw(SQL, op, SQLSTATE(HY005) "Cannot access column 
descriptor");
+               }
+       }
+
        if (unit != 0 || excl != 0)
                throw(SQL, op, SQLSTATE(42000) "OVER currently only supports 
frame extends with unit ROWS (and none of the excludes)");
        (void) start;
        (void) end;
 
-       if (msg)
-               return msg;
-       if (isaBatType(tp1))
-               tp1 = getBatType(tp1);
-
        if (b) {
                bat *res = getArgReference_bat(stk, pci, 0);
-               tp2 = getBatType(r->T.type);
 
                gdk_res = func(r, b, p, o, tp1, tp2);
                BBPunfix(b->batCacheid);
@@ -773,59 +826,21 @@ do_analytical_sumprod(Client cntxt, MalB
                ptr *in = getArgReference(stk, pci, 1);
                *res = *in;
        }
-       return msg;
+       return MAL_SUCCEED;
 }
 
 str
-SQLscalarsum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+SQLsum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-       ValPtr ret = &stk->stk[getArg(pci, 0)];
-       return do_analytical_sumprod(cntxt, mb, stk, pci, GDKanalyticalsum, 
ret->vtype,
-                                                                "sql.sum", 
SQLSTATE(42000) "sum(:any_1,:bit,:bit)");
-}
-
-#define SQLVECTORSUM(TPE)                                                      
       \
-str                                                                            
       \
-SQLvectorsum_##TPE(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)    
       \
-{                                                                              
       \
-       return do_analytical_sumprod(cntxt, mb, stk, pci, GDKanalyticalsum, 
TYPE_##TPE,   \
-                                                                "sql.sum", 
SQLSTATE(42000) "sum(:any_1,:bit,:bit)"); \
+       return do_analytical_sumprod(cntxt, mb, stk, pci, GDKanalyticalsum, 
"sql.sum", SQLSTATE(42000) "sum(:any_1,:bit,:bit)");
 }
 
-SQLVECTORSUM(lng)
-#ifdef HAVE_HGE
-SQLVECTORSUM(hge)
-#endif
-SQLVECTORSUM(flt)
-SQLVECTORSUM(dbl)
-
-#undef SQLVECTORSUM
-
 str
-SQLscalarprod(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+SQLprod(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-       ValPtr ret = &stk->stk[getArg(pci, 0)];
-       return do_analytical_sumprod(cntxt, mb, stk, pci, GDKanalyticalprod, 
ret->vtype,
-                                                                "sql.prod", 
SQLSTATE(42000) "prod(:any_1,:bit,:bit)");
+       return do_analytical_sumprod(cntxt, mb, stk, pci, GDKanalyticalprod, 
"sql.prod", SQLSTATE(42000) "prod(:any_1,:bit,:bit)");
 }
 
-#define SQLVECTORPROD(TPE)                                                     
         \
-str                                                                            
         \
-SQLvectorprod_##TPE(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)   
         \
-{                                                                              
         \
-       return do_analytical_sumprod(cntxt, mb, stk, pci, GDKanalyticalprod, 
TYPE_##TPE,    \
-                                                                "sql.prod", 
SQLSTATE(42000) "prod(:any_1,:bit,:bit)"); \
-}
-
-SQLVECTORPROD(lng)
-SQLVECTORPROD(flt)
-SQLVECTORPROD(dbl)
-#ifdef HAVE_HGE
-SQLVECTORPROD(hge)
-#endif
-
-#undef SQLVECTORPROD
-
 str
 SQLavg(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
diff --git a/sql/backends/monet5/sql_rank.h b/sql/backends/monet5/sql_rank.h
--- a/sql/backends/monet5/sql_rank.h
+++ b/sql/backends/monet5/sql_rank.h
@@ -22,32 +22,8 @@ sql5_export str SQLmin(Client cntxt, Mal
 sql5_export str SQLmax(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str SQLcount(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str SQLcount_no_nil(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
-sql5_export str SQLscalarsum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
-
-#define SQLVECTORSUM(TPE) sql_export str SQLvectorsum_##TPE(Client cntxt, 
MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-
-SQLVECTORSUM(lng)
-SQLVECTORSUM(flt)
-SQLVECTORSUM(dbl)
-#ifdef HAVE_HGE
-SQLVECTORSUM(hge)
-#endif
-
-#undef SQLVECTORSUM
-
-sql5_export str SQLscalarprod(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
-
-#define SQLVECTORPROD(TPE) sql_export str SQLvectorprod_##TPE(Client cntxt, 
MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-
-SQLVECTORPROD(lng)
-SQLVECTORPROD(flt)
-SQLVECTORPROD(dbl)
-#ifdef HAVE_HGE
-SQLVECTORPROD(hge)
-#endif
-
-#undef SQLVECTORPROD
-
+sql5_export str SQLsum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+sql5_export str SQLprod(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str SQLavg(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 
 #endif /* _SQL_RANK_H */
diff --git a/sql/backends/monet5/sql_rank.mal b/sql/backends/monet5/sql_rank.mal
--- a/sql/backends/monet5/sql_rank.mal
+++ b/sql/backends/monet5/sql_rank.mal
@@ -129,115 +129,115 @@ address SQLntile
 comment "return the groups divided as equally as possible";
 
 pattern sql.sum(b:bte, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :lng
-address SQLscalarsum
+address SQLsum
 comment "return the sum of groups";
 
 pattern batsql.sum(b:bat[:bte], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:lng]
-address SQLvectorsum_lng
+address SQLsum
 comment "return the sum of groups";
 
 pattern sql.prod(b:bte, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :lng
-address SQLscalarprod
+address SQLprod
 comment "return the product of groups";
 
 pattern batsql.prod(b:bat[:bte], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:lng]
-address SQLvectorprod_lng
+address SQLprod
 comment "return the product of groups";
 
 pattern sql.sum(b:sht, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :lng
-address SQLscalarsum
+address SQLsum
 comment "return the sum of groups";
 
 pattern batsql.sum(b:bat[:sht], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:lng]
-address SQLvectorsum_lng
+address SQLsum
 comment "return the sum of groups";
 
 pattern sql.prod(b:sht, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :lng
-address SQLscalarprod
+address SQLprod
 comment "return the product of groups";
 
 pattern batsql.prod(b:bat[:sht], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:lng]
-address SQLvectorprod_lng
+address SQLprod
 comment "return the product of groups";
 
 pattern sql.sum(b:int, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :lng
-address SQLscalarsum
+address SQLsum
 comment "return the sum of groups";
 
 pattern batsql.sum(b:bat[:int], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:lng]
-address SQLvectorsum_lng
+address SQLsum
 comment "return the sum of groups";
 
 pattern sql.prod(b:int, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :lng
-address SQLscalarprod
+address SQLprod
 comment "return the product of groups";
 
 pattern batsql.prod(b:bat[:int], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:lng]
-address SQLvectorprod_lng
+address SQLprod
 comment "return the product of groups";
 
 pattern sql.sum(b:lng, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :lng
-address SQLscalarsum
+address SQLsum
 comment "return the sum of groups";
 
 pattern batsql.sum(b:bat[:lng], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:lng]
-address SQLvectorsum_lng
+address SQLsum
 comment "return the sum of groups";
 
 pattern sql.prod(b:lng, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :lng
-address SQLscalarprod
+address SQLprod
 comment "return the product of groups";
 
 pattern batsql.prod(b:bat[:lng], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:lng]
-address SQLvectorprod_lng
+address SQLprod
 comment "return the product of groups";
 
 pattern sql.sum(b:flt, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :flt
-address SQLscalarsum
+address SQLsum
 comment "return the sum of groups";
 
 pattern batsql.sum(b:bat[:flt], p:any_1, o:any_2, unit:int, s:int, e:int, 
exl:int) :bat[:flt]
-address SQLvectorsum_flt
+address SQLsum
 comment "return the sum of groups";
 
 pattern sql.prod(b:flt, p:bit, o:bit, unit:int, s:int, e:int, excl:int) :flt
-address SQLscalarprod
+address SQLprod
 comment "return the product of groups";
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to