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

[6/8] vxquery git commit: VXQUERY-240: Update Hyracks Dependency to version 0.3.0.

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
index 599a4d7..f006087 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
@@ -16,17 +16,16 @@
  */
 package org.apache.vxquery.runtime.functions.bool;
 
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.datamodel.values.XDMConstants;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
-
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.primitive.BooleanPointable;
 import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.values.XDMConstants;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
 
 public class AndScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
@@ -37,7 +36,7 @@ public class AndScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalar
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         return new AndScalarEvaluator(args);
     }
 
@@ -53,7 +52,7 @@ public class AndScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalar
         }
 
         @Override
-        public final void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+        public final void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
             for (int i = 0; i < args.length; ++i) {
                 args[i].evaluate(tuple, tvp);
                 tvp.getValue(bp);

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java
index 7d83a19..b40cfb1 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java
@@ -16,20 +16,10 @@
  */
 package org.apache.vxquery.runtime.functions.bool;
 
-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.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.base.AbstractTaggedValueArgumentScalarEvaluator;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
-
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.primitive.BytePointable;
 import org.apache.hyracks.data.std.primitive.DoublePointable;
@@ -38,6 +28,15 @@ import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.LongPointable;
 import org.apache.hyracks.data.std.primitive.ShortPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+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.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.base.AbstractTaggedValueArgumentScalarEvaluator;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
 
 public class FnBooleanScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
@@ -48,7 +47,7 @@ public class FnBooleanScalarEvaluatorFactory extends AbstractTaggedValueArgument
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         return new FnBooleanScalarEvaluator(args);
     }
 
@@ -153,7 +152,7 @@ public class FnBooleanScalarEvaluatorFactory extends AbstractTaggedValueArgument
                 case ValueTag.XS_ANY_URI_TAG:
                 case ValueTag.XS_STRING_TAG: {
                     tvp.getValue(utf8p);
-                    if (utf8p.getUTFLength() == 0) {
+                    if (utf8p.getStringLength() == 0) {
                         booleanResult = false;
                     }
                     break;

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java
index 53778d2..cb9ad8a 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java
@@ -16,18 +16,17 @@
  */
 package org.apache.vxquery.runtime.functions.bool;
 
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.values.XDMConstants;
 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.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-import org.apache.hyracks.data.std.api.IPointable;
-
 public class FnFalseScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
 
@@ -37,7 +36,7 @@ public class FnFalseScalarEvaluatorFactory extends AbstractTaggedValueArgumentSc
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         return new AbstractTaggedValueArgumentScalarEvaluator(args) {
             @Override
             protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java
index b9d4585..f1a3213 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java
@@ -16,18 +16,17 @@
  */
 package org.apache.vxquery.runtime.functions.bool;
 
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.datamodel.values.XDMConstants;
-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.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.primitive.BooleanPointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.values.XDMConstants;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
 
 public class FnNotScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
@@ -38,7 +37,7 @@ public class FnNotScalarEvaluatorFactory extends AbstractTaggedValueArgumentScal
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         return new AbstractTaggedValueArgumentScalarEvaluator(args) {
             private final BooleanPointable bp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
 

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java
index a94d2df..9de862e 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java
@@ -16,18 +16,17 @@
  */
 package org.apache.vxquery.runtime.functions.bool;
 
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.values.XDMConstants;
 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.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-import org.apache.hyracks.data.std.api.IPointable;
-
 public class FnTrueScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
 
@@ -37,7 +36,7 @@ public class FnTrueScalarEvaluatorFactory extends AbstractTaggedValueArgumentSca
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         return new AbstractTaggedValueArgumentScalarEvaluator(args) {
             @Override
             protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
index da31e14..83db663 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
@@ -16,17 +16,16 @@
  */
 package org.apache.vxquery.runtime.functions.bool;
 
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.datamodel.values.XDMConstants;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
-
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.primitive.BooleanPointable;
 import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.values.XDMConstants;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
 
 public class OrScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
@@ -37,7 +36,7 @@ public class OrScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarE
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         return new OrScalarEvaluator(args);
     }
 
@@ -53,7 +52,7 @@ public class OrScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarE
         }
 
         @Override
-        public final void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+        public final void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
             for (int i = 0; i < args.length; ++i) {
                 args[i].evaluate(tuple, tvp);
                 tvp.getValue(bp);

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/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 739e197..6cfd9a8 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
@@ -18,6 +18,12 @@ package org.apache.vxquery.runtime.functions.cast;
 
 import java.io.DataOutput;
 
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.TypedPointables;
 import org.apache.vxquery.datamodel.values.ValueTag;
@@ -27,13 +33,6 @@ import org.apache.vxquery.runtime.functions.type.AbstractTypeScalarEvaluatorFact
 import org.apache.vxquery.types.BuiltinTypeRegistry;
 import org.apache.vxquery.types.SequenceType;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-import org.apache.hyracks.data.std.api.IPointable;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-
 public class CastScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
 
@@ -43,7 +42,7 @@ public class CastScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFacto
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         return new AbstractTypeScalarEvaluator(args, ctx) {
             final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
             final DataOutput dOut = abvs.getDataOutput();
@@ -62,140 +61,117 @@ public class CastScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFacto
                         case ValueTag.XS_ANY_URI_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertAnyURI(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_BASE64_BINARY_TAG:
                             tvp.getValue(tp.binaryp);
                             aOp.convertBase64Binary(tp.binaryp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_BOOLEAN_TAG:
                             tvp.getValue(tp.boolp);
                             aOp.convertBoolean(tp.boolp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_DATE_TAG:
                             tvp.getValue(tp.datep);
                             aOp.convertDate(tp.datep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_DATETIME_TAG:
                             tvp.getValue(tp.datetimep);
                             aOp.convertDatetime(tp.datetimep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_DAY_TIME_DURATION_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertDTDuration(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_DECIMAL_TAG:
                             tvp.getValue(tp.decp);
                             aOp.convertDecimal(tp.decp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_DOUBLE_TAG:
                             tvp.getValue(tp.doublep);
                             aOp.convertDouble(tp.doublep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_DURATION_TAG:
                             tvp.getValue(tp.durationp);
                             aOp.convertDuration(tp.durationp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_FLOAT_TAG:
                             tvp.getValue(tp.floatp);
                             aOp.convertFloat(tp.floatp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_G_DAY_TAG:
                             tvp.getValue(tp.datep);
                             aOp.convertGDay(tp.datep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_G_MONTH_TAG:
                             tvp.getValue(tp.datep);
                             aOp.convertGMonth(tp.datep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_G_MONTH_DAY_TAG:
                             tvp.getValue(tp.datep);
                             aOp.convertGMonthDay(tp.datep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_G_YEAR_TAG:
                             tvp.getValue(tp.datep);
                             aOp.convertGYear(tp.datep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_G_YEAR_MONTH_TAG:
                             tvp.getValue(tp.datep);
                             aOp.convertGYearMonth(tp.datep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_HEX_BINARY_TAG:
                             tvp.getValue(tp.binaryp);
                             aOp.convertHexBinary(tp.binaryp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_INTEGER_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertInteger(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_NOTATION_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertNotation(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_QNAME_TAG:
                             tvp.getValue(tp.qnamep);
                             aOp.convertQName(tp.qnamep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_STRING_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertString(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_TIME_TAG:
                             tvp.getValue(tp.timep);
                             aOp.convertTime(tp.timep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_UNTYPED_ATOMIC_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertUntypedAtomic(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_YEAR_MONTH_DURATION_TAG:
                             tvp.getValue(tp.intp);
                             aOp.convertYMDuration(tp.intp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         /**
                          * Derived Numeric Datatypes (Alphabetical)
@@ -203,74 +179,62 @@ public class CastScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFacto
                         case ValueTag.XS_BYTE_TAG:
                             tvp.getValue(tp.bytep);
                             aOp.convertByte(tp.bytep, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_INT_TAG:
                             tvp.getValue(tp.intp);
                             aOp.convertInt(tp.intp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_LONG_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertLong(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_NEGATIVE_INTEGER_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertNegativeInteger(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_NON_NEGATIVE_INTEGER_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertNonNegativeInteger(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_NON_POSITIVE_INTEGER_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertNonPositiveInteger(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_POSITIVE_INTEGER_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertPositiveInteger(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_SHORT_TAG:
                             tvp.getValue(tp.shortp);
                             aOp.convertShort(tp.shortp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_UNSIGNED_BYTE_TAG:
                             tvp.getValue(tp.shortp);
                             aOp.convertUnsignedByte(tp.shortp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_UNSIGNED_INT_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertUnsignedInt(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_UNSIGNED_LONG_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertUnsignedLong(tp.longp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_UNSIGNED_SHORT_TAG:
                             tvp.getValue(tp.intp);
                             aOp.convertUnsignedShort(tp.intp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         /**
                          * Derived String Datatypes (Alphabetical)
@@ -278,71 +242,65 @@ public class CastScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFacto
                         case ValueTag.XS_ENTITY_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertEntity(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_ID_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertID(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_IDREF_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertIDREF(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_LANGUAGE_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertIDREF(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_NAME_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertName(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_NCNAME_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertNCName(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_NMTOKEN_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertNMToken(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_NORMALIZED_STRING_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertNormalizedString(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
+                            break;
 
                         case ValueTag.XS_TOKEN_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertToken(tp.utf8sp, dOut);
-                            result.set(abvs);
-                            return;
-                        
+                            break;
+
                         /**
                          * JSON null
                          */
                         case ValueTag.JS_NULL_TAG:
                             aOp.convertNull(dOut);
-                            result.set(abvs);
-                            return;
+                            break;
+
+                        default:
+                            throw new SystemException(ErrorCode.XPTY0004);
                     }
+                    result.set(abvs.getByteArray(), abvs.getStartOffset(), abvs.getLength());
                 } catch (SystemException se) {
                     throw se;
                 } catch (Exception e) {
                     throw new SystemException(ErrorCode.SYSE0001, e);
                 }
-                throw new SystemException(ErrorCode.XPTY0004);
+
             }
 
             @Override

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java
index 680ce08..8e9aaa7 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java
@@ -20,13 +20,12 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.commons.codec.binary.Base64OutputStream;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
 import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
 import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.exceptions.SystemException;
 
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
-
 public class CastToBase64BinaryOperation extends AbstractCastToOperation {
     private ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
 
@@ -46,13 +45,14 @@ public class CastToBase64BinaryOperation extends AbstractCastToOperation {
     public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
         baaos.reset();
         Base64OutputStream b64os = new Base64OutputStream(baaos, false);
-        b64os.write(stringp.getByteArray(), stringp.getStartOffset() + 2, stringp.getLength() - 2);
-        b64os.close();
+        b64os.write(stringp.getByteArray(), stringp.getCharStartOffset(), stringp.getUTF8Length());
 
         dOut.write(ValueTag.XS_BASE64_BINARY_TAG);
         dOut.write((byte) ((baaos.size() >>> 8) & 0xFF));
         dOut.write((byte) ((baaos.size() >>> 0) & 0xFF));
         dOut.write(baaos.getByteArray(), 0, baaos.size());
+
+        b64os.close();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBooleanOperation.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBooleanOperation.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBooleanOperation.java
index edfae66..e37d55d 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBooleanOperation.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBooleanOperation.java
@@ -19,6 +19,11 @@ package org.apache.vxquery.runtime.functions.cast;
 import java.io.DataOutput;
 import java.io.IOException;
 
+import org.apache.hyracks.data.std.primitive.BooleanPointable;
+import org.apache.hyracks.data.std.primitive.DoublePointable;
+import org.apache.hyracks.data.std.primitive.FloatPointable;
+import org.apache.hyracks.data.std.primitive.LongPointable;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
 import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.exceptions.ErrorCode;
@@ -27,12 +32,6 @@ import org.apache.vxquery.runtime.functions.strings.ICharacterIterator;
 import org.apache.vxquery.runtime.functions.strings.LowerCaseCharacterIterator;
 import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
 
-import org.apache.hyracks.data.std.primitive.BooleanPointable;
-import org.apache.hyracks.data.std.primitive.DoublePointable;
-import org.apache.hyracks.data.std.primitive.FloatPointable;
-import org.apache.hyracks.data.std.primitive.LongPointable;
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-
 public class CastToBooleanOperation extends AbstractCastToOperation {
 
     @Override
@@ -82,7 +81,7 @@ public class CastToBooleanOperation extends AbstractCastToOperation {
     }
 
     @Override
-    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws IOException {
         byte result = 2;
         ICharacterIterator charIterator = new LowerCaseCharacterIterator(new UTF8StringCharacterIterator(stringp));
         charIterator.reset();

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java
index 8117d0e..cea4cf2 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java
@@ -19,13 +19,6 @@ package org.apache.vxquery.runtime.functions.cast;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
-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.strings.ICharacterIterator;
-import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
-
 import org.apache.hyracks.data.std.api.INumeric;
 import org.apache.hyracks.data.std.primitive.BooleanPointable;
 import org.apache.hyracks.data.std.primitive.BytePointable;
@@ -36,12 +29,20 @@ import org.apache.hyracks.data.std.primitive.LongPointable;
 import org.apache.hyracks.data.std.primitive.ShortPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.util.string.UTF8StringWriter;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
+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.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
 
 public class CastToDecimalOperation extends AbstractCastToOperation {
     private ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage();
     private DataOutput dOutInner = abvsInner.getDataOutput();
     private CastToStringOperation castToString = new CastToStringOperation();
     private UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+    private UTF8StringWriter sw = new UTF8StringWriter();
 
     @Override
     public void convertBoolean(BooleanPointable boolp, DataOutput dOut) throws SystemException, IOException {
@@ -70,9 +71,11 @@ public class CastToDecimalOperation extends AbstractCastToOperation {
             throw new SystemException(ErrorCode.FORG0001);
         }
         abvsInner.reset();
-        dOutInner.write(ValueTag.XS_STRING_TAG);
-        dOutInner.writeUTF(Double.toString(doublep.getDouble()));
-        stringp.set(abvsInner.getByteArray(), abvsInner.getStartOffset() + 1, abvsInner.getLength() - 1);
+        sw.writeUTF8(Double.toString(doublep.getDouble()), dOutInner);
+        stringp.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), abvsInner.getLength());
+//        dOutInner.write(ValueTag.XS_STRING_TAG);
+//        sw.writeUTF8(Double.toString(doublep.getDouble()), dOutInner);
+//        stringp.set(abvsInner.getByteArray(), abvsInner.getStartOffset() + 1, abvsInner.getLength() - 1);
         convertStringExtra(stringp, dOut, true);
     }
 
@@ -169,7 +172,7 @@ public class CastToDecimalOperation extends AbstractCastToOperation {
 
         dOut.write(ValueTag.XS_DECIMAL_TAG);
         dOut.write(decimalPlace);
-        dOut.writeLong((negativeValue ? -value : value));
+        dOut.writeLong(negativeValue ? -value : value);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java
index e400af7..12d4702 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java
@@ -19,6 +19,10 @@ package org.apache.vxquery.runtime.functions.cast;
 import java.io.DataOutput;
 import java.io.IOException;
 
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.data.std.util.GrowableArray;
+import org.apache.hyracks.data.std.util.UTF8StringBuilder;
 import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable;
 import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.exceptions.SystemException;
@@ -26,10 +30,11 @@ import org.apache.vxquery.runtime.functions.strings.ICharacterIterator;
 import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
 import org.apache.vxquery.runtime.functions.util.FunctionHelper;
 
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-
 public class CastToQNameOperation extends AbstractCastToOperation {
+    private static final int STRING_EXPECTED_LENGTH = 300;
+    private final GrowableArray ga = new GrowableArray();
+    private final UTF8StringBuilder sb = new UTF8StringBuilder();
+
     ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage();
     DataOutput dOutInner = abvsInner.getDataOutput();
 
@@ -44,29 +49,43 @@ public class CastToQNameOperation extends AbstractCastToOperation {
         abvsInner.reset();
         ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
         charIterator.reset();
-        int c = 0;
-        int prefixLength = 0;
+        int c;
+        boolean prefixFound = false;
+
+        dOut.write(ValueTag.XS_QNAME_TAG);
+
+        // URI
+        dOut.write((byte) 0);
+
+        // Prefix and Local Name
+        ga.reset();
+        sb.reset(ga, STRING_EXPECTED_LENGTH);
         while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
             if (c == Character.valueOf(':')) {
-                prefixLength = abvsInner.getLength();
+                prefixFound = true;
+                break;
             } else {
-                FunctionHelper.writeChar((char) c, dOutInner);
+                FunctionHelper.writeChar((char) c, sb);
             }
         }
+        if (prefixFound) {
+            // Finish Prefix
+            sb.finish();
+            dOut.write(ga.getByteArray(), 0, ga.getLength());
 
-        dOut.write(ValueTag.XS_QNAME_TAG);
-        dOut.write((byte) ((0 >>> 8) & 0xFF));
-        dOut.write((byte) ((0 >>> 0) & 0xFF));
-        // No URI
-
-        dOut.write((byte) ((prefixLength >>> 8) & 0xFF));
-        dOut.write((byte) ((prefixLength >>> 0) & 0xFF));
-        dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset(), prefixLength);
-
-        int localNameLength = abvsInner.getLength() - prefixLength;
-        dOut.write((byte) ((localNameLength >>> 8) & 0xFF));
-        dOut.write((byte) ((localNameLength >>> 0) & 0xFF));
-        dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset() + prefixLength, localNameLength);
+            // Local Name
+            ga.reset();
+            sb.reset(ga, STRING_EXPECTED_LENGTH);
+            while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+                FunctionHelper.writeChar((char) c, sb);
+            }
+        } else {
+            // No Prefix
+            dOut.write((byte) 0);
+            // Local Name is in ga variable
+        }
+        sb.finish();
+        dOut.write(ga.getByteArray(), 0, ga.getLength());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java
index dcc0d07..d541ccd 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java
@@ -20,6 +20,17 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.commons.codec.binary.Base64OutputStream;
+import org.apache.hyracks.data.std.primitive.BooleanPointable;
+import org.apache.hyracks.data.std.primitive.BytePointable;
+import org.apache.hyracks.data.std.primitive.DoublePointable;
+import org.apache.hyracks.data.std.primitive.FloatPointable;
+import org.apache.hyracks.data.std.primitive.IntegerPointable;
+import org.apache.hyracks.data.std.primitive.LongPointable;
+import org.apache.hyracks.data.std.primitive.ShortPointable;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
+import org.apache.hyracks.data.std.util.GrowableArray;
 import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
@@ -28,28 +39,22 @@ 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.builders.atomic.StringValueBuilder;
+import org.apache.vxquery.datamodel.builders.atomic.VXQueryUTF8StringBuilder;
 import org.apache.vxquery.datamodel.util.DateTime;
 import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.util.FunctionHelper;
 
-import org.apache.hyracks.data.std.primitive.BooleanPointable;
-import org.apache.hyracks.data.std.primitive.BytePointable;
-import org.apache.hyracks.data.std.primitive.DoublePointable;
-import org.apache.hyracks.data.std.primitive.FloatPointable;
-import org.apache.hyracks.data.std.primitive.IntegerPointable;
-import org.apache.hyracks.data.std.primitive.LongPointable;
-import org.apache.hyracks.data.std.primitive.ShortPointable;
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
-
 public class CastToStringOperation extends AbstractCastToOperation {
+    private static final int STRING_EXPECTED_LENGTH = 300;
+    private final GrowableArray ga = new GrowableArray();
+    private final VXQueryUTF8StringBuilder sb = new VXQueryUTF8StringBuilder();
     private ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
     private ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage();
     private DataOutput dOutInner = abvsInner.getDataOutput();
-    int returnTag = ValueTag.XS_STRING_TAG;
+    protected int returnTag = ValueTag.XS_STRING_TAG;
     private final char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+    private final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
 
     @Override
     public void convertAnyURI(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
@@ -59,63 +64,60 @@ public class CastToStringOperation extends AbstractCastToOperation {
 
     @Override
     public void convertBase64Binary(XSBinaryPointable binaryp, DataOutput dOut) throws SystemException, IOException {
-        baaos.reset();
-        @SuppressWarnings("resource")
+        // Read binary
         Base64OutputStream b64os = new Base64OutputStream(baaos, true);
         b64os.write(binaryp.getByteArray(), binaryp.getStartOffset() + 2, binaryp.getLength() - 2);
 
-        dOut.write(returnTag);
-        dOut.write((byte) ((baaos.size() >>> 8) & 0xFF));
-        dOut.write((byte) ((baaos.size() >>> 0) & 0xFF));
-        dOut.write(baaos.getByteArray(), 0, baaos.size());
+        // Write string
+        startString();
+        sb.appendUtf8Bytes(baaos.getByteArray(), 0, baaos.size());
+        sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertBoolean(BooleanPointable boolp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         if (boolp.getBoolean()) {
-            FunctionHelper.writeCharSequence("true", dOutInner);
+            FunctionHelper.writeCharSequence("true", sb);
         } else {
-            FunctionHelper.writeCharSequence("false", dOutInner);
+            FunctionHelper.writeCharSequence("false", sb);
         }
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertDate(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeDateAsString(datep, dOutInner);
-        FunctionHelper.writeTimezoneAsString(datep, dOutInner);
-
+        startString();
+        FunctionHelper.writeDateAsString(datep, sb);
+        FunctionHelper.writeTimezoneAsString(datep, sb);
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertDatetime(XSDateTimePointable datetimep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeDateAsString(datetimep, dOutInner);
-        FunctionHelper.writeChar('T', dOutInner);
-        FunctionHelper.writeTimeAsString(datetimep, dOutInner);
-        FunctionHelper.writeTimezoneAsString(datetimep, dOutInner);
-
+        startString();
+        FunctionHelper.writeDateAsString(datetimep, sb);
+        FunctionHelper.writeChar('T', sb);
+        FunctionHelper.writeTimeAsString(datetimep, sb);
+        FunctionHelper.writeTimezoneAsString(datetimep, sb);
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         byte decimalPlace = decp.getDecimalPlace();
         long value = decp.getDecimalValue();
         byte nDigits = decp.getDigitCount();
 
         if (!FunctionHelper.isNumberPostive(value)) {
             // Negative result, but the rest of the calculations can be based on a positive value.
-            FunctionHelper.writeChar('-', dOutInner);
+            FunctionHelper.writeChar('-', sb);
             value *= -1;
         }
 
         if (value == 0) {
-            FunctionHelper.writeChar('0', dOutInner);
+            FunctionHelper.writeChar('0', sb);
         } else {
             long pow10 = (long) Math.pow(10, nDigits - 1);
             int start = Math.max(decimalPlace, nDigits - 1);
@@ -123,14 +125,14 @@ public class CastToStringOperation extends AbstractCastToOperation {
 
             for (int i = start; i >= end; --i) {
                 if (i >= nDigits || i < 0) {
-                    FunctionHelper.writeChar('0', dOutInner);
+                    FunctionHelper.writeChar('0', sb);
                 } else {
-                    FunctionHelper.writeChar((char) ('0' + (value / pow10)), dOutInner);
+                    FunctionHelper.writeChar((char) ('0' + (value / pow10)), sb);
                     value %= pow10;
                     pow10 /= 10;
                 }
                 if (i == decimalPlace && value > 0) {
-                    FunctionHelper.writeChar('.', dOutInner);
+                    FunctionHelper.writeChar('.', sb);
                 }
             }
         }
@@ -140,29 +142,30 @@ public class CastToStringOperation extends AbstractCastToOperation {
     @Override
     public void convertDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException {
         abvsInner.reset();
+        startString();
         double value = doublep.getDouble();
 
         if (Double.isInfinite(value)) {
             if (value == Double.NEGATIVE_INFINITY) {
-                FunctionHelper.writeCharSequence("-", dOutInner);
+                FunctionHelper.writeCharSequence("-", sb);
             }
-            FunctionHelper.writeCharSequence("INF", dOutInner);
+            FunctionHelper.writeCharSequence("INF", sb);
             sendStringDataOutput(dOut);
         } else if (Double.isNaN(value)) {
-            FunctionHelper.writeCharSequence("NaN", dOutInner);
+            FunctionHelper.writeCharSequence("NaN", sb);
             sendStringDataOutput(dOut);
         } else if (value == -0.0 || value == 0.0) {
             long bits = Double.doubleToLongBits(value);
             boolean negative = ((bits >> 63) == 0) ? false : true;
 
             if (negative) {
-                FunctionHelper.writeChar('-', dOutInner);
+                FunctionHelper.writeCharSequence("-", sb);
             }
-            FunctionHelper.writeCharSequence("0", dOutInner);
+            FunctionHelper.writeCharSequence("0", sb);
             sendStringDataOutput(dOut);
         } else if (Math.abs(value) >= 0.000001 && Math.abs(value) <= 10000000) {
-            //the jdk (toString function) does not output number in desired format when 
-            //a number is between one and ten million, so we take care of this 
+            //the jdk (toString function) does not output number in desired format when
+            //a number is between one and ten million, so we take care of this
             //case separately here.
             CastToDecimalOperation castToDecimal = new CastToDecimalOperation();
             castToDecimal.convertDouble(doublep, dOutInner);
@@ -175,67 +178,65 @@ public class CastToStringOperation extends AbstractCastToOperation {
                 decimalToScientificNotn(decp, dOut);
             }
         } else {
-            dOut.write(returnTag);
-            dOut.writeUTF(Double.toString(value));
+            FunctionHelper.writeCharSequence(Double.toString(value), sb);
+            sendStringDataOutput(dOut);
         }
     }
 
     public void convertDoubleCanonical(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         double value = doublep.getDouble();
-
-        dOut.write(returnTag);
-        dOut.writeUTF(Double.toString(value));
-        return;
+        FunctionHelper.writeCharSequence(Double.toString(value), sb);
+        sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertDTDuration(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         long dayTime = longp.getLong();
 
         if (dayTime == 0) {
-            FunctionHelper.writeCharSequence("PT0S", dOutInner);
+            FunctionHelper.writeCharSequence("PT0S", sb);
         } else {
             if (dayTime < 0) {
-                FunctionHelper.writeChar('-', dOutInner);
+                FunctionHelper.writeChar('-', sb);
                 dayTime *= -1;
             }
-            FunctionHelper.writeChar('P', dOutInner);
+            FunctionHelper.writeChar('P', sb);
 
             // Day
             if (dayTime >= DateTime.CHRONON_OF_DAY) {
-                FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_DAY, 1, dOutInner);
-                FunctionHelper.writeChar('D', dOutInner);
+                FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_DAY, 1, sb);
+                FunctionHelper.writeChar('D', sb);
                 dayTime %= DateTime.CHRONON_OF_DAY;
             }
 
             if (dayTime > 0) {
-                FunctionHelper.writeChar('T', dOutInner);
+                FunctionHelper.writeChar('T', sb);
             }
 
             // Hour
             if (dayTime >= DateTime.CHRONON_OF_HOUR) {
-                FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_HOUR, 1, dOutInner);
-                FunctionHelper.writeChar('H', dOutInner);
+                FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_HOUR, 1, sb);
+                FunctionHelper.writeChar('H', sb);
                 dayTime %= DateTime.CHRONON_OF_HOUR;
             }
 
             // Minute
             if (dayTime >= DateTime.CHRONON_OF_MINUTE) {
-                FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_MINUTE, 1, dOutInner);
-                FunctionHelper.writeChar('M', dOutInner);
+                FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_MINUTE, 1, sb);
+                FunctionHelper.writeChar('M', sb);
                 dayTime %= DateTime.CHRONON_OF_MINUTE;
             }
 
             // Milliseconds
             if (dayTime > 0) {
-                FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_SECOND, 1, dOutInner);
+                FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_SECOND, 1, sb);
                 if (dayTime % DateTime.CHRONON_OF_SECOND != 0) {
-                    FunctionHelper.writeChar('.', dOutInner);
-                    FunctionHelper.writeNumberWithPadding(dayTime % DateTime.CHRONON_OF_SECOND, 3, dOutInner);
+                    FunctionHelper.writeChar('.', sb);
+                    FunctionHelper.writeNumberWithPadding(dayTime % DateTime.CHRONON_OF_SECOND, 3, sb);
                 }
-                FunctionHelper.writeChar('S', dOutInner);
+                FunctionHelper.writeChar('S', sb);
             }
         }
         sendStringDataOutput(dOut);
@@ -243,62 +244,62 @@ public class CastToStringOperation extends AbstractCastToOperation {
 
     @Override
     public void convertDuration(XSDurationPointable durationp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         int yearMonth = durationp.getYearMonth();
         long dayTime = durationp.getDayTime();
 
         if (yearMonth < 0 || dayTime < 0) {
-            FunctionHelper.writeChar('-', dOutInner);
+            FunctionHelper.writeChar('-', sb);
             yearMonth *= -1;
             dayTime *= -1;
         }
-        FunctionHelper.writeChar('P', dOutInner);
+        FunctionHelper.writeChar('P', sb);
 
         // Year
         if (yearMonth >= 12) {
-            FunctionHelper.writeNumberWithPadding(yearMonth / 12, 1, dOutInner);
-            FunctionHelper.writeChar('Y', dOutInner);
+            FunctionHelper.writeNumberWithPadding(yearMonth / 12, 1, sb);
+            FunctionHelper.writeChar('Y', sb);
         }
 
         // Month
         if (yearMonth % 12 > 0) {
-            FunctionHelper.writeNumberWithPadding(yearMonth % 12, 1, dOutInner);
-            FunctionHelper.writeChar('M', dOutInner);
+            FunctionHelper.writeNumberWithPadding(yearMonth % 12, 1, sb);
+            FunctionHelper.writeChar('M', sb);
         }
 
         // Day
         if (dayTime >= DateTime.CHRONON_OF_DAY) {
-            FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_DAY, 1, dOutInner);
-            FunctionHelper.writeChar('D', dOutInner);
+            FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_DAY, 1, sb);
+            FunctionHelper.writeChar('D', sb);
             dayTime %= DateTime.CHRONON_OF_DAY;
         }
 
         if (dayTime > 0) {
-            FunctionHelper.writeChar('T', dOutInner);
+            FunctionHelper.writeChar('T', sb);
         }
 
         // Hour
         if (dayTime >= DateTime.CHRONON_OF_HOUR) {
-            FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_HOUR, 1, dOutInner);
-            FunctionHelper.writeChar('H', dOutInner);
+            FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_HOUR, 1, sb);
+            FunctionHelper.writeChar('H', sb);
             dayTime %= DateTime.CHRONON_OF_HOUR;
         }
 
         // Minute
         if (dayTime >= DateTime.CHRONON_OF_MINUTE) {
-            FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_MINUTE, 1, dOutInner);
-            FunctionHelper.writeChar('M', dOutInner);
+            FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_MINUTE, 1, sb);
+            FunctionHelper.writeChar('M', sb);
             dayTime %= DateTime.CHRONON_OF_MINUTE;
         }
 
         // Milliseconds
         if (dayTime > 0) {
-            FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_SECOND, 1, dOutInner);
+            FunctionHelper.writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_SECOND, 1, sb);
             if (dayTime % DateTime.CHRONON_OF_SECOND != 0) {
-                FunctionHelper.writeChar('.', dOutInner);
-                FunctionHelper.writeNumberWithPadding(dayTime % DateTime.CHRONON_OF_SECOND, 3, dOutInner);
+                FunctionHelper.writeChar('.', sb);
+                FunctionHelper.writeNumberWithPadding(dayTime % DateTime.CHRONON_OF_SECOND, 3, sb);
             }
-            FunctionHelper.writeChar('S', dOutInner);
+            FunctionHelper.writeChar('S', sb);
         }
 
         sendStringDataOutput(dOut);
@@ -307,6 +308,7 @@ public class CastToStringOperation extends AbstractCastToOperation {
     @Override
     public void convertFloat(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException {
         abvsInner.reset();
+        startString();
         float value = floatp.getFloat();
 
         if (!Float.isInfinite(value) && !Float.isNaN(value) && Math.abs(value) >= 0.000001
@@ -321,9 +323,9 @@ public class CastToStringOperation extends AbstractCastToOperation {
             boolean negative = ((bits >> 31) == 0) ? false : true;
 
             if (negative) {
-                FunctionHelper.writeChar('-', dOutInner);
+                FunctionHelper.writeChar('-', sb);
             }
-            FunctionHelper.writeCharSequence("0", dOutInner);
+            FunctionHelper.writeCharSequence("0", sb);
             sendStringDataOutput(dOut);
         } else {
             convertFloatCanonical(floatp, dOut);
@@ -331,128 +333,126 @@ public class CastToStringOperation extends AbstractCastToOperation {
     }
 
     public void convertFloatCanonical(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         float value = floatp.getFloat();
 
         if (Float.isInfinite(value)) {
             if (value == Float.NEGATIVE_INFINITY) {
-                FunctionHelper.writeCharSequence("-", dOutInner);
+                FunctionHelper.writeCharSequence("-", sb);
             }
-            FunctionHelper.writeCharSequence("INF", dOutInner);
+            FunctionHelper.writeCharSequence("INF", sb);
         } else if (Float.isNaN(value)) {
-            FunctionHelper.writeCharSequence("NaN", dOutInner);
+            FunctionHelper.writeCharSequence("NaN", sb);
         } else {
-            dOut.write(returnTag);
-            dOut.writeUTF(Float.toString(value));
-            return;
+            FunctionHelper.writeCharSequence(Float.toString(value), sb);
         }
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertGDay(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         // Default
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeChar('-', sb);
 
         // Year
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeChar('-', sb);
 
         // Month
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeChar('-', sb);
 
         // Day
-        FunctionHelper.writeNumberWithPadding(datep.getDay(), 2, dOutInner);
+        FunctionHelper.writeNumberWithPadding(datep.getDay(), 2, sb);
 
         // Timezone
-        FunctionHelper.writeTimezoneAsString(datep, dOutInner);
+        FunctionHelper.writeTimezoneAsString(datep, sb);
 
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertGMonth(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         // Default
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeChar('-', sb);
 
         // Year
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeChar('-', sb);
 
         // Month
-        FunctionHelper.writeNumberWithPadding(datep.getMonth(), 2, dOutInner);
+        FunctionHelper.writeNumberWithPadding(datep.getMonth(), 2, sb);
 
         // Timezone
-        FunctionHelper.writeTimezoneAsString(datep, dOutInner);
+        FunctionHelper.writeTimezoneAsString(datep, sb);
 
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertGMonthDay(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         // Default
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeChar('-', sb);
 
         // Year
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeChar('-', sb);
 
         // Month
-        FunctionHelper.writeNumberWithPadding(datep.getMonth(), 2, dOutInner);
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeNumberWithPadding(datep.getMonth(), 2, sb);
+        FunctionHelper.writeChar('-', sb);
 
         // Day
-        FunctionHelper.writeNumberWithPadding(datep.getDay(), 2, dOutInner);
+        FunctionHelper.writeNumberWithPadding(datep.getDay(), 2, sb);
 
         // Timezone
-        FunctionHelper.writeTimezoneAsString(datep, dOutInner);
+        FunctionHelper.writeTimezoneAsString(datep, sb);
 
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertGYear(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         // Year
-        FunctionHelper.writeNumberWithPadding(datep.getYear(), 4, dOutInner);
+        FunctionHelper.writeNumberWithPadding(datep.getYear(), 4, sb);
 
         // Timezone
-        FunctionHelper.writeTimezoneAsString(datep, dOutInner);
+        FunctionHelper.writeTimezoneAsString(datep, sb);
 
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertGYearMonth(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         // Year
-        FunctionHelper.writeNumberWithPadding(datep.getYear(), 4, dOutInner);
-        FunctionHelper.writeChar('-', dOutInner);
+        FunctionHelper.writeNumberWithPadding(datep.getYear(), 4, sb);
+        FunctionHelper.writeChar('-', sb);
 
         // Month
-        FunctionHelper.writeNumberWithPadding(datep.getMonth(), 2, dOutInner);
+        FunctionHelper.writeNumberWithPadding(datep.getMonth(), 2, sb);
 
         // Timezone
-        FunctionHelper.writeTimezoneAsString(datep, dOutInner);
+        FunctionHelper.writeTimezoneAsString(datep, sb);
 
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertHexBinary(XSBinaryPointable binaryp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         for (int index = 0; index < binaryp.getBinaryLength(); ++index) {
             int bi = binaryp.getByteArray()[binaryp.getBinaryStart() + index] & 0xff;
-            FunctionHelper.writeChar(hex[(bi >> 4)], dOutInner);
-            FunctionHelper.writeChar(hex[(bi & 0xf)], dOutInner);
+            FunctionHelper.writeChar(hex[bi >> 4], sb);
+            FunctionHelper.writeChar(hex[bi & 0xf], sb);
         }
         sendStringDataOutput(dOut);
     }
 
     @Override
     public void convertInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(longp.getLong(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(longp.getLong(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
@@ -464,16 +464,14 @@ public class CastToStringOperation extends AbstractCastToOperation {
 
     @Override
     public void convertQName(XSQNamePointable qnamep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         if (qnamep.getPrefixUTFLength() > 0) {
-            dOutInner.write(qnamep.getByteArray(), qnamep.getStartOffset() + qnamep.getUriLength() + 2,
-                    qnamep.getPrefixUTFLength());
-            FunctionHelper.writeChar(':', dOutInner);
+            qnamep.getPrefix(stringp);
+            sb.appendUtf8StringPointable(stringp);
+            FunctionHelper.writeChar(':', sb);
         }
-        dOutInner.write(qnamep.getByteArray(),
-                qnamep.getStartOffset() + qnamep.getUriLength() + qnamep.getPrefixLength() + 2,
-                qnamep.getLocalNameUTFLength());
-
+        qnamep.getLocalName(stringp);
+        sb.appendUtf8StringPointable(stringp);
         sendStringDataOutput(dOut);
     }
 
@@ -485,10 +483,9 @@ public class CastToStringOperation extends AbstractCastToOperation {
 
     @Override
     public void convertTime(XSTimePointable timep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeTimeAsString(timep, dOutInner);
-        FunctionHelper.writeTimezoneAsString(timep, dOutInner);
-
+        startString();
+        FunctionHelper.writeTimeAsString(timep, sb);
+        FunctionHelper.writeTimezoneAsString(timep, sb);
         sendStringDataOutput(dOut);
     }
 
@@ -499,28 +496,28 @@ public class CastToStringOperation extends AbstractCastToOperation {
 
     @Override
     public void convertYMDuration(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
+        startString();
         int yearMonth = intp.getInteger();
 
         if (yearMonth == 0) {
-            FunctionHelper.writeCharSequence("P0M", dOutInner);
+            FunctionHelper.writeCharSequence("P0M", sb);
         } else {
             if (yearMonth < 0) {
-                FunctionHelper.writeChar('-', dOutInner);
+                FunctionHelper.writeChar('-', sb);
                 yearMonth *= -1;
             }
-            FunctionHelper.writeChar('P', dOutInner);
+            FunctionHelper.writeChar('P', sb);
 
             // Year
             if (yearMonth >= 12) {
-                FunctionHelper.writeNumberWithPadding(yearMonth / 12, 1, dOutInner);
-                FunctionHelper.writeChar('Y', dOutInner);
+                FunctionHelper.writeNumberWithPadding(yearMonth / 12, 1, sb);
+                FunctionHelper.writeChar('Y', sb);
             }
 
             // Month
             if (yearMonth % 12 > 0) {
-                FunctionHelper.writeNumberWithPadding(yearMonth % 12, 1, dOutInner);
-                FunctionHelper.writeChar('M', dOutInner);
+                FunctionHelper.writeNumberWithPadding(yearMonth % 12, 1, sb);
+                FunctionHelper.writeChar('M', sb);
             }
         }
         sendStringDataOutput(dOut);
@@ -530,74 +527,74 @@ public class CastToStringOperation extends AbstractCastToOperation {
      * Derived Numeric Datatypes
      */
     public void convertByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(bytep.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(bytep.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(intp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(intp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertNegativeInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertNonNegativeInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertNonPositiveInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertPositiveInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(shortp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(shortp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(shortp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(shortp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(longp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
     public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        abvsInner.reset();
-        FunctionHelper.writeNumberWithPadding(intp.longValue(), 1, dOutInner);
+        startString();
+        FunctionHelper.writeNumberWithPadding(intp.longValue(), 1, sb);
         sendStringDataOutput(dOut);
     }
 
@@ -647,8 +644,8 @@ public class CastToStringOperation extends AbstractCastToOperation {
     }
 
     @Override
-    public void convertNormalizedString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException,
-            IOException {
+    public void convertNormalizedString(UTF8StringPointable stringp, DataOutput dOut)
+            throws SystemException, IOException {
         // TODO Add check to verify string consists of limited character set.
         convertString(stringp, dOut);
     }
@@ -659,36 +656,40 @@ public class CastToStringOperation extends AbstractCastToOperation {
         convertString(stringp, dOut);
     }
 
+    private void startString() throws IOException {
+        ga.reset();
+        sb.reset(ga, STRING_EXPECTED_LENGTH);
+    }
+
     private void sendStringDataOutput(DataOutput dOut) throws SystemException, IOException {
         dOut.write(returnTag);
-        dOut.write((byte) ((abvsInner.getLength() >>> 8) & 0xFF));
-        dOut.write((byte) ((abvsInner.getLength() >>> 0) & 0xFF));
-        dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset(), abvsInner.getLength());
+        sb.finish();
+        dOut.write(ga.getByteArray(), 0, ga.getLength());
     }
 
     public void decimalToScientificNotn(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
         byte decimalPlace = decp.getDecimalPlace();
         long value = decp.getDecimalValue();
         byte nDigits = decp.getDigitCount();
-        abvsInner.reset();
+        startString();
 
         if (!FunctionHelper.isNumberPostive(value)) {
             // Negative result, but the rest of the calculations can be based on a positive value.
-            FunctionHelper.writeChar('-', dOutInner);
+            FunctionHelper.writeChar('-', sb);
             value *= -1;
         }
 
         if (value == 0) {
-            FunctionHelper.writeChar('0', dOutInner);
+            FunctionHelper.writeChar('0', sb);
         } else {
             long pow10 = (long) Math.pow(10, nDigits - 1);
-            FunctionHelper.writeNumberWithPadding((value / pow10), 0, dOutInner);
-            FunctionHelper.writeChar('.', dOutInner);
+            FunctionHelper.writeNumberWithPadding((value / pow10), 0, sb);
+            FunctionHelper.writeChar('.', sb);
             long mod = value % pow10;
-            FunctionHelper.writeNumberWithPadding(mod, (nDigits - 1), dOutInner);
-            FunctionHelper.writeChar('E', dOutInner);
+            FunctionHelper.writeNumberWithPadding(mod, (nDigits - 1), sb);
+            FunctionHelper.writeChar('E', sb);
             long power = (nDigits - 1) - decimalPlace;
-            FunctionHelper.writeNumberWithPadding(power, 0, dOutInner);
+            FunctionHelper.writeNumberWithPadding(power, 0, sb);
         }
         sendStringDataOutput(dOut);
     }
@@ -697,6 +698,6 @@ public class CastToStringOperation extends AbstractCastToOperation {
     public void convertNull(DataOutput dOut) throws SystemException, IOException {
         StringValueBuilder svb = new StringValueBuilder();
         dOut.write(returnTag);
-        svb.write("null",dOut);
+        svb.write("null", dOut);
     }
 }

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/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 a3da889..5334c92 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
@@ -18,6 +18,12 @@ package org.apache.vxquery.runtime.functions.castable;
 
 import java.io.DataOutput;
 
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.TypedPointables;
 import org.apache.vxquery.datamodel.values.ValueTag;
@@ -28,13 +34,6 @@ import org.apache.vxquery.runtime.functions.type.AbstractTypeScalarEvaluatorFact
 import org.apache.vxquery.types.BuiltinTypeRegistry;
 import org.apache.vxquery.types.SequenceType;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-import org.apache.hyracks.data.std.api.IPointable;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-
 public class CastableScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
 
@@ -44,7 +43,7 @@ public class CastableScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorF
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         return new AbstractTypeScalarEvaluator(args, ctx) {
             final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
             final DataOutput dOut = abvs.getDataOutput();

http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/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 4d5eca2..58aa35d 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
@@ -18,6 +18,13 @@ package org.apache.vxquery.runtime.functions.comparison;
 
 import java.io.DataOutput;
 
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.LongPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 import org.apache.vxquery.context.DynamicContext;
 import org.apache.vxquery.datamodel.accessors.SequencePointable;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
@@ -30,14 +37,6 @@ import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScal
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
 import org.apache.vxquery.runtime.functions.util.FunctionHelper;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-import org.apache.hyracks.data.std.api.IPointable;
-import org.apache.hyracks.data.std.primitive.LongPointable;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-
 public abstract class AbstractValueComparisonScalarEvaluatorFactory extends
         AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
@@ -48,7 +47,7 @@ public abstract class AbstractValueComparisonScalarEvaluatorFactory extends
 
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
-            throws AlgebricksException {
+            throws HyracksDataException {
         final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
         final DataOutput dOut = abvs.getDataOutput();
         final AbstractValueComparisonOperation aOp = createValueComparisonOperation();