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:[EMAIL PROTECTED] |
| 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       |

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-developers

Reply via email to