Changeset: 5aaf2834f3c6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5aaf2834f3c6
Modified Files:
        sql/backends/monet5/sql.mx
Branch: default
Log Message:

Some steps towards de-mx-ing sql.mx.


diffs (truncated from 867 to 300 lines):

diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -779,23 +779,53 @@ comment "cast decimal(@2) to decimal(@1)
 @:mal_cast2(dbl,wrd)@
 @:mal_cast2(dbl,lng)@
 
-@= mal_interval
-command calc.month_interval( v:@1, ek:int, sk:int ) :int
-address month_interval_@1
-comment "cast @1 to a month_interval and check for overflow";
-
-command calc.second_interval( v:@1, ek:int, sk:int ) :lng
-address second_interval_@1
-comment "cast @1 to a second_interval and check for overflow";
-@
-@mal
-
-@:mal_interval(str)@
-@:mal_interval(bte)@
-@:mal_interval(sht)@
-@:mal_interval(int)@
-@:mal_interval(wrd)@
-@:mal_interval(lng)@
+command calc.month_interval( v:str, ek:int, sk:int ) :int
+address month_interval_str
+comment "cast str to a month_interval and check for overflow";
+
+command calc.second_interval( v:str, ek:int, sk:int ) :lng
+address second_interval_str
+comment "cast str to a second_interval and check for overflow";
+
+pattern calc.month_interval( v:bte, ek:int, sk:int ) :int
+address month_interval
+comment "cast bte to a month_interval and check for overflow";
+
+pattern calc.second_interval( v:bte, ek:int, sk:int ) :lng
+address second_interval
+comment "cast bte to a second_interval and check for overflow";
+
+pattern calc.month_interval( v:sht, ek:int, sk:int ) :int
+address month_interval
+comment "cast sht to a month_interval and check for overflow";
+
+pattern calc.second_interval( v:sht, ek:int, sk:int ) :lng
+address second_interval
+comment "cast sht to a second_interval and check for overflow";
+
+pattern calc.month_interval( v:int, ek:int, sk:int ) :int
+address month_interval
+comment "cast int to a month_interval and check for overflow";
+
+pattern calc.second_interval( v:int, ek:int, sk:int ) :lng
+address second_interval
+comment "cast int to a second_interval and check for overflow";
+
+pattern calc.month_interval( v:wrd, ek:int, sk:int ) :int
+address month_interval
+comment "cast wrd to a month_interval and check for overflow";
+
+pattern calc.second_interval( v:wrd, ek:int, sk:int ) :lng
+address second_interval
+comment "cast wrd to a second_interval and check for overflow";
+
+pattern calc.month_interval( v:lng, ek:int, sk:int ) :int
+address month_interval
+comment "cast lng to a month_interval and check for overflow";
+
+pattern calc.second_interval( v:lng, ek:int, sk:int ) :lng
+address second_interval
+comment "cast lng to a second_interval and check for overflow";
 
 command calc.rowid(v:any_1, schema:str, table:str) :oid
 address sql_rowid
@@ -1374,17 +1404,10 @@ sql5_export str @1_trunc_wrap( @1 *res, 
 #define degrees(x)       ((x) * 180.0/3.14159265358979323846 )
 sql5_export str SQLdbl_alpha(dbl *res, dbl *decl, dbl *theta);
 sql5_export str SQLbat_alpha(bat *res, bat *decl, dbl *theta);
-@= c_interval_export
-sql5_export str month_interval_@1( int *ret, @1 *s, int *ek, int *sk );
-sql5_export str second_interval_@1( lng *res, @1 *s, int *ek, int *sk );
-@
-@h
-@:c_interval_export(bte)@
-@:c_interval_export(sht)@
-@:c_interval_export(int)@
-@:c_interval_export(wrd)@
-@:c_interval_export(lng)@
-@:c_interval_export(daytime)@
+sql5_export str month_interval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+sql5_export str second_interval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+sql5_export str month_interval_daytime( int *ret, daytime *s, int *ek, int *sk 
);
+sql5_export str second_interval_daytime( lng *res, daytime *s, int *ek, int 
*sk );
 @= simpleupcast_export
 sql5_export str @2_2_@1( @1 *res, @2 *v );
 sql5_export str bat@2_2_@1( int *res, int *v );
@@ -5882,16 +5905,36 @@ second_interval_str( lng *res, str *s, i
        return MAL_SUCCEED;
 }
 
-@= c_interval
 str
-month_interval_@1( int *ret, @1 *s, int *d, int *sk ){
-       int k = digits2ek(*d);
-       int r = (int)*s;
-
-       (void)sk;
-       switch(k) {
-       case iyear:     
+month_interval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       int *ret = (int *) getArgReference(stk, pci, 0);
+       int k = digits2ek(* (int *) getArgReference(stk, pci, 2));
+       int r;
+
+       (void) cntxt;
+       (void) mb;
+       switch (getArgType(mb, pci, 1)) {
+       case TYPE_bte:
+               r = stk->stk[getArg(pci, 1)].val.btval;
+               break;
+       case TYPE_sht:
+               r = stk->stk[getArg(pci, 1)].val.shval;
+               break;
+       case TYPE_int:
+               r = stk->stk[getArg(pci, 1)].val.ival;
+               break;
+       case TYPE_wrd:
+               r = (int) stk->stk[getArg(pci, 1)].val.wval;
+               break;
+       case TYPE_lng:
+               r = (int) stk->stk[getArg(pci, 1)].val.lval;
+               break;
+       }
+       switch (k) {
+       case iyear:
                r *= 12;
+               break;
        case imonth:
                break;
        default:
@@ -5900,14 +5943,35 @@ month_interval_@1( int *ret, @1 *s, int 
        *ret = r;
        return MAL_SUCCEED;
 }
+
 str
-second_interval_@1( lng *res, @1 *s, int *d, int *sk ){
-       int k = digits2ek(*d);
-       lng r = *s;
-
-       (void)sk;
-       switch(k) {
-       case iday:      
+second_interval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       lng *ret = (lng *) getArgReference(stk, pci, 0);
+       int k = digits2ek(* (int *) getArgReference(stk, pci, 2));
+       lng r;
+
+       (void) cntxt;
+       (void) mb;
+       switch (getArgType(mb, pci, 1)) {
+       case TYPE_bte:
+               r = stk->stk[getArg(pci, 1)].val.btval;
+               break;
+       case TYPE_sht:
+               r = stk->stk[getArg(pci, 1)].val.shval;
+               break;
+       case TYPE_int:
+               r = stk->stk[getArg(pci, 1)].val.ival;
+               break;
+       case TYPE_wrd:
+               r = stk->stk[getArg(pci, 1)].val.wval;
+               break;
+       case TYPE_lng:
+               r = stk->stk[getArg(pci, 1)].val.lval;
+               break;
+       }
+       switch (k) {
+       case iday:
                r *= 24;
        case ihour:
                r *= 60;
@@ -5917,18 +5981,11 @@ second_interval_@1( lng *res, @1 *s, int
                r *= 1000;
                break;
        default:
-               throw(ILLARG, "calc.second_interval","illegal argument");
-       }
-       *res = r;
+               throw(ILLARG, "calc.sec_interval", "illegal argument");
+       }
+       *ret = r;
        return MAL_SUCCEED;
 }
-@
-@c
-@:c_interval(bte)@
-@:c_interval(sht)@
-@:c_interval(int)@
-@:c_interval(wrd)@
-@:c_interval(lng)@
 
 @mal
 command calc.second_interval( v:daytime, ek:int, sk:int ) :lng
@@ -6115,25 +6172,24 @@ sql_rowid(Client cntxt, MalBlkPtr mb, Ma
        return MAL_SUCCEED;
 }
 
-@= rnk
-str 
-sql_@1rank_grp(bat *rid, bat *bid, bat *gid, bat *gpe)
+static str
+do_sql_rank_grp(bat *rid, bat *bid, bat *gid, int nrank, int dense, const char 
*name)
 {
        BAT *r, *b, *g;
        BUN p, q;
        BATiter bi, gi;
        int (*ocmp)(const void *, const void *);
        int (*gcmp)(const void *, const void *);
-       ptr oc, gc;
-       int rank = 1, nrank = @3;
+       const void *oc, *gc, *on, *gn;
+       int rank = 1;
+       int c;
 
        if( (b = BATdescriptor(*bid)) == NULL )
-               throw(SQL, "sql.@1rank_grp", "Cannot access descriptor");
+               throw(SQL, name, "Cannot access descriptor");
        if( (g = BATdescriptor(*gid)) == NULL ){
                BBPreleaseref(b->batCacheid);
-               throw(SQL, "sql.@1rank_grp", "Cannot access descriptor");
-       }
-       (void)gpe;
+               throw(SQL, name, "Cannot access descriptor");
+       }
        bi = bat_iterator(b);
        gi = bat_iterator(g);
        ocmp = BATatoms[b->ttype].atomCmp;
@@ -6143,32 +6199,31 @@ sql_@1rank_grp(bat *rid, bat *bid, bat *
        if (!ALIGNsynced(b, g)) {
                BBPreleaseref(b->batCacheid);
                BBPreleaseref(g->batCacheid);
-               throw(SQL, "sql.@1rank_grp", "bats not aligned");
+               throw(SQL, name, "bats not aligned");
        }
        if (!BATtordered(b)) {
                BBPreleaseref(b->batCacheid);
                BBPreleaseref(g->batCacheid);
-               throw(SQL, "sql.@1rank_grp", "bat not sorted");
+               throw(SQL, name, "bat not sorted");
        }
        r = BATnew(TYPE_oid, TYPE_int, BATcount(b));
        if (r == NULL){
                BBPreleaseref(b->batCacheid);
                BBPreleaseref(g->batCacheid);
-               throw(SQL, "sql.@1rank_grp", "cannot allocate result bat");
+               throw(SQL, name, "cannot allocate result bat");
        }
        BATloop(b, p, q) {
-               ptr on = BUNtail(bi, p);
-               ptr gn = BUNtail(gi, p);
-               int c = 0;
-
-               if ((c = ocmp(on, oc)) != 0) 
+               on = BUNtail(bi, p);
+               gn = BUNtail(gi, p);
+
+               if ((c = ocmp(on, oc)) != 0)
                        rank = nrank;
-               if (gcmp(gn, gc) != 0) 
-                       c = rank = nrank = 1;  
+               if (gcmp(gn, gc) != 0)
+                       c = rank = nrank = 1;
                oc = on;
                gc = gn;
                BUNins(r, BUNhead(bi,p), &rank, FALSE);
-               @2;
+               nrank += !dense || c;
        }
        BBPunfix(b->batCacheid);
        BBPunfix(g->batCacheid);
@@ -6176,20 +6231,21 @@ sql_@1rank_grp(bat *rid, bat *bid, bat *
        return MAL_SUCCEED;
 }
 
-str
-sql_@1rank(bat *rid, bat *bid)
-{ 
+static str
+do_sql_rank(bat *rid, bat *bid, int nrank, int dense, const char *name)
+{
        BAT *r, *b;
        BATiter bi;
        int (*cmp)(const void *, const void *);
-       ptr cur;
+       const void *cur, *n;
        BUN p, q;
-       int rank = 1, nrank = @3;
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to