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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list