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