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;
-------------------------------------------------------------------------
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-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins