Updated TypedPointable references to improve garbage collection. - Moved class to stand on its own. - Moved variable creation up to the evaluator.
Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/f0582d63 Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/f0582d63 Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/f0582d63 Branch: refs/heads/site Commit: f0582d6365f37d96cac62512845c10a8eb10a921 Parents: b98b3bd Author: Preston Carman <[email protected]> Authored: Fri May 30 12:42:45 2014 -0700 Committer: Preston Carman <[email protected]> Committed: Fri May 30 12:42:45 2014 -0700 ---------------------------------------------------------------------- .../datamodel/accessors/TypedPointables.java | 77 ++++++++++++++++++++ .../cast/CastScalarEvaluatorFactory.java | 4 +- .../CastableScalarEvaluatorFactory.java | 4 +- ...ctValueComparisonScalarEvaluatorFactory.java | 25 ++++--- ...GeneralComparisonScalarEvaluatorFactory.java | 7 +- .../node/FnNumberScalarEvaluatorFactory.java | 8 +- .../AbstractNumericScalarEvaluatorFactory.java | 12 +-- ...FnRoundHalfToEvenScalarEvaluatorFactory.java | 5 +- .../FnDistinctValuesScalarEvaluatorFactory.java | 5 +- .../FnIndexOfScalarEvaluatorFactory.java | 7 +- .../strings/FnConcatEvaluatorFactory.java | 3 +- .../strings/FnStringScalarEvaluatorFactory.java | 4 +- .../type/PromoteScalarEvaluatorFactory.java | 4 +- ...tractNumericUnaryScalarEvaluatorFactory.java | 3 +- .../runtime/functions/util/FunctionHelper.java | 71 +++--------------- 15 files changed, 134 insertions(+), 105 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/TypedPointables.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/TypedPointables.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/TypedPointables.java new file mode 100644 index 0000000..d303dfe --- /dev/null +++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/TypedPointables.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.vxquery.datamodel.accessors; + +import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable; +import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable; +import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable; +import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable; +import org.apache.vxquery.datamodel.accessors.atomic.XSDurationPointable; +import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable; +import org.apache.vxquery.datamodel.accessors.atomic.XSTimePointable; +import org.apache.vxquery.datamodel.accessors.nodes.AttributeNodePointable; +import org.apache.vxquery.datamodel.accessors.nodes.DocumentNodePointable; +import org.apache.vxquery.datamodel.accessors.nodes.ElementNodePointable; +import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable; +import org.apache.vxquery.datamodel.accessors.nodes.PINodePointable; +import org.apache.vxquery.datamodel.accessors.nodes.TextOrCommentNodePointable; + +import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable; +import edu.uci.ics.hyracks.data.std.primitive.BytePointable; +import edu.uci.ics.hyracks.data.std.primitive.DoublePointable; +import edu.uci.ics.hyracks.data.std.primitive.FloatPointable; +import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable; +import edu.uci.ics.hyracks.data.std.primitive.LongPointable; +import edu.uci.ics.hyracks.data.std.primitive.ShortPointable; +import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable; + +/** + * One pointable for each type. + * + * Pointable group good for fixed single value case that needs all possible pointable types. + * Nice alternative to pool if the size does not ever change. + */ +public class TypedPointables { + // Native Hyracks + public BooleanPointable boolp = (BooleanPointable) BooleanPointable.FACTORY.createPointable(); + public BytePointable bytep = (BytePointable) BytePointable.FACTORY.createPointable(); + public DoublePointable doublep = (DoublePointable) DoublePointable.FACTORY.createPointable(); + public FloatPointable floatp = (FloatPointable) FloatPointable.FACTORY.createPointable(); + public IntegerPointable intp = (IntegerPointable) IntegerPointable.FACTORY.createPointable(); + public LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable(); + public ShortPointable shortp = (ShortPointable) ShortPointable.FACTORY.createPointable(); + public SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable(); + public UTF8StringPointable utf8sp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); + + // XQuery Specific + public XSBinaryPointable binaryp = (XSBinaryPointable) XSBinaryPointable.FACTORY.createPointable(); + public XSDatePointable datep = (XSDatePointable) XSDatePointable.FACTORY.createPointable(); + public XSDateTimePointable datetimep = (XSDateTimePointable) XSDateTimePointable.FACTORY.createPointable(); + public XSDecimalPointable decp = (XSDecimalPointable) XSDecimalPointable.FACTORY.createPointable(); + public XSDurationPointable durationp = (XSDurationPointable) XSDurationPointable.FACTORY.createPointable(); + public XSTimePointable timep = (XSTimePointable) XSTimePointable.FACTORY.createPointable(); + public XSQNamePointable qnamep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable(); + + // XQuery Nodes + public AttributeNodePointable anp = (AttributeNodePointable) AttributeNodePointable.FACTORY.createPointable(); + public DocumentNodePointable dnp = (DocumentNodePointable) DocumentNodePointable.FACTORY.createPointable(); + public ElementNodePointable enp = (ElementNodePointable) ElementNodePointable.FACTORY.createPointable(); + public NodeTreePointable ntp = (NodeTreePointable) NodeTreePointable.FACTORY.createPointable(); + public PINodePointable pinp = (PINodePointable) PINodePointable.FACTORY.createPointable(); + public TextOrCommentNodePointable tocnp = (TextOrCommentNodePointable) TextOrCommentNodePointable.FACTORY + .createPointable(); +} http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java index 7f2fd76..7c76eea 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java @@ -19,11 +19,11 @@ package org.apache.vxquery.runtime.functions.cast; 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.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.type.AbstractTypeScalarEvaluatorFactory; -import org.apache.vxquery.runtime.functions.util.FunctionHelper; import org.apache.vxquery.types.BuiltinTypeRegistry; import org.apache.vxquery.types.SequenceType; @@ -47,7 +47,7 @@ public class CastScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFacto return new AbstractTypeScalarEvaluator(args, ctx) { final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); AbstractCastToOperation aOp = new CastToStringOperation(); @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java index ef13b18..e93bb5c 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java @@ -19,12 +19,12 @@ package org.apache.vxquery.runtime.functions.castable; 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; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.type.AbstractTypeScalarEvaluatorFactory; -import org.apache.vxquery.runtime.functions.util.FunctionHelper; import org.apache.vxquery.types.BuiltinTypeRegistry; import org.apache.vxquery.types.SequenceType; @@ -48,7 +48,7 @@ public class CastableScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorF return new AbstractTypeScalarEvaluator(args, ctx) { final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); AbstractCastableAsOperation aOp = new CastableAsStringOperation(); @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/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 898df29..e49d1e6 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 @@ -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; @@ -53,18 +54,23 @@ public abstract class AbstractValueComparisonScalarEvaluatorFactory extends final AbstractValueComparisonOperation aOp = createValueComparisonOperation(); final DynamicContext dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData(); final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable(); - + final ArrayBackedValueStorage abvsInteger1 = new ArrayBackedValueStorage(); final DataOutput dOutInteger1 = abvsInteger1.getDataOutput(); final ArrayBackedValueStorage abvsInteger2 = new ArrayBackedValueStorage(); final DataOutput dOutInteger2 = abvsInteger2.getDataOutput(); + final TaggedValuePointable tvp1new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); + final TaggedValuePointable tvp2new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); + return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException { TaggedValuePointable tvp1 = args[0]; TaggedValuePointable tvp2 = args[1]; - + if (tvp1.getTag() == ValueTag.SEQUENCE_TAG) { tvp1.getValue(seqp); if (seqp.getEntryCount() == 0) { @@ -81,7 +87,7 @@ public abstract class AbstractValueComparisonScalarEvaluatorFactory extends } throw new SystemException(ErrorCode.XPTY0004); } - + boolean booleanResult = transformThenCompareTaggedValues(aOp, tvp1, tvp2, dCtx); try { abvs.reset(); @@ -95,36 +101,33 @@ public abstract class AbstractValueComparisonScalarEvaluatorFactory extends protected boolean transformThenCompareTaggedValues(AbstractValueComparisonOperation aOp, TaggedValuePointable tvp1, TaggedValuePointable tvp2, DynamicContext dCtx) throws SystemException { - TaggedValuePointable tvp1new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); - TaggedValuePointable tvp2new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); - try { if (tvp1.getTag() == ValueTag.XS_UNTYPED_ATOMIC_TAG) { // Only need to change tag since the storage is the same for untyped atomic and string. tvp1.getByteArray()[0] = ValueTag.XS_STRING_TAG; - tvp1new = tvp1; + tvp1new.set(tvp1); } else if (FunctionHelper.isDerivedFromInteger(tvp1.getTag())) { abvsInteger1.reset(); FunctionHelper.getIntegerPointable(tvp1, dOutInteger1); tvp1new.set(abvsInteger1.getByteArray(), abvsInteger1.getStartOffset(), LongPointable.TYPE_TRAITS.getFixedLength() + 1); } else { - tvp1new = tvp1; + tvp1new.set(tvp1); } if (tvp2.getTag() == ValueTag.XS_UNTYPED_ATOMIC_TAG) { // Only need to change tag since the storage is the same for untyped atomic and string. tvp2.getByteArray()[0] = ValueTag.XS_STRING_TAG; - tvp2new = tvp2; + tvp2new.set(tvp2); } else if (FunctionHelper.isDerivedFromInteger(tvp2.getTag())) { abvsInteger2.reset(); FunctionHelper.getIntegerPointable(tvp2, dOutInteger2); tvp2new.set(abvsInteger2.getByteArray(), abvsInteger2.getStartOffset(), LongPointable.TYPE_TRAITS.getFixedLength() + 1); } else { - tvp2new = tvp2; + tvp2new.set(tvp2); } - return FunctionHelper.compareTaggedValues(aOp, tvp1new, tvp2new, dCtx); + return FunctionHelper.compareTaggedValues(aOp, tvp1new, tvp2new, dCtx, tp1, tp2); } catch (SystemException se) { throw se; } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/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 a7b79e8..9a41caa 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 @@ -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; @@ -92,8 +93,8 @@ public abstract class AbstractGeneralComparisonScalarEvaluatorFactory extends final DataOutput dOutInner2 = abvsInner2.getDataOutput(); final AtomizeHelper ah = new AtomizeHelper(); - final FunctionHelper.TypedPointables tp1 = new FunctionHelper.TypedPointables(); - final FunctionHelper.TypedPointables tp2 = new FunctionHelper.TypedPointables(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); final DynamicContext dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData(); final SequencePointable seqp1 = (SequencePointable) SequencePointable.FACTORY.createPointable(); final SequencePointable seqp2 = (SequencePointable) SequencePointable.FACTORY.createPointable(); @@ -259,7 +260,7 @@ public abstract class AbstractGeneralComparisonScalarEvaluatorFactory extends } catch (Exception e) { throw new SystemException(ErrorCode.SYSE0001, e); } - return FunctionHelper.compareTaggedValues(aOp, tvpCompare1, tvpCompare2, dCtx); + return FunctionHelper.compareTaggedValues(aOp, tvpCompare1, tvpCompare2, dCtx, tp1, tp2); } private void getCastToOperator(int tid) { http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnNumberScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnNumberScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnNumberScalarEvaluatorFactory.java index e6c6837..51826b2 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnNumberScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnNumberScalarEvaluatorFactory.java @@ -20,13 +20,13 @@ 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.ErrorCode; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.cast.CastToDoubleOperation; -import org.apache.vxquery.runtime.functions.util.FunctionHelper; import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException; import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator; @@ -48,7 +48,7 @@ public class FnNumberScalarEvaluatorFactory extends AbstractTaggedValueArgumentS final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); final CastToDoubleOperation castToDouble = new CastToDoubleOperation(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -69,7 +69,7 @@ public class FnNumberScalarEvaluatorFactory extends AbstractTaggedValueArgumentS tvp1.getValue(tp.boolp); castToDouble.convertBoolean(tp.boolp, dOut); break; - // case ValueTag.XS_YEAR_MONTH_DURATION_TAG: + // case ValueTag.XS_YEAR_MONTH_DURATION_TAG: case ValueTag.XS_INTEGER_TAG: case ValueTag.XS_NON_POSITIVE_INTEGER_TAG: case ValueTag.XS_NEGATIVE_INTEGER_TAG: @@ -81,7 +81,7 @@ public class FnNumberScalarEvaluatorFactory extends AbstractTaggedValueArgumentS tvp1.getValue(tp.longp); castToDouble.convertInteger(tp.longp, dOut); break; - // case ValueTag.XS_DAY_TIME_DURATION_TAG: + // case ValueTag.XS_DAY_TIME_DURATION_TAG: case ValueTag.XS_INT_TAG: case ValueTag.XS_UNSIGNED_SHORT_TAG: tvp1.getValue(tp.intp); http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/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 65aaac4..ffcbb6d 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 @@ -17,11 +17,9 @@ package org.apache.vxquery.runtime.functions.numeric; import java.io.DataOutput; -import java.io.IOException; -import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; -import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable; +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; @@ -29,7 +27,6 @@ import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.vxquery.runtime.functions.util.FunctionHelper.TypedPointables; import org.apache.vxquery.types.BuiltinTypeRegistry; import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException; @@ -37,12 +34,7 @@ import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator; import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; import edu.uci.ics.hyracks.api.context.IHyracksTaskContext; import edu.uci.ics.hyracks.data.std.api.IPointable; -import edu.uci.ics.hyracks.data.std.primitive.BytePointable; -import edu.uci.ics.hyracks.data.std.primitive.DoublePointable; -import edu.uci.ics.hyracks.data.std.primitive.FloatPointable; -import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable; import edu.uci.ics.hyracks.data.std.primitive.LongPointable; -import edu.uci.ics.hyracks.data.std.primitive.ShortPointable; import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage; public abstract class AbstractNumericScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { @@ -61,7 +53,7 @@ public abstract class AbstractNumericScalarEvaluatorFactory extends AbstractTagg final DataOutput dOut = abvs.getDataOutput(); final ArrayBackedValueStorage abvsInteger = new ArrayBackedValueStorage(); final DataOutput dOutInteger = abvsInteger.getDataOutput(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); @Override protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException { http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundHalfToEvenScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundHalfToEvenScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundHalfToEvenScalarEvaluatorFactory.java index 230aa7d..0ec2aa4 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundHalfToEvenScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundHalfToEvenScalarEvaluatorFactory.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.accessors.atomic.XSDecimalPointable; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.exceptions.ErrorCode; @@ -27,8 +28,6 @@ import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.cast.CastToDecimalOperation; -import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.vxquery.runtime.functions.util.FunctionHelper.TypedPointables; import org.apache.vxquery.types.BuiltinTypeRegistry; import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException; @@ -59,7 +58,7 @@ public class FnRoundHalfToEvenScalarEvaluatorFactory extends AbstractTaggedValue final DataOutput dOut = abvs.getDataOutput(); final ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage(); final DataOutput dOutInner = abvsInner.getDataOutput(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); final LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable(); final CastToDecimalOperation castToDecimal = new CastToDecimalOperation(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnDistinctValuesScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnDistinctValuesScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnDistinctValuesScalarEvaluatorFactory.java index fbfb4ca..7929908 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnDistinctValuesScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnDistinctValuesScalarEvaluatorFactory.java @@ -21,6 +21,7 @@ import java.io.IOException; 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.builders.sequence.SequenceBuilder; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.exceptions.ErrorCode; @@ -59,6 +60,8 @@ public class FnDistinctValuesScalarEvaluatorFactory extends AbstractTaggedValueA final TaggedValuePointable tvpCheck = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); final VoidPointable p = (VoidPointable) VoidPointable.FACTORY.createPointable(); final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); + final TypedPointables tp1 = new TypedPointables(); + final TypedPointables tp2 = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -92,7 +95,7 @@ public class FnDistinctValuesScalarEvaluatorFactory extends AbstractTaggedValueA for (int k = j + 1; k < seqLen; ++k) { seq.getEntry(k, p); tvpCheck.set(p.getByteArray(), p.getStartOffset(), p.getLength()); - if (FunctionHelper.compareTaggedValues(aOp, tvpDistinct, tvpCheck, dCtx)) { + if (FunctionHelper.compareTaggedValues(aOp, tvpDistinct, tvpCheck, dCtx, tp1, tp2)) { found = true; break; } http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnIndexOfScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnIndexOfScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnIndexOfScalarEvaluatorFactory.java index 984ead4..f5bb65e 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnIndexOfScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnIndexOfScalarEvaluatorFactory.java @@ -22,6 +22,7 @@ import java.io.IOException; 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.builders.sequence.SequenceBuilder; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.exceptions.ErrorCode; @@ -59,6 +60,8 @@ public class FnIndexOfScalarEvaluatorFactory extends AbstractTaggedValueArgument final AbstractValueComparisonOperation aOp = new ValueEqComparisonOperation(); final TaggedValuePointable tvp = (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 @@ -75,7 +78,7 @@ public class FnIndexOfScalarEvaluatorFactory extends AbstractTaggedValueArgument for (int j = 0; j < seqLen; ++j) { seq.getEntry(j, p); tvp.set(p.getByteArray(), p.getStartOffset(), p.getLength()); - if (FunctionHelper.compareTaggedValues(aOp, tvp, tvp2, dCtx)) { + if (FunctionHelper.compareTaggedValues(aOp, tvp, tvp2, dCtx, tp1, tp2)) { abvsInner.reset(); dOutInner.write(ValueTag.XS_INTEGER_TAG); dOutInner.writeLong(j + 1); @@ -83,7 +86,7 @@ public class FnIndexOfScalarEvaluatorFactory extends AbstractTaggedValueArgument } } } else { - if (FunctionHelper.compareTaggedValues(aOp, tvp1, tvp2, dCtx)) { + if (FunctionHelper.compareTaggedValues(aOp, tvp1, tvp2, dCtx, tp1, tp2)) { abvsInner.reset(); dOutInner.write(ValueTag.XS_INTEGER_TAG); dOutInner.writeLong(1); http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnConcatEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnConcatEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnConcatEvaluatorFactory.java index 81d491d..053c930 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnConcatEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnConcatEvaluatorFactory.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.ErrorCode; import org.apache.vxquery.exceptions.SystemException; @@ -51,7 +52,7 @@ public class FnConcatEvaluatorFactory extends AbstractTaggedValueArgumentScalarE final ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage(); final DataOutput dOutInner = abvsInner.getDataOutput(); final CastToStringOperation castToString = new CastToStringOperation(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java index f9cdf56..d248502 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.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; @@ -27,7 +28,6 @@ import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.cast.CastToStringOperation; -import org.apache.vxquery.runtime.functions.util.FunctionHelper; import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException; import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator; @@ -49,7 +49,7 @@ public class FnStringScalarEvaluatorFactory extends AbstractTaggedValueArgumentS final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); final CastToStringOperation castToString = new CastToStringOperation(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java index baf5419..594051d 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java @@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.type; 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.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; @@ -26,7 +27,6 @@ import org.apache.vxquery.runtime.functions.cast.AbstractCastToOperation; import org.apache.vxquery.runtime.functions.cast.CastToDoubleOperation; import org.apache.vxquery.runtime.functions.cast.CastToFloatOperation; import org.apache.vxquery.runtime.functions.cast.CastToStringOperation; -import org.apache.vxquery.runtime.functions.util.FunctionHelper; import org.apache.vxquery.types.BuiltinTypeRegistry; import org.apache.vxquery.types.SequenceType; @@ -50,7 +50,7 @@ public class PromoteScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFa return new AbstractTypeScalarEvaluator(args, ctx) { final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); AbstractCastToOperation aOp = new CastToStringOperation(); int castToTag = 0; http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/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 8456dec..e8948cf 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 @@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.unary; 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.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; @@ -52,7 +53,7 @@ public abstract class AbstractNumericUnaryScalarEvaluatorFactory extends final DataOutput dOut = abvs.getDataOutput(); final ArrayBackedValueStorage abvsInteger = new ArrayBackedValueStorage(); final DataOutput dOutInteger = abvsInteger.getDataOutput(); - final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables(); + final TypedPointables tp = new TypedPointables(); @Override protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException { http://git-wip-us.apache.org/repos/asf/vxquery/blob/f0582d63/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 8074eab..2d1c239 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 @@ -24,21 +24,8 @@ import java.nio.ByteBuffer; import java.util.Arrays; 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.atomic.XSBinaryPointable; -import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable; -import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable; -import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable; -import org.apache.vxquery.datamodel.accessors.atomic.XSDurationPointable; -import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable; -import org.apache.vxquery.datamodel.accessors.atomic.XSTimePointable; -import org.apache.vxquery.datamodel.accessors.nodes.AttributeNodePointable; -import org.apache.vxquery.datamodel.accessors.nodes.DocumentNodePointable; -import org.apache.vxquery.datamodel.accessors.nodes.ElementNodePointable; -import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable; -import org.apache.vxquery.datamodel.accessors.nodes.PINodePointable; -import org.apache.vxquery.datamodel.accessors.nodes.TextOrCommentNodePointable; +import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.api.IDate; import org.apache.vxquery.datamodel.api.ITime; import org.apache.vxquery.datamodel.api.ITimezone; @@ -57,50 +44,14 @@ import org.apache.vxquery.xmlparser.XMLParser; import edu.uci.ics.hyracks.api.exceptions.HyracksDataException; import edu.uci.ics.hyracks.data.std.api.IPointable; -import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable; -import edu.uci.ics.hyracks.data.std.primitive.BytePointable; import edu.uci.ics.hyracks.data.std.primitive.DoublePointable; -import edu.uci.ics.hyracks.data.std.primitive.FloatPointable; -import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable; import edu.uci.ics.hyracks.data.std.primitive.LongPointable; -import edu.uci.ics.hyracks.data.std.primitive.ShortPointable; import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable; import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage; import edu.uci.ics.hyracks.dataflow.common.comm.util.ByteBufferInputStream; public class FunctionHelper { - public static class TypedPointables { - // TODO Switch from this class to the PointablePool. - public BooleanPointable boolp = (BooleanPointable) BooleanPointable.FACTORY.createPointable(); - public BytePointable bytep = (BytePointable) BytePointable.FACTORY.createPointable(); - public DoublePointable doublep = (DoublePointable) DoublePointable.FACTORY.createPointable(); - public FloatPointable floatp = (FloatPointable) FloatPointable.FACTORY.createPointable(); - public IntegerPointable intp = (IntegerPointable) IntegerPointable.FACTORY.createPointable(); - public LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable(); - public ShortPointable shortp = (ShortPointable) ShortPointable.FACTORY.createPointable(); - public SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable(); - public UTF8StringPointable utf8sp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); - - // XQuery Specific - public XSBinaryPointable binaryp = (XSBinaryPointable) XSBinaryPointable.FACTORY.createPointable(); - public XSDatePointable datep = (XSDatePointable) XSDatePointable.FACTORY.createPointable(); - public XSDateTimePointable datetimep = (XSDateTimePointable) XSDateTimePointable.FACTORY.createPointable(); - public XSDecimalPointable decp = (XSDecimalPointable) XSDecimalPointable.FACTORY.createPointable(); - public XSDurationPointable durationp = (XSDurationPointable) XSDurationPointable.FACTORY.createPointable(); - public XSTimePointable timep = (XSTimePointable) XSTimePointable.FACTORY.createPointable(); - public XSQNamePointable qnamep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable(); - - // XQuery Nodes - public AttributeNodePointable anp = (AttributeNodePointable) AttributeNodePointable.FACTORY.createPointable(); - public DocumentNodePointable dnp = (DocumentNodePointable) DocumentNodePointable.FACTORY.createPointable(); - public ElementNodePointable enp = (ElementNodePointable) ElementNodePointable.FACTORY.createPointable(); - public NodeTreePointable ntp = (NodeTreePointable) NodeTreePointable.FACTORY.createPointable(); - public PINodePointable pinp = (PINodePointable) PINodePointable.FACTORY.createPointable(); - public TextOrCommentNodePointable tocnp = (TextOrCommentNodePointable) TextOrCommentNodePointable.FACTORY - .createPointable(); - } - public static void arithmeticOperation(AbstractArithmeticOperation aOp, DynamicContext dCtx, TaggedValuePointable tvp1, TaggedValuePointable tvp2, IPointable result) throws SystemException { final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); @@ -507,10 +458,8 @@ public class FunctionHelper { } public static boolean compareTaggedValues(AbstractValueComparisonOperation aOp, TaggedValuePointable tvp1, - TaggedValuePointable tvp2, DynamicContext dCtx) throws SystemException { - final TypedPointables tp1 = new TypedPointables(); - final TypedPointables tp2 = new TypedPointables(); - + TaggedValuePointable tvp2, DynamicContext dCtx, TypedPointables tp1, TypedPointables tp2) + throws SystemException { int tid1 = getBaseTypeForComparisons(tvp1.getTag()); int tid2 = getBaseTypeForComparisons(tvp2.getTag()); @@ -1246,6 +1195,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 tvp1new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); TaggedValuePointable tvp2new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); @@ -1254,14 +1205,12 @@ public class FunctionHelper { ArrayBackedValueStorage abvsArgument2 = new ArrayBackedValueStorage(); DataOutput dOutArgument2 = abvsArgument2.getDataOutput(); CastToDoubleOperation castToDouble = new CastToDoubleOperation(); - UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); - UTF8StringPointable stringp2 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); try { abvsArgument1.reset(); if (tvp1.getTag() == ValueTag.XS_UNTYPED_ATOMIC_TAG) { - tvp1.getValue(stringp); - castToDouble.convertUntypedAtomic(stringp, dOutArgument1); + tvp1.getValue(tp1.utf8sp); + castToDouble.convertUntypedAtomic(tp1.utf8sp, dOutArgument1); tvp1new.set(abvsArgument1.getByteArray(), abvsArgument1.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength() + 1); } else if (isDerivedFromInteger(tvp1.getTag())) { @@ -1273,8 +1222,8 @@ public class FunctionHelper { } abvsArgument2.reset(); if (tvp2.getTag() == ValueTag.XS_UNTYPED_ATOMIC_TAG) { - tvp2.getValue(stringp2); - castToDouble.convertUntypedAtomic(stringp2, dOutArgument2); + tvp2.getValue(tp2.utf8sp); + castToDouble.convertUntypedAtomic(tp2.utf8sp, dOutArgument2); tvp2new.set(abvsArgument2.getByteArray(), abvsArgument2.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength() + 1); } else if (isDerivedFromInteger(tvp2.getTag())) { @@ -1285,7 +1234,7 @@ public class FunctionHelper { tvp2new = tvp2; } - return compareTaggedValues(aOp, tvp1new, tvp2new, dCtx); + return compareTaggedValues(aOp, tvp1new, tvp2new, dCtx, tp1, tp2); } catch (SystemException se) { throw se; } catch (Exception e) {
