Moved the TypedPointables object improve memory management.
Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/79ad8733 Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/79ad8733 Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/79ad8733 Branch: refs/heads/site Commit: 79ad8733bfa13dd7e651b9e5285001b4070e8ee1 Parents: b5ce0a2 Author: Preston Carman <[email protected]> Authored: Tue Jun 17 16:10:18 2014 -0700 Committer: Preston Carman <[email protected]> Committed: Tue Jun 17 16:10:18 2014 -0700 ---------------------------------------------------------------------- ...AbstractMaxMinAggregateEvaluatorFactory.java | 5 +++- .../AbstractMaxMinScalarEvaluatorFactory.java | 5 +++- .../AvgGlobalAggregateEvaluatorFactory.java | 11 ++++--- .../AvgLocalAggregateEvaluatorFactory.java | 7 +++-- .../FnAvgAggregateEvaluatorFactory.java | 7 +++-- .../aggregate/FnAvgScalarEvaluatorFactory.java | 7 +++-- .../FnSumAggregateEvaluatorFactory.java | 5 +++- .../aggregate/FnSumScalarEvaluatorFactory.java | 5 +++- ...bstractArithmeticScalarEvaluatorFactory.java | 5 +++- ...ctValueComparisonScalarEvaluatorFactory.java | 4 +-- ...GeneralComparisonScalarEvaluatorFactory.java | 4 +-- .../node/IdFromNodeScalarEvaluatorFactory.java | 4 ++- .../LocalIdFromNodeScalarEvaluatorFactory.java | 4 ++- .../AbstractNumericScalarEvaluatorFactory.java | 2 +- ...tractNumericUnaryScalarEvaluatorFactory.java | 2 +- .../runtime/functions/util/FunctionHelper.java | 31 ++++++++------------ 16 files changed, 67 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java index 4943c9b..1278e63 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java @@ -21,6 +21,7 @@ import java.io.IOException; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.datamodel.values.XDMConstants; import org.apache.vxquery.exceptions.ErrorCode; @@ -49,6 +50,8 @@ public abstract class AbstractMaxMinAggregateEvaluatorFactory extends final AbstractValueComparisonOperation aOp = createValueComparisonOperation(); final TaggedValuePointable tvp2 = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); @@ -89,7 +92,7 @@ public abstract class AbstractMaxMinAggregateEvaluatorFactory extends if (count != 0) { tvp2.set(abvs.getByteArray(), abvs.getStartOffset(), abvs.getLength()); } - if (count == 0 || FunctionHelper.transformThenCompareMinMaxTaggedValues(aOp, tvp1, tvp2, dCtx)) { + if (count == 0 || FunctionHelper.transformThenCompareMinMaxTaggedValues(aOp, tvp1, tvp2, dCtx, tp1, tp2)) { try { abvs.reset(); dOut.write(tvp1.getByteArray(), tvp1.getStartOffset(), tvp1.getLength()); http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java index bf35f7e..5f91cd9 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java @@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.aggregate; import org.apache.vxquery.context.DynamicContext; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.datamodel.values.XDMConstants; import org.apache.vxquery.exceptions.SystemException; @@ -50,6 +51,8 @@ public abstract class AbstractMaxMinScalarEvaluatorFactory extends AbstractTagge final TaggedValuePointable tvpReturn = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); final TaggedValuePointable tvpNext = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); final VoidPointable p = (VoidPointable) VoidPointable.FACTORY.createPointable(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -69,7 +72,7 @@ public abstract class AbstractMaxMinScalarEvaluatorFactory extends AbstractTagge // Init. tvpReturn.set(tvpNext); } - if (FunctionHelper.transformThenCompareMinMaxTaggedValues(aOp, tvpNext, tvpReturn, dCtx)) { + if (FunctionHelper.transformThenCompareMinMaxTaggedValues(aOp, tvpNext, tvpReturn, dCtx, tp1, tp2)) { tvpReturn.set(tvpNext); } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgGlobalAggregateEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgGlobalAggregateEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgGlobalAggregateEvaluatorFactory.java index f674997..f784a13 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgGlobalAggregateEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AvgGlobalAggregateEvaluatorFactory.java @@ -20,6 +20,7 @@ import java.io.DataOutput; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.datamodel.values.XDMConstants; import org.apache.vxquery.exceptions.ErrorCode; @@ -56,7 +57,9 @@ public class AvgGlobalAggregateEvaluatorFactory extends AbstractTaggedValueArgum final LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable(); final SequencePointable seq = (SequencePointable) SequencePointable.FACTORY.createPointable(); final TaggedValuePointable tvpArg = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); - + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); + return new AbstractTaggedValueArgumentAggregateEvaluator(args) { TaggedValuePointable tvpSum = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); TaggedValuePointable tvpCount = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); @@ -90,7 +93,7 @@ public class AvgGlobalAggregateEvaluatorFactory extends AbstractTaggedValueArgum } else { // Set count as a TaggedValuePointable. try { - FunctionHelper.arithmeticOperation(aOpDivide, dCtx, tvpSum, tvpCount, tvpSum); + FunctionHelper.arithmeticOperation(aOpDivide, dCtx, tvpSum, tvpCount, tvpSum, tp1, tp2); result.set(tvpSum); } catch (Exception e) { throw new AlgebricksException(e); @@ -109,9 +112,9 @@ public class AvgGlobalAggregateEvaluatorFactory extends AbstractTaggedValueArgum return; } else if (seqLen == 2) { seq.getEntry(0, tvpArg); - FunctionHelper.arithmeticOperation(aOp, dCtx, tvpArg, tvpCount, tvpCount); + FunctionHelper.arithmeticOperation(aOp, dCtx, tvpArg, tvpCount, tvpCount, tp1, tp2); seq.getEntry(1, tvpArg); - FunctionHelper.arithmeticOperation(aOp, dCtx, tvpArg, tvpSum, tvpSum); + FunctionHelper.arithmeticOperation(aOp, dCtx, tvpArg, tvpSum, tvpSum, tp1, tp2); } else { throw new SystemException(ErrorCode.SYSE0001); } http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/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 baebb29..e325165 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 @@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.aggregate; import java.io.DataOutput; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.builders.sequence.SequenceBuilder; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.datamodel.values.XDMConstants; @@ -52,7 +53,9 @@ public class AvgLocalAggregateEvaluatorFactory extends AbstractTaggedValueArgume final ArrayBackedValueStorage abvsSeq = new ArrayBackedValueStorage(); final SequenceBuilder sb = new SequenceBuilder(); final AddOperation aOp = new AddOperation(); - + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); + return new AbstractTaggedValueArgumentAggregateEvaluator(args) { long count; TaggedValuePointable tvpSum = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); @@ -103,7 +106,7 @@ public class AvgLocalAggregateEvaluatorFactory extends AbstractTaggedValueArgume @Override protected void step(TaggedValuePointable[] args) throws SystemException { TaggedValuePointable tvp = args[0]; - FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, tvpSum); + FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, tvpSum, tp1, tp2); count++; } }; http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/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 c3fc544..e1e6204 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 @@ -20,6 +20,7 @@ import java.io.DataOutput; import java.io.IOException; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.datamodel.values.XDMConstants; import org.apache.vxquery.exceptions.ErrorCode; @@ -53,6 +54,8 @@ public class FnAvgAggregateEvaluatorFactory extends AbstractTaggedValueArgumentA final DataOutput dOutCount = abvsCount.getDataOutput(); final AddOperation aOp = new AddOperation(); final DivideOperation aOpDivide = new DivideOperation(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); return new AbstractTaggedValueArgumentAggregateEvaluator(args) { long count; @@ -80,7 +83,7 @@ public class FnAvgAggregateEvaluatorFactory extends AbstractTaggedValueArgumentA dOutCount.writeLong(count); tvpCount.set(abvsCount); - FunctionHelper.arithmeticOperation(aOpDivide, dCtx, tvpSum, tvpCount, tvpSum); + FunctionHelper.arithmeticOperation(aOpDivide, dCtx, tvpSum, tvpCount, tvpSum, tp1, tp2); result.set(tvpSum); } catch (Exception e) { throw new AlgebricksException(e); @@ -101,7 +104,7 @@ public class FnAvgAggregateEvaluatorFactory extends AbstractTaggedValueArgumentA throw new SystemException(ErrorCode.SYSE0001, e.toString()); } } else { - FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, tvpSum); + FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, tvpSum, new TypedPointables(), new TypedPointables()); } count++; } http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgScalarEvaluatorFactory.java index 7ee822c..e02f4e2 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgScalarEvaluatorFactory.java @@ -21,6 +21,7 @@ import java.io.DataOutput; import org.apache.vxquery.context.DynamicContext; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.datamodel.values.XDMConstants; import org.apache.vxquery.exceptions.ErrorCode; @@ -57,6 +58,8 @@ public class FnAvgScalarEvaluatorFactory extends AbstractTaggedValueArgumentScal final DataOutput dOut = abvs.getDataOutput(); final AddOperation aOp = new AddOperation(); final DivideOperation aOpDivide = new DivideOperation(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -75,7 +78,7 @@ public class FnAvgScalarEvaluatorFactory extends AbstractTaggedValueArgumentScal // Init. tvpSum.set(tvpNext); } else { - FunctionHelper.arithmeticOperation(aOp, dCtx, tvpNext, tvpSum, tvpSum); + FunctionHelper.arithmeticOperation(aOp, dCtx, tvpNext, tvpSum, tvpSum, tp1, tp2); } } @@ -89,7 +92,7 @@ public class FnAvgScalarEvaluatorFactory extends AbstractTaggedValueArgumentScal throw new SystemException(ErrorCode.SYSE0001, e); } - FunctionHelper.arithmeticOperation(aOpDivide, dCtx, tvpSum, tvpCount, tvpSum); + FunctionHelper.arithmeticOperation(aOpDivide, dCtx, tvpSum, tvpCount, tvpSum, tp1, tp2); result.set(tvpSum); } } else { http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/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 4049709..c9057ba 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 @@ -20,6 +20,7 @@ import java.io.DataOutput; import java.io.IOException; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.arithmetic.AddOperation; @@ -46,6 +47,8 @@ public class FnSumAggregateEvaluatorFactory extends AbstractTaggedValueArgumentA final ArrayBackedValueStorage abvsSum = new ArrayBackedValueStorage(); final DataOutput dOutSum = abvsSum.getDataOutput(); final AddOperation aOp = new AddOperation(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); return new AbstractTaggedValueArgumentAggregateEvaluator(args) { TaggedValuePointable tvpSum = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); @@ -77,7 +80,7 @@ public class FnSumAggregateEvaluatorFactory extends AbstractTaggedValueArgumentA @Override protected void step(TaggedValuePointable[] args) throws SystemException { TaggedValuePointable tvp = args[0]; - FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, tvpSum); + FunctionHelper.arithmeticOperation(aOp, dCtx, tvp, tvpSum, tvpSum, tp1, tp2); } }; } http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumScalarEvaluatorFactory.java index 7ad1b0f..0c82710 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumScalarEvaluatorFactory.java @@ -21,6 +21,7 @@ import java.io.DataOutput; import org.apache.vxquery.context.DynamicContext; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; @@ -55,6 +56,8 @@ public class FnSumScalarEvaluatorFactory extends AbstractTaggedValueArgumentScal final TaggedValuePointable tvpSum = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); final VoidPointable p = (VoidPointable) VoidPointable.FACTORY.createPointable(); final AddOperation aOp = new AddOperation(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -88,7 +91,7 @@ public class FnSumScalarEvaluatorFactory extends AbstractTaggedValueArgumentScal // Init. tvpSum.set(tvpNext); } else { - FunctionHelper.arithmeticOperation(aOp, dCtx, tvpNext, tvpSum, tvpSum); + FunctionHelper.arithmeticOperation(aOp, dCtx, tvpNext, tvpSum, tvpSum, tp1, tp2); } } result.set(tvpSum); http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java index 1555338..eafb048 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java @@ -20,6 +20,7 @@ package org.apache.vxquery.runtime.functions.arithmetic; import org.apache.vxquery.context.DynamicContext; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; @@ -47,6 +48,8 @@ public abstract class AbstractArithmeticScalarEvaluatorFactory extends final AbstractArithmeticOperation aOp = createArithmeticOperation(); final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable(); final DynamicContext dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -69,7 +72,7 @@ public abstract class AbstractArithmeticScalarEvaluatorFactory extends } throw new SystemException(ErrorCode.XPTY0004); } - FunctionHelper.arithmeticOperation(aOp, dCtx, tvp1, tvp2, result); + FunctionHelper.arithmeticOperation(aOp, dCtx, tvp1, tvp2, result, tp1, tp2); } }; } http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonScalarEvaluatorFactory.java index e49d1e6..a1ae69e 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonScalarEvaluatorFactory.java @@ -108,7 +108,7 @@ public abstract class AbstractValueComparisonScalarEvaluatorFactory extends tvp1new.set(tvp1); } else if (FunctionHelper.isDerivedFromInteger(tvp1.getTag())) { abvsInteger1.reset(); - FunctionHelper.getIntegerPointable(tvp1, dOutInteger1); + FunctionHelper.getIntegerPointable(tvp1, dOutInteger1, tp1); tvp1new.set(abvsInteger1.getByteArray(), abvsInteger1.getStartOffset(), LongPointable.TYPE_TRAITS.getFixedLength() + 1); } else { @@ -120,7 +120,7 @@ public abstract class AbstractValueComparisonScalarEvaluatorFactory extends tvp2new.set(tvp2); } else if (FunctionHelper.isDerivedFromInteger(tvp2.getTag())) { abvsInteger2.reset(); - FunctionHelper.getIntegerPointable(tvp2, dOutInteger2); + FunctionHelper.getIntegerPointable(tvp2, dOutInteger2, tp2); tvp2new.set(abvsInteger2.getByteArray(), abvsInteger2.getStartOffset(), LongPointable.TYPE_TRAITS.getFixedLength() + 1); } else { http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/general/AbstractGeneralComparisonScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/general/AbstractGeneralComparisonScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/general/AbstractGeneralComparisonScalarEvaluatorFactory.java index 9a41caa..446b445 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/general/AbstractGeneralComparisonScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/general/AbstractGeneralComparisonScalarEvaluatorFactory.java @@ -240,7 +240,7 @@ public abstract class AbstractGeneralComparisonScalarEvaluatorFactory extends if (!tagTransformed1) { tvpCompare1.set(tvpTransform1); if (FunctionHelper.isDerivedFromDouble(tvpCompare1.getTag())) { - FunctionHelper.getDoublePointable(tvpTransform1, dOutInner1); + FunctionHelper.getDoublePointable(tvpTransform1, dOutInner1, tp1); tvpCompare1.set(abvsInner1.getByteArray(), abvsInner1.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength() + 1); tagTransformed1 = true; @@ -249,7 +249,7 @@ public abstract class AbstractGeneralComparisonScalarEvaluatorFactory extends if (!tagTransformed2) { tvpCompare2.set(tvpTransform2); if (FunctionHelper.isDerivedFromDouble(tvpCompare2.getTag())) { - FunctionHelper.getDoublePointable(tvpTransform2, dOutInner2); + FunctionHelper.getDoublePointable(tvpTransform2, dOutInner2, tp2); tvpCompare2.set(abvsInner2.getByteArray(), abvsInner2.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength() + 1); tagTransformed2 = true; http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/IdFromNodeScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/IdFromNodeScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/IdFromNodeScalarEvaluatorFactory.java index ee99f62..b3b4d67 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/IdFromNodeScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/IdFromNodeScalarEvaluatorFactory.java @@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.node; import java.io.DataOutput; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.datamodel.values.XDMConstants; @@ -48,6 +49,7 @@ public class IdFromNodeScalarEvaluatorFactory extends AbstractTaggedValueArgumen final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); final NodeTreePointable ntp = (NodeTreePointable) NodeTreePointable.FACTORY.createPointable(); + final TypedPointables tp = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -55,7 +57,7 @@ public class IdFromNodeScalarEvaluatorFactory extends AbstractTaggedValueArgumen TaggedValuePointable tvp1 = args[0]; // Only accept node trees as input. try { - int localNodeId = FunctionHelper.getLocalNodeId(tvp1); + int localNodeId = FunctionHelper.getLocalNodeId(tvp1, tp); if (localNodeId == -1) { XDMConstants.setEmptySequence(result); } else { http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/LocalIdFromNodeScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/LocalIdFromNodeScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/LocalIdFromNodeScalarEvaluatorFactory.java index 5ac59a9..b8aad52 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/LocalIdFromNodeScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/LocalIdFromNodeScalarEvaluatorFactory.java @@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.node; import java.io.DataOutput; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.datamodel.values.XDMConstants; import org.apache.vxquery.exceptions.ErrorCode; @@ -46,6 +47,7 @@ public class LocalIdFromNodeScalarEvaluatorFactory extends AbstractTaggedValueAr throws AlgebricksException { final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); + final TypedPointables tp = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -53,7 +55,7 @@ public class LocalIdFromNodeScalarEvaluatorFactory extends AbstractTaggedValueAr TaggedValuePointable tvp1 = args[0]; // Only accept node trees as input. try { - int localNodeId = FunctionHelper.getLocalNodeId(tvp1); + int localNodeId = FunctionHelper.getLocalNodeId(tvp1, tp); if (localNodeId == -1) { XDMConstants.setEmptySequence(result); } else { http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java index ffcbb6d..e8ee449 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java @@ -92,7 +92,7 @@ public abstract class AbstractNumericScalarEvaluatorFactory extends AbstractTagg case ValueTag.XS_BYTE_TAG: case ValueTag.XS_UNSIGNED_BYTE_TAG: abvsInteger.reset(); - FunctionHelper.getIntegerPointable(tvp, dOutInteger); + FunctionHelper.getIntegerPointable(tvp, dOutInteger, tp); longp.set(abvsInteger.getByteArray(), abvsInteger.getStartOffset() + 1, LongPointable.TYPE_TRAITS.getFixedLength()); } http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java index e8948cf..922243b 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java @@ -86,7 +86,7 @@ public abstract class AbstractNumericUnaryScalarEvaluatorFactory extends case ValueTag.XS_BYTE_TAG: case ValueTag.XS_UNSIGNED_BYTE_TAG: abvsInteger.reset(); - FunctionHelper.getIntegerPointable(tvp, dOutInteger); + FunctionHelper.getIntegerPointable(tvp, dOutInteger, tp); longp.set(abvsInteger.getByteArray(), abvsInteger.getStartOffset() + 1, LongPointable.TYPE_TRAITS.getFixedLength()); } http://git-wip-us.apache.org/repos/asf/vxquery/blob/79ad8733/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java index 799d9c7..3b60e4e 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java @@ -53,15 +53,14 @@ import edu.uci.ics.hyracks.dataflow.common.comm.util.ByteBufferInputStream; public class FunctionHelper { public static void arithmeticOperation(AbstractArithmeticOperation aOp, DynamicContext dCtx, - TaggedValuePointable tvp1, TaggedValuePointable tvp2, IPointable result) throws SystemException { + TaggedValuePointable tvp1, TaggedValuePointable tvp2, IPointable result, TypedPointables tp1, + TypedPointables tp2) throws SystemException { final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); final ArrayBackedValueStorage abvsArgument1 = new ArrayBackedValueStorage(); final DataOutput dOutArgument1 = abvsArgument1.getDataOutput(); final ArrayBackedValueStorage abvsArgument2 = new ArrayBackedValueStorage(); final DataOutput dOutArgument2 = abvsArgument2.getDataOutput(); - final TypedPointables tp1 = new TypedPointables(); - final TypedPointables tp2 = new TypedPointables(); final CastToDoubleOperation castToDouble = new CastToDoubleOperation(); abvs.reset(); @@ -85,7 +84,7 @@ public class FunctionHelper { case ValueTag.XS_BYTE_TAG: case ValueTag.XS_UNSIGNED_BYTE_TAG: abvsArgument1.reset(); - getIntegerPointable(tvp1, dOutArgument1); + getIntegerPointable(tvp1, dOutArgument1, tp1); longp1.set(abvsArgument1.getByteArray(), abvsArgument1.getStartOffset() + 1, LongPointable.TYPE_TRAITS.getFixedLength()); break; @@ -118,7 +117,7 @@ public class FunctionHelper { case ValueTag.XS_BYTE_TAG: case ValueTag.XS_UNSIGNED_BYTE_TAG: abvsArgument2.reset(); - getIntegerPointable(tvp2, dOutArgument2); + getIntegerPointable(tvp2, dOutArgument2, tp2); longp2.set(abvsArgument2.getByteArray(), abvsArgument2.getStartOffset() + 1, LongPointable.TYPE_TRAITS.getFixedLength()); break; @@ -932,9 +931,8 @@ public class FunctionHelper { } } - public static void getDoublePointable(TaggedValuePointable tvp, DataOutput dOut) throws SystemException, - IOException { - TypedPointables tp = new TypedPointables(); + public static void getDoublePointable(TaggedValuePointable tvp, DataOutput dOut, TypedPointables tp) + throws SystemException, IOException { double value; switch (tvp.getTag()) { case ValueTag.XS_DECIMAL_TAG: @@ -988,9 +986,8 @@ public class FunctionHelper { dOut.writeDouble(value); } - public static void getIntegerPointable(TaggedValuePointable tvp, DataOutput dOut) throws SystemException, - IOException { - TypedPointables tp = new TypedPointables(); + public static void getIntegerPointable(TaggedValuePointable tvp, DataOutput dOut, TypedPointables tp) + throws SystemException, IOException { long value; switch (tvp.getTag()) { case ValueTag.XS_INTEGER_TAG: @@ -1032,9 +1029,8 @@ public class FunctionHelper { /** * Get the local node id from a tagged value pointable when available. */ - public static int getLocalNodeId(TaggedValuePointable tvp1) { + public static int getLocalNodeId(TaggedValuePointable tvp1, TypedPointables tp) { final TaggedValuePointable tvp = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); - final TypedPointables tp = new TypedPointables(); int localNodeId = -1; if (tvp1.getTag() == ValueTag.NODE_TREE_TAG) { tvp1.getValue(tp.ntp); @@ -1194,9 +1190,8 @@ public class FunctionHelper { } public static boolean transformThenCompareMinMaxTaggedValues(AbstractValueComparisonOperation aOp, - TaggedValuePointable tvp1, TaggedValuePointable tvp2, DynamicContext dCtx) throws SystemException { - final TypedPointables tp1 = new TypedPointables(); - final TypedPointables tp2 = new TypedPointables(); + TaggedValuePointable tvp1, TaggedValuePointable tvp2, DynamicContext dCtx, TypedPointables tp1, + TypedPointables tp2) throws SystemException { TaggedValuePointable tvp1new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); TaggedValuePointable tvp2new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); @@ -1214,7 +1209,7 @@ public class FunctionHelper { tvp1new.set(abvsArgument1.getByteArray(), abvsArgument1.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength() + 1); } else if (isDerivedFromInteger(tvp1.getTag())) { - getIntegerPointable(tvp1, dOutArgument1); + getIntegerPointable(tvp1, dOutArgument1, tp1); tvp1new.set(abvsArgument1.getByteArray(), abvsArgument1.getStartOffset(), LongPointable.TYPE_TRAITS.getFixedLength() + 1); } else { @@ -1227,7 +1222,7 @@ public class FunctionHelper { tvp2new.set(abvsArgument2.getByteArray(), abvsArgument2.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength() + 1); } else if (isDerivedFromInteger(tvp2.getTag())) { - getIntegerPointable(tvp2, dOutArgument2); + getIntegerPointable(tvp2, dOutArgument2, tp1); tvp2new.set(abvsArgument2.getByteArray(), abvsArgument2.getStartOffset(), LongPointable.TYPE_TRAITS.getFixedLength() + 1); } else {
