[Monetdb-developers] [Monetdb-checkins] MonetDB4/src/modules/plain bat_arith.mx, MonetDB_4-22, 1.4.2.2, 1.4.2.3

Stefan Manegold Stefan.Manegold at cwi.nl
Tue Feb 12 00:38:18 CET 2008


my below fixes in

	MonetDB4/src/modules/plain/bat_arith.mx

would need to be propagated / applied to

	MonetDB5/src/modules/kernel/batcalc.mx

too, but a simple diff|patch does not work, and I haven't found time to do
it by hand, yet, sorry ...

Stefan

On Sun, Feb 10, 2008 at 10:46:53PM +0000, Stefan Manegold wrote:
> Update of /cvsroot/monetdb/MonetDB4/src/modules/plain
> In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv13856
> 
> Modified Files:
>       Tag: MonetDB_4-22
> 	bat_arith.mx 
> Log Message:
> 
> fixed bug
> [ 1890131 ] PF: property error: incorrectly marked sorted!
> http://sourceforge.net/tracker/index.php?func=detail&aid=1890131&group_id=56967&atid=482468
> 
> fixed sortedness propagation for "const [op] BAT" & "BAT [op] const",
> in particular three cases:
> - substracting a BAT from a constant
>   yields a result with the input's sort order reversed
> - dividing a BAT by a negative constant
>   yields a result with the input's sort order reversed
> - for modulo (%) (also on) float & double
>   we cannot predict any result order
> 
> 
> Index: bat_arith.mx
> ===================================================================
> RCS file: /cvsroot/monetdb/MonetDB4/src/modules/plain/bat_arith.mx,v
> retrieving revision 1.4.2.2
> retrieving revision 1.4.2.3
> diff -u -d -r1.4.2.2 -r1.4.2.3
> --- bat_arith.mx	8 Feb 2008 15:02:14 -0000	1.4.2.2
> +++ bat_arith.mx	10 Feb 2008 22:46:51 -0000	1.4.2.3
> @@ -57,42 +57,42 @@
>  .END bat_arith;
>  
>  @= operations
> -@:@1_operation(bte,+,add,,0,2)@
> -@:@1_operation(bte,-,sub,,0,2)@
> -@:@1_operation(bte,*,mul,1,0,3)@
> -@:@1_operation(bte,/,div,1,1,1)@
> +@:@1_operation(bte,+,add,,0,(1|2))@
> +@:@1_operation(bte,-,sub,,0,(1|8))@
> +@:@1_operation(bte,*,mul,1,0,(16|32))@
> +@:@1_operation(bte,/,div,1,1,16)@
>  @:@1_operation(bte,%,mod,1,1,0)@
> -@:@1_operation(sht,+,add,,0,2)@
> -@:@1_operation(sht,-,sub,,0,2)@
> -@:@1_operation(sht,*,mul,1,0,3)@
> -@:@1_operation(sht,/,div,1,1,1)@
> +@:@1_operation(sht,+,add,,0,(1|2))@
> +@:@1_operation(sht,-,sub,,0,(1|8))@
> +@:@1_operation(sht,*,mul,1,0,(16|32))@
> +@:@1_operation(sht,/,div,1,1,16)@
>  @:@1_operation(sht,%,mod,1,1,0)@
> -@:@1_operation(int,+,add,,0,2)@
> -@:@1_operation(int,-,sub,,0,2)@
> -@:@1_operation(int,*,mul,1,0,3)@
> -@:@1_operation(int,/,div,1,1,1)@
> +@:@1_operation(int,+,add,,0,(1|2))@
> +@:@1_operation(int,-,sub,,0,(1|8))@
> +@:@1_operation(int,*,mul,1,0,(16|32))@
> +@:@1_operation(int,/,div,1,1,16)@
>  @:@1_operation(int,%,mod,1,1,0)@
> -@:@1_operation(wrd,+,add,,0,2)@
> -@:@1_operation(wrd,-,sub,,0,2)@
> -@:@1_operation(wrd,*,mul,1,0,3)@
> -@:@1_operation(wrd,/,div,1,1,1)@
> +@:@1_operation(wrd,+,add,,0,(1|2))@
> +@:@1_operation(wrd,-,sub,,0,(1|8))@
> +@:@1_operation(wrd,*,mul,1,0,(16|32))@
> +@:@1_operation(wrd,/,div,1,1,16)@
>  @:@1_operation(wrd,%,mod,1,1,0)@
> -@:@1_operation(lng,+,add,,0,2)@
> -@:@1_operation(lng,-,sub,,0,2)@
> -@:@1_operation(lng,*,mul,1,0,3)@
> -@:@1_operation(lng,/,div,1,1,1)@
> +@:@1_operation(lng,+,add,,0,(1|2))@
> +@:@1_operation(lng,-,sub,,0,(1|8))@
> +@:@1_operation(lng,*,mul,1,0,(16|32))@
> +@:@1_operation(lng,/,div,1,1,16)@
>  @:@1_operation(lng,%,mod,1,1,0)@
> -@:@1_operation(flt,+,add,,0,2)@
> -@:@1_operation(flt,-,sub,,0,2)@
> -@:@1_operation(flt,*,mul,1,0,3)@
> -@:@1_operation(flt,/,div,1,1,1)@
> -@:@1_operation(dbl,+,add,,0,2)@
> -@:@1_operation(dbl,-,sub,,0,2)@
> -@:@1_operation(dbl,*,mul,1,0,3)@
> -@:@1_operation(dbl,/,div,1,1,1)@
> +@:@1_operation(flt,+,add,,0,(1|2))@
> +@:@1_operation(flt,-,sub,,0,(1|8))@
> +@:@1_operation(flt,*,mul,1,0,(16|32))@
> +@:@1_operation(flt,/,div,1,1,16)@
> +@:@1_operation(dbl,+,add,,0,(1|2))@
> +@:@1_operation(dbl,-,sub,,0,(1|8))@
> +@:@1_operation(dbl,*,mul,1,0,(16|32))@
> +@:@1_operation(dbl,/,div,1,1,16)@
>  @:@1_redefine_OP()@
> -@:@1_operation(flt,%,mod,1,1,1,%)@
> -@:@1_operation(dbl,%,mod,1,1,1,%)@
> +@:@1_operation(flt,%,mod,1,1,0,%)@
> +@:@1_operation(dbl,%,mod,1,1,0,%)@
>  
>  @* Implementation
>  @c
> @@ -108,9 +108,13 @@
>  	@3:	add, sub, mul, div, mod basic arithmetic operator name
>  	@4:	not used
>  	@5:		0 / 1		disable/enable division by zero check
> -	@6:		0 / 1 / 2	disable/enable sorting propagation
> -					1 propagate on bat,const
> -					2 propagate also on const,bat
> +	@6:		(bit pattern)	disable/enable sorting propagation
> +					 1 propagate as-is on bat,const
> +					 2 propagate as-is on const,bat
> +					 4 propagate reverted on bat,const (not required/used!)
> +					 8 propagate reverted on const,bat
> +					16 propagate as-is / reverted on bat,const if const >=0 / <0
> +					32 propagate as-is / reverted on const,bat if const >=0 / <0
>  */
>  @= c_operation
>  int
> @@ -201,7 +205,6 @@
>  	if (bn == NULL)
>  		 return GDK_FAIL;
>  	BATseqbase(bn,b->hseqbase);
> -	bn->tsorted = 0;
>  	bq = (@1*)Tloc(b,BUNlast(b));
>  	bp = (@1*)Tloc(b,BUNfirst(b));
>  	s = bnp = (@1*)Tloc(bn,BUNlast(bn));
> @@ -225,13 +228,19 @@
>  	BATsetcount(bn, bnp-s);
>  	if (!bn->batDirty) bn->batDirty = TRUE;
>  
> -	if (@6 == 2) 
> +	if (@6 & 2) {
>  		bn->tsorted = BATtordered(b);
> -	if (@6 == 3) { 
> -		if (*v > 0)
> +	} else
> +	if (@6 & 8) {
> +		bn->tsorted = REVERT_SORTED(BATtordered(b));
> +	} else
> +	if (@6 & 32) { 
> +		if (*v >= 0)
>  			bn->tsorted = BATtordered(b);
>  		else
>  			bn->tsorted = REVERT_SORTED(BATtordered(b));
> +	} else {
> +		bn->tsorted = 0;
>  	}
>  
>  	*ret = bn;
> @@ -264,15 +273,20 @@
>  	}
>  	if (!b->batDirty) b->batDirty = TRUE;
>  
> -	if (@6 == 2) 
> +	if (@6 & 2) {
>  		b->tsorted = BATtordered(b);
> -	if (@6 == 3) { 
> -		if (*v > 0)
> +	} else
> +	if (@6 & 8) {
> +		b->tsorted = REVERT_SORTED(BATtordered(b));
> +	} else
> +	if (@6 & 32) { 
> +		if (*v >= 0)
>  			b->tsorted = BATtordered(b);
>  		else
>  			b->tsorted = REVERT_SORTED(BATtordered(b));
> -	} else 
> +	} else {
>  		b->tsorted = 0;
> +	}
>  
>  	BBPfix(b->batCacheid);
>  	*ret = b;
> @@ -294,7 +308,6 @@
>  	if( bn == NULL)
>  		return GDK_FAIL;
>  	BATseqbase(bn,b->hseqbase);
> -	bn->tsorted = 0;
>  	bq = (@1*)Tloc(b,BUNlast(b));
>  	bp = (@1*)Tloc(b,BUNfirst(b));
>  	s = bnp = (@1*)Tloc(bn,BUNlast(bn));
> @@ -317,14 +330,21 @@
>  	}
>  	BATsetcount(bn, bnp-s);
>  	if (!bn->batDirty) bn->batDirty = TRUE;
> -	if (@6 == 2) 
> +
> +	if (@6 & 1) {
>  		bn->tsorted = BATtordered(b);
> -	if (@6 == 3) { 
> -		if (*v > 0)
> +	} else
> +	if (@6 & 4) {
> +		bn->tsorted = REVERT_SORTED(BATtordered(b));
> +	} else
> +	if (@6 & 16) { 
> +		if (*v >= 0)
>  			bn->tsorted = BATtordered(b);
>  		else
>  			bn->tsorted = REVERT_SORTED(BATtordered(b));
> -	} 
> +	} else {
> +		bn->tsorted = 0;
> +	}
>  
>  	*ret = bn;
>  	return GDK_SUCCEED;
> @@ -356,15 +376,21 @@
>  		}
>  	}
>  	if (!b->batDirty) b->batDirty = TRUE;
> -	if (@6 == 2) 
> +
> +	if (@6 & 1) {
>  		b->tsorted = BATtordered(b);
> -	if (@6 == 3) { 
> -		if (*v > 0)
> +	} else
> +	if (@6 & 4) {
> +		b->tsorted = REVERT_SORTED(BATtordered(b));
> +	} else
> +	if (@6 & 16) { 
> +		if (*v >= 0)
>  			b->tsorted = BATtordered(b);
>  		else
>  			b->tsorted = REVERT_SORTED(BATtordered(b));
> -	} else
> +	} else {
>  		b->tsorted = 0;
> +	}
>  
>  	BBPfix(b->batCacheid);
>  	*ret = b;

-- 
| Dr. Stefan Manegold | mailto:Stefan.Manegold at cwi.nl |
| CWI,  P.O.Box 94079 | http://www.cwi.nl/~manegold/  |
| 1090 GB Amsterdam   | Tel.: +31 (20) 592-4212       |
| The Netherlands     | Fax : +31 (20) 592-4312       |




More information about the developers-list mailing list