Just wondering ... (and trying to learn): On Wed, Jul 18, 2012 at 10:41:04AM +0200, Martin Kersten wrote: > Changeset: 29b4294d4bea for MonetDB > URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=29b4294d4bea > Modified Files: > monetdb5/modules/kernel/batmtime.mx > Branch: default > Log Message: > > Partial de-mx batmtime > Rest should be taken care of by shell scripting > > > diffs (truncated from 316 to 300 lines): > > diff --git a/monetdb5/modules/kernel/batmtime.mx > b/monetdb5/modules/kernel/batmtime.mx > --- a/monetdb5/modules/kernel/batmtime.mx > +++ b/monetdb5/modules/kernel/batmtime.mx > @@ -30,28 +30,25 @@ All Rights Reserved. > * In line with the batcalc module, we assume that > * if two bat operands are provided that they are already > * aligned on the head. Moreover, the head of the BATs > - * are limited to :void, which can be cheaply realized using > + * are limited to :oid, which can be cheaply realized using > * the GRPsplit operation. > */ > @= compareOp > command batcalc.@2( l:bat[:oid,:@1], r:bat[:oid,:@1]) :bat[:oid,:bit] > -address MTIMEbat_@1_@3; > - > -command batcalc.@2( l:bat[:void,:@1], r:bat[:void,:@1]) :bat[:void,:bit] > address MTIMEbat_@1_@3 > comment "Compare a bat of @1 against each other"; > command batcalc.@2( l:bat[:oid,:@1], r:@1) :bat[:oid,:bit] > address MTIMEbat_@1_@3_cst; > -command batcalc.@2( l:bat[:void,:@1], r:@1) :bat[:void,:bit] > +command batcalc.@2(r:@1, l:bat[:oid,:@1]) :bat[:oid,:bit]
Is the above signature change (swapping left & right operand) intended? If so, what is the reason for it? > address MTIMEbat_@1_cst_@3 > comment "Compare a bat of @1 against a singleton"; > > -command batcalc.@2(a:bat[:void,:bit], l:bat[:void,:@1], r:bat[:void,:@1]) > :bat[:void,:bit] > +command batcalc.@2(a:bat[:oid,:bit], l:bat[:oid,:@1], r:bat[:oid,:@1]) > :bat[:oid,:bit] > address MTIMEaccum_@1_@3 > comment "Compare a bat of @1 against each other"; > -command batcalc.@2(a:bat[:void,:bit], l:bat[:oid,:@1], r:@1) :bat[:oid,:bit] > +command batcalc.@2(a:bat[:oid,:bit], l:bat[:oid,:@1], r:@1) :bat[:oid,:bit] > address MTIMEaccum_@1_@3_cst; > -command batcalc.@2(a:bat[:void,:bit], l:bat[:void,:@1], r:@1) > :bat[:void,:bit] > +command batcalc.@2(a:bat[:oid,:bit], r:@1, l:bat[:oid,:@1]) :bat[:oid,:bit] Is the above signature change (swapping left & right operand) intended? If so, what is the reason for it? > address MTIMEaccum_@1_cst_@3 > comment "Compare a bat of @1 against a singleton"; > > @@ -64,24 +61,35 @@ comment "Compare a bat of @1 against a s > @:compareOp(@1,>,GT)@ > @:compareOp(@1,>=,GE)@ > > -@= unaryISNIL > - command batcalc.isnil(b:bat[:any_1,:@1]):bat[:any_1,:bit] > - address MTIMEunaryISNIL > - comment "Unary check for nil over the tail of the bat"; > - > - command batcalc.isnil(b:bat[:void,:@1]):bat[:oid,:bit] > - address MTIMEunaryISNIL > - comment "Unary check for nil over the tail of the bat"; > - > -@ > @mal > @:compareGrp(date)@ > @:compareGrp(daytime)@ > @:compareGrp(timestamp)@ > > -@:unaryISNIL(date)@ > -@:unaryISNIL(daytime)@ > -@:unaryISNIL(timestamp)@ > +command batcalc.isnil(b:bat[:any_1,:date]):bat[:any_1,:bit] > +address MTIMEunaryISNIL > +comment "Unary check for nil over the tail of the bat"; > + > +command batcalc.isnil(b:bat[:oid,:date]):bat[:oid,:bit] > +address MTIMEunaryISNIL > +comment "Unary check for nil over the tail of the bat"; > + > +command batcalc.isnil(b:bat[:any_1,:daytime]):bat[:any_1,:bit] > +address MTIMEunaryISNIL > +comment "Unary check for nil over the tail of the bat"; > + > +command batcalc.isnil(b:bat[:oid,:daytime]):bat[:oid,:bit] > +address MTIMEunaryISNIL > +comment "Unary check for nil over the tail of the bat"; > + > +command batcalc.isnil(b:bat[:any_1,:timestamp]):bat[:any_1,:bit] > +address MTIMEunaryISNIL > +comment "Unary check for nil over the tail of the bat"; > + > +command batcalc.isnil(b:bat[:oid,:timestamp]):bat[:oid,:bit] > +address MTIMEunaryISNIL > +comment "Unary check for nil over the tail of the bat"; I see a pattern of three pairs of signatures. What is the difference between, say, command batcalc.isnil(b:bat[:any_1,:date]):bat[:any_1,:bit] and command batcalc.isnil(b:bat[:oid,:date]):bat[:oid,:bit] ? Isn't the latter fully covered by the former? Thanks! Stefan ps: I not study the remainder, yet ... > > @h > /* > @@ -112,9 +120,6 @@ comment "Compare a bat of @1 against a s > * head column. This is not checked and may be mis-used to deploy the > * implementation for shifted window arithmetic as well. > */ > -@= chkSize > - if( BATcount(@1) != BATcount(@2) ) > - throw(MAL, "batcalc.@3", ILLEGAL_ARGUMENT " Requires bats of > identical size"); > > @= implDef > batmtime_export str MTIMEbat_@1_@2(int *ret, int *l, int *r); > @@ -124,68 +129,18 @@ batmtime_export str MTIMEaccum_@1_@2(int > batmtime_export str MTIMEaccum_@1_@2_cst(int *ret, int *r, int *l, @1 *cst); > batmtime_export str MTIMEaccum_@1_cst_@2(int *ret, int *r, @1 *cst, int *l); > > -@ > - * @- Comparison operator implementation for temporal objects > - * The structure of this code is copied from the arithmetic scheme. > - * @- > -@= voidresultBAT > - bn = BATnew(TYPE_void, @1, BATcount(b)); > - BATseqbase(bn, b->hseqbase); > - if (bn == NULL) { > - throw(MAL, @2, MAL_MALLOC_FAIL); > - } > - bn->hsorted = b->hsorted; > - bn->hrevsorted = b->hrevsorted; > - bn->tsorted = b->tsorted; > - bn->trevsorted = b->trevsorted; > - bn->H->nonil = 1; > +@c > +#define resultBAT(Type,Error)\ > + bn = BATnew(TYPE_void, Type, BATcount(b));\ > + BATseqbase(bn, b->hseqbase);\ > + if (bn == NULL) \ > + throw(MAL, Error, MAL_MALLOC_FAIL);\ > + bn->hsorted = b->hsorted;\ > + bn->hrevsorted = b->hrevsorted;\ > + bn->tsorted = b->tsorted;\ > + bn->trevsorted = b->trevsorted;\ > + bn->H->nonil = 1;\ > bn->T->nonil = b->T->nonil; > -@= unarybaselineCode > -str MTIMEbat_@1_@2_@3(int *ret, int *l) > -{ > - BAT *bn, *b; > - @1 *p, *q, *t; > - bit *o; > - > - if ((b = BATdescriptor(*l)) == NULL) > - throw(MAL, "batcalc.@2", RUNTIME_OBJECT_MISSING); > - @:voidresultBAT(@3,"batcalc.@2")@ > - > - o = (bit*)Tloc(bn,BUNfirst(bn)); > - p = (@1*)Tloc(b,BUNfirst(b)); > - q = (@1*)Tloc(b,BUNlast(b)); > - t = (@1*)Tloc(right,BUNfirst(right)); > - > - BATaccessBegin(b, USE_TAIL, MMAP_SEQUENTIAL); > - BATaccessBegin(right, USE_TAIL, MMAP_SEQUENTIAL); > - if (b->T->nonil) > - for (;p<q; p++, t++, o++) > - @1@2(o,p,t); > - else > - for (;p<q; p++, t++, o++) > - if ( @1_isnil(*p)) > - *o = bit_nil; > - else @1@2(o,p,t); > - > - BATaccessEnd(right, USE_TAIL, MMAP_SEQUENTIAL); > - BATaccessEnd(b, USE_TAIL, MMAP_SEQUENTIAL); > - if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); > - > - BATsetcount(bn, BATcount(b)); > - if (b->htype != bn->htype) { > - BAT *r = VIEWcreate(b,bn); > - > - BBPreleaseref(bn->batCacheid); > - bn = r; > - } > - > - bn->tsorted = 0; > - bn->trevsorted = 0; > - BATkey(BATmirror(bn),FALSE); > - BBPkeepref(*ret= bn->batCacheid); > - BBPreleaseref(b->batCacheid); > - return MAL_SUCCEED; > -} > > @= baselineCode > str MTIMEbat_@1_@2(int *ret, int *l, int *r) > @@ -201,8 +156,9 @@ str MTIMEbat_@1_@2(int *ret, int *l, int > BBPreleaseref(b->batCacheid); > throw(MAL, "batcalc.@2", RUNTIME_OBJECT_MISSING); > } > - @:chkSize(b,right,batcalc.@2)@ > - @:voidresultBAT(TYPE_bit,"batcalc.@2")@ > + if( BATcount(b) != BATcount(right) ) > + throw(MAL, "batcalc.@2", ILLEGAL_ARGUMENT " Requires bats of > identical size"); > + resultBAT(TYPE_bit,"batcalc.@2") > > o = (bit*)Tloc(bn,BUNfirst(bn)); > p = (@1*)Tloc(b,BUNfirst(b)); > @@ -270,8 +226,10 @@ str MTIMEaccum_@1_@2(int *ret, int *d, i > BBPreleaseref(b->batCacheid);BBPreleaseref(right->batCacheid); > throw(MAL, "batcalc.@2", RUNTIME_OBJECT_MISSING); > } > - @:chkSize(bn,b,batcalc.@2)@ > - @:chkSize(bn,right,batcalc.@2)@ > + if( BATcount(bn) != BATcount(b) ) > + throw(MAL, "batcalc.@2", ILLEGAL_ARGUMENT " Requires bats of > identical size"); > + if( BATcount(bn) != BATcount(right) ) > + throw(MAL, "batcalc.@2", ILLEGAL_ARGUMENT " Requires bats of > identical size"); > > o = (bit*)Tloc(bn,BUNfirst(bn)); > p = (@1*)Tloc(b,BUNfirst(b)); > @@ -322,7 +280,7 @@ str MTIMEbat_@1_@2_cst(int *ret, int *l, > > if ((b = BATdescriptor(*l)) == NULL) > throw(MAL, "batcalc.@2", RUNTIME_OBJECT_MISSING); > - @:voidresultBAT(TYPE_bit,"batcalc.@2")@ > + resultBAT(TYPE_bit,"batcalc.@2") > BATsetcount(bn, BATcount(b)); > if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); > > @@ -371,7 +329,7 @@ str MTIMEbat_@1_cst_@2(int *ret, @1 *cst > > if ((b = BATdescriptor(*l)) == NULL) > throw(MAL, "batcalc.@2", RUNTIME_OBJECT_MISSING); > - @:voidresultBAT(TYPE_bit,"batcalc.@2")@ > + resultBAT(TYPE_bit,"batcalc.@2") > BATsetcount(bn, BATcount(b)); > > o = (bit*)Tloc(bn,BUNfirst(bn)); > @@ -423,7 +381,8 @@ str MTIMEaccum_@1_@2_cst(int *ret, int * > @4; > throw(MAL, "batcalc.@2", RUNTIME_OBJECT_MISSING); > } > - @:chkSize(bn,b,batcalc.@2)@ > + if( BATcount(bn) != BATcount(b) ) > + throw(MAL, "batcalc.@2", ILLEGAL_ARGUMENT " Requires bats of > identical size"); > > o = (bit*)Tloc(bn,BUNfirst(bn)); > p = (@1*)Tloc(b,BUNfirst(b)); > @@ -464,7 +423,8 @@ str MTIMEaccum_@1_cst_@2(int *ret, int * > BBPreleaseref(bn->batCacheid); > throw(MAL, "batcalc.@2", RUNTIME_OBJECT_MISSING); > } > - @:chkSize(bn,b,batcalc.@2)@ > + if( BATcount(bn) != BATcount(b) ) > + throw(MAL, "batcalc.@2", ILLEGAL_ARGUMENT " Requires bats of > identical size"); > > o = (bit*)Tloc(bn,BUNfirst(bn)); > p = (@1*)Tloc(b,BUNfirst(b)); > @@ -493,9 +453,6 @@ str MTIMEaccum_@1_cst_@2(int *ret, int * > return MAL_SUCCEED; > } > > -@ > - * @- > - * The implementation section. > @= implCmpGrpDef > @:implDef(@1,EQ)@ > @:implDef(@1,NEQ)@ > @@ -532,20 +489,6 @@ batmtime_export str MTIMEunaryISNIL(int > @:baselineCode(timestamp,GT)@ > @:baselineCode(timestamp,GE)@ > > -@= accumUnaryISNIL > -{ > - @1 *p = (@1*)Tloc(b,BUNfirst(b)); > - @1 *q = (@1*)Tloc(b,BUNlast(b)); > - BATaccessBegin(b, USE_TAIL, MMAP_SEQUENTIAL); > - if (b->T->nonil){ > - for(; p<q; p++, o++ ) > - *o = FALSE; > - } else > - for(; p<q; p++, o++ ) > - *o = @1_isnil(*p); > - BATaccessEnd(b, USE_TAIL, MMAP_SEQUENTIAL); > -} > -@ > @c > str MTIMEunaryISNIL(int *ret, int *bid) > { > @@ -554,18 +497,41 @@ str MTIMEunaryISNIL(int *ret, int *bid) > > if ((b = BATdescriptor(*bid)) == NULL) > throw(MAL, "batcalc.isnil", RUNTIME_OBJECT_MISSING); > - @:voidresultBAT(TYPE_bit,"batcalc.isnil")@ > + resultBAT(TYPE_bit,"batcalc.isnil") > > o = (bit*)Tloc(bn,BUNfirst(bn)); > + BATaccessBegin(b, USE_TAIL, MMAP_SEQUENTIAL); > if ( BATttype(b) == TYPE_date) { > - @:accumUnaryISNIL(date)@ > + date *p = (date*)Tloc(b,BUNfirst(b)); > + date *q = (date*)Tloc(b,BUNlast(b)); > + if (b->T->nonil){ > + for(; p<q; p++, o++ ) > + *o = FALSE; > + } else > + for(; p<q; p++, o++ ) > + *o = date_isnil(*p); > } else > if ( BATttype(b) == TYPE_daytime) { > - @:accumUnaryISNIL(daytime)@ > + daytime *p = (daytime*)Tloc(b,BUNfirst(b)); > + daytime *q = (daytime*)Tloc(b,BUNlast(b)); > + if (b->T->nonil){ > + for(; p<q; p++, o++ ) > + *o = FALSE; > + } else > + for(; p<q; p++, o++ ) > + *o = daytime_isnil(*p); > _______________________________________________ > Checkin-list mailing list > checkin-l...@monetdb.org > http://mail.monetdb.org/mailman/listinfo/checkin-list > > -- | Stefan.Manegold @ CWI.nl | DB Architectures (INS1) | | http://CWI.nl/~manegold/ | Science Park 123 (L321) | | Tel.: +31 (0)20 592-4212 | 1098 XG Amsterdam (NL) | ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Monetdb-developers mailing list Monetdb-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/monetdb-developers