You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by pr...@apache.org on 2014/04/02 02:21:35 UTC

[16/16] git commit: Found an error in the aggregate functions where the argument was overwriting the saved value.

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/fcb02411
Tree: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/tree/fcb02411
Diff: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/diff/fcb02411

Branch: refs/heads/prestonc/hash_join
Commit: fcb024115c382047dfd8cdce399e517298dac5c1
Parents: 6aad81b
Author: Preston Carman <pr...@apache.org>
Authored: Tue Apr 1 17:10:34 2014 -0700
Committer: Preston Carman <pr...@apache.org>
Committed: Tue Apr 1 17:10:34 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/fcb02411/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/fcb02411/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/fcb02411/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);
                 }