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