Re: [Monetdb-developers] MonetDB: default - Partial de-mx batmtime
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
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
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
T->nonil){ + for(; phttp://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) |
On 7/18/12 10:53 AM, Stefan Manegold wrote:
Just wondering ... (and trying to learn):
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? signatures indicated different code paths, most likely never used. -cst-Type versus -Type-cst
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]
On Wed, Jul 18, 2012 at 11:00:59AM +0200, Martin Kersten wrote:
On 7/18/12 10:53 AM, Stefan Manegold wrote:
Just wondering ... (and trying to learn):
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? signatures indicated different code paths, most likely never used. -cst-Type versus -Type-cst
I see. Thanks! What about the (possibly redundant?) isnil-signatures? Stefan
address MTIMEbat_@1_cst_@3 comment "Compare a bat of @1 against a singleton";
-- | 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) |
participants (2)
-
Martin Kersten
-
Stefan Manegold