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) {

Reply via email to