Found an error in the aggregate functions where the argument was overwriting 
the saved value.


Project: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/commit/91e801d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/tree/91e801d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/diff/91e801d1

Branch: refs/heads/prestonc/hash_join
Commit: 91e801d17cd09f4c5bdedebe60f6924816eff918
Parents: deabbf7
Author: Preston Carman <[email protected]>
Authored: Tue Apr 1 17:10:34 2014 -0700
Committer: Preston Carman <[email protected]>
Committed: Tue Apr 1 20:56:26 2014 -0700

----------------------------------------------------------------------
 .../AvgLocalAggregateEvaluatorFactory.java      | 23 +++++++++++-------
 .../FnAvgAggregateEvaluatorFactory.java         | 24 +++++++++++++------
 .../FnSumAggregateEvaluatorFactory.java         | 25 ++++++++++++++------
 3 files changed, 50 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/91e801d1/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgLocalAggregateEvaluatorFactory.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgLocalAggregateEvaluatorFactory.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgLocalAggregateEvaluatorFactory.java
index 91657c6..45414dc 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgLocalAggregateEvaluatorFactory.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgLocalAggregateEvaluatorFactory.java
@@ -26,7 +26,6 @@ import org.apache.vxquery.datamodel.values.XDMConstants;
 import org.apache.vxquery.exceptions.ErrorCode;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.arithmetic.AddOperation;
-import org.apache.vxquery.runtime.functions.arithmetic.DivideOperation;
 import 
org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluator;
 import 
org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluatorFactory;
 import org.apache.vxquery.runtime.functions.util.FunctionHelper;
@@ -48,10 +47,12 @@ public class AvgLocalAggregateEvaluatorFactory extends 
AbstractTaggedValueArgume
     @Override
     protected IAggregateEvaluator createEvaluator(IScalarEvaluator[] args) 
throws AlgebricksException {
         final TaggedValuePointable tvpCount = (TaggedValuePointable) 
TaggedValuePointable.FACTORY.createPointable();
-        final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
+        final ArrayBackedValueStorage abvsCount = new 
ArrayBackedValueStorage();
+        final DataOutput dOutCount = abvsCount.getDataOutput();
+        final ArrayBackedValueStorage abvsSum = new ArrayBackedValueStorage();
+        final DataOutput dOutSum = abvsSum.getDataOutput();
         final ArrayBackedValueStorage abvsSeq = new ArrayBackedValueStorage();
         final SequenceBuilder sb = new SequenceBuilder();
-        final DataOutput dOut = abvs.getDataOutput();
         final AddOperation aOp = new AddOperation();
 
         return new AbstractTaggedValueArgumentAggregateEvaluator(args) {
@@ -70,10 +71,10 @@ public class AvgLocalAggregateEvaluatorFactory extends 
AbstractTaggedValueArgume
                 } else {
                     // Set count as a TaggedValuePointable.
                     try {
-                        abvs.reset();
-                        dOut.write(ValueTag.XS_INTEGER_TAG);
-                        dOut.writeLong(count);
-                        tvpCount.set(abvs);
+                        abvsCount.reset();
+                        dOutCount.write(ValueTag.XS_INTEGER_TAG);
+                        dOutCount.writeLong(count);
+                        tvpCount.set(abvsCount);
 
                         // Save intermediate result.
                         abvsSeq.reset();
@@ -93,7 +94,13 @@ public class AvgLocalAggregateEvaluatorFactory extends 
AbstractTaggedValueArgume
                 TaggedValuePointable tvp = args[0];
                 if (count == 0) {
                     // Init.
-                    tvpSum.set(tvp);
+                    try {
+                        abvsSum.reset();
+                        dOutSum.write(tvp.getByteArray(), 
tvp.getStartOffset(), tvp.getLength());
+                        tvpSum.set(abvsSum);
+                    } catch (IOException e) {
+                        throw new SystemException(ErrorCode.SYSE0001, 
e.toString());
+                    }
                 } else {
                     FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, 
tvpSum);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/91e801d1/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java
index 9417ae2..ecde53b 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java
@@ -17,10 +17,12 @@
 package org.apache.vxquery.runtime.functions.aggregate;
 
 import java.io.DataOutput;
+import java.io.IOException;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.datamodel.values.XDMConstants;
+import org.apache.vxquery.exceptions.ErrorCode;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.arithmetic.AddOperation;
 import org.apache.vxquery.runtime.functions.arithmetic.DivideOperation;
@@ -45,8 +47,10 @@ public class FnAvgAggregateEvaluatorFactory extends 
AbstractTaggedValueArgumentA
     @Override
     protected IAggregateEvaluator createEvaluator(IScalarEvaluator[] args) 
throws AlgebricksException {
         final TaggedValuePointable tvpCount = (TaggedValuePointable) 
TaggedValuePointable.FACTORY.createPointable();
-        final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
-        final DataOutput dOut = abvs.getDataOutput();
+        final ArrayBackedValueStorage abvsSum = new ArrayBackedValueStorage();
+        final DataOutput dOutSum = abvsSum.getDataOutput();
+        final ArrayBackedValueStorage abvsCount = new 
ArrayBackedValueStorage();
+        final DataOutput dOutCount = abvsCount.getDataOutput();
         final AddOperation aOp = new AddOperation();
         final DivideOperation aOpDivide = new DivideOperation();
 
@@ -66,10 +70,10 @@ public class FnAvgAggregateEvaluatorFactory extends 
AbstractTaggedValueArgumentA
                 } else {
                     // Set count as a TaggedValuePointable.
                     try {
-                        abvs.reset();
-                        dOut.write(ValueTag.XS_INTEGER_TAG);
-                        dOut.writeLong(count);
-                        tvpCount.set(abvs);
+                        abvsCount.reset();
+                        dOutCount.write(ValueTag.XS_INTEGER_TAG);
+                        dOutCount.writeLong(count);
+                        tvpCount.set(abvsCount);
 
                         FunctionHelper.arithmeticOperation(aOpDivide, dCtx, 
tvpSum, tvpCount, tvpSum);
                         result.set(tvpSum);
@@ -84,7 +88,13 @@ public class FnAvgAggregateEvaluatorFactory extends 
AbstractTaggedValueArgumentA
                 TaggedValuePointable tvp = args[0];
                 if (count == 0) {
                     // Init.
-                    tvpSum.set(tvp);
+                    try {
+                        abvsSum.reset();
+                        dOutSum.write(tvp.getByteArray(), 
tvp.getStartOffset(), tvp.getLength());
+                        tvpSum.set(abvsSum);
+                    } catch (IOException e) {
+                        throw new SystemException(ErrorCode.SYSE0001, 
e.toString());
+                    }
                 } else {
                     FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, 
tvpSum);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/91e801d1/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java
index cbdf4d4..8572a11 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java
@@ -17,9 +17,11 @@
 package org.apache.vxquery.runtime.functions.aggregate;
 
 import java.io.DataOutput;
+import java.io.IOException;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.ErrorCode;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.arithmetic.AddOperation;
 import 
org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluator;
@@ -42,8 +44,10 @@ public class FnSumAggregateEvaluatorFactory extends 
AbstractTaggedValueArgumentA
 
     @Override
     protected IAggregateEvaluator createEvaluator(IScalarEvaluator[] args) 
throws AlgebricksException {
-        final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
-        final DataOutput dOut = abvs.getDataOutput();
+        final ArrayBackedValueStorage abvsCount = new 
ArrayBackedValueStorage();
+        final DataOutput dOutCount = abvsCount.getDataOutput();
+        final ArrayBackedValueStorage abvsSum = new ArrayBackedValueStorage();
+        final DataOutput dOutSum = abvsSum.getDataOutput();
         final AddOperation aOp = new AddOperation();
 
         return new AbstractTaggedValueArgumentAggregateEvaluator(args) {
@@ -61,11 +65,12 @@ public class FnSumAggregateEvaluatorFactory extends 
AbstractTaggedValueArgumentA
                 if (count == 0) {
                     // No argument return an integer.
                     try {
-                        abvs.reset();
-                        dOut.write(ValueTag.XS_INTEGER_TAG);
-                        dOut.writeLong(0);
-                        result.set(abvs);
+                        abvsCount.reset();
+                        dOutCount.write(ValueTag.XS_INTEGER_TAG);
+                        dOutCount.writeLong(0);
+                        result.set(abvsCount);
                     } catch (Exception e) {
+                        
                         throw new AlgebricksException(e);
                     }
                 } else {
@@ -78,7 +83,13 @@ public class FnSumAggregateEvaluatorFactory extends 
AbstractTaggedValueArgumentA
                 TaggedValuePointable tvp = args[0];
                 if (count == 0) {
                     // Init.
-                    tvpSum.set(tvp);
+                    try {
+                        abvsSum.reset();
+                        dOutSum.write(tvp.getByteArray(), 
tvp.getStartOffset(), tvp.getLength());
+                        tvpSum.set(abvsSum);
+                    } catch (IOException e) {
+                        throw new SystemException(ErrorCode.SYSE0001, 
e.toString());
+                    }
                 } else {
                     FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, 
tvpSum);
                 }

Reply via email to