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 2012/09/13 00:29:46 UTC

svn commit: r1384153 - in /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions: cast/CastScalarEvaluatorFactory.java castable/CastableScalarEvaluatorFactory.java util/FunctionHelper.java

Author: prestonc
Date: Wed Sep 12 22:29:46 2012
New Revision: 1384153

URL: http://svn.apache.org/viewvc?rev=1384153&view=rev
Log:
Adding a few more functions to the util and other clean up items.

Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java?rev=1384153&r1=1384152&r2=1384153&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastScalarEvaluatorFactory.java Wed Sep 12 22:29:46 2012
@@ -19,17 +19,11 @@ package org.apache.vxquery.runtime.funct
 import java.io.DataOutput;
 
 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.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;
 
@@ -38,14 +32,6 @@ import edu.uci.ics.hyracks.algebricks.ru
 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.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;
 
 public class CastScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFactory {
@@ -61,7 +47,7 @@ public class CastScalarEvaluatorFactory 
         return new AbstractTypeScalarEvaluator(args, ctx) {
             final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
             final DataOutput dOut = abvs.getDataOutput();
-            final TypedPointables tp = new TypedPointables();
+            final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables();
             AbstractCastToOperation aOp = new CastToStringOperation();
 
             @Override
@@ -303,6 +289,8 @@ public class CastScalarEvaluatorFactory 
                     aOp = new CastToBase64BinaryOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_BOOLEAN) {
                     aOp = new CastToBooleanOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_BYTE) {
+                    aOp = new CastToByteOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_DATE) {
                     aOp = new CastToDateOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_DATETIME) {
@@ -327,27 +315,12 @@ public class CastScalarEvaluatorFactory 
                     aOp = new CastToGYearOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_G_YEAR_MONTH) {
                     aOp = new CastToGYearMonthOperation();
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_INTEGER) {
-                    aOp = new CastToIntegerOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_HEX_BINARY) {
                     aOp = new CastToHexBinaryOperation();
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_NOTATION) {
-                    aOp = new CastToNotationOperation();
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_QNAME) {
-                    aOp = new CastToQNameOperation();
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_STRING) {
-                    aOp = new CastToStringOperation();
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_TIME) {
-                    aOp = new CastToTimeOperation();
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNTYPED_ATOMIC) {
-                    aOp = new CastToUntypedAtomicOperation();
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_YEAR_MONTH_DURATION) {
-                    aOp = new CastToYMDurationOperation();
-
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_BYTE) {
-                    aOp = new CastToByteOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_INT) {
                     aOp = new CastToIntOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_INTEGER) {
+                    aOp = new CastToIntegerOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_LONG) {
                     aOp = new CastToLongOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_NEGATIVE_INTEGER) {
@@ -356,10 +329,20 @@ public class CastScalarEvaluatorFactory 
                     aOp = new CastToNonNegativeIntegerOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_NON_POSITIVE_INTEGER) {
                     aOp = new CastToNonPositiveIntegerOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_NOTATION) {
+                    aOp = new CastToNotationOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_POSITIVE_INTEGER) {
                     aOp = new CastToPositiveIntegerOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_QNAME) {
+                    aOp = new CastToQNameOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_SHORT) {
                     aOp = new CastToShortOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_STRING) {
+                    aOp = new CastToStringOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_TIME) {
+                    aOp = new CastToTimeOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNTYPED_ATOMIC) {
+                    aOp = new CastToUntypedAtomicOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNSIGNED_BYTE) {
                     aOp = new CastToUnsignedByteOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNSIGNED_INT) {
@@ -368,7 +351,8 @@ public class CastScalarEvaluatorFactory 
                     aOp = new CastToUnsignedLongOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNSIGNED_SHORT) {
                     aOp = new CastToUnsignedShortOperation();
-
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_YEAR_MONTH_DURATION) {
+                    aOp = new CastToYMDurationOperation();
                 } else {
                     aOp = new CastToUntypedAtomicOperation();
                 }
@@ -377,22 +361,4 @@ public class CastScalarEvaluatorFactory 
         };
     }
 
-    private static class TypedPointables {
-        BooleanPointable boolp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
-        BytePointable bytep = (BytePointable) BytePointable.FACTORY.createPointable();
-        ShortPointable shortp = (ShortPointable) ShortPointable.FACTORY.createPointable();
-        IntegerPointable intp = (IntegerPointable) IntegerPointable.FACTORY.createPointable();
-        LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable();
-        FloatPointable floatp = (FloatPointable) FloatPointable.FACTORY.createPointable();
-        DoublePointable doublep = (DoublePointable) DoublePointable.FACTORY.createPointable();
-        UTF8StringPointable utf8sp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
-        XSBinaryPointable binaryp = (XSBinaryPointable) XSBinaryPointable.FACTORY.createPointable();
-        XSDecimalPointable decp = (XSDecimalPointable) XSDecimalPointable.FACTORY.createPointable();
-        XSDateTimePointable datetimep = (XSDateTimePointable) XSDateTimePointable.FACTORY.createPointable();
-        XSDatePointable datep = (XSDatePointable) XSDatePointable.FACTORY.createPointable();
-        XSDurationPointable durationp = (XSDurationPointable) XSDurationPointable.FACTORY.createPointable();
-        XSTimePointable timep = (XSTimePointable) XSTimePointable.FACTORY.createPointable();
-        XSQNamePointable qnamep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable();
-    }
-
 }
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java?rev=1384153&r1=1384152&r2=1384153&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/castable/CastableScalarEvaluatorFactory.java Wed Sep 12 22:29:46 2012
@@ -19,17 +19,12 @@ package org.apache.vxquery.runtime.funct
 import java.io.DataOutput;
 
 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.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;
 
@@ -38,12 +33,6 @@ import edu.uci.ics.hyracks.algebricks.ru
 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.BooleanPointable;
-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.UTF8StringPointable;
 import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
 
 public class CastableScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFactory {
@@ -59,19 +48,13 @@ public class CastableScalarEvaluatorFact
         return new AbstractTypeScalarEvaluator(args, ctx) {
             final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
             final DataOutput dOut = abvs.getDataOutput();
-            final TypedPointables tp = new TypedPointables();
+            final FunctionHelper.TypedPointables tp = new FunctionHelper.TypedPointables();
             AbstractCastableAsOperation aOp = new CastableAsStringOperation();
 
             @Override
             protected void evaluate(TaggedValuePointable tvp, IPointable result) throws SystemException {
-                int tid = getBaseTypeForCasts(tvp.getTag());
-                if (tid == ValueTag.XS_UNTYPED_ATOMIC_TAG) {
-                    // TODO Convert to double
-                    tid = ValueTag.XS_DOUBLE_TAG;
-                    throw new UnsupportedOperationException();
-                }
-
                 abvs.reset();
+                int tid = tvp.getTag();
                 try {
                     switch (tid) {
                         case ValueTag.XS_ANY_URI_TAG:
@@ -92,6 +75,12 @@ public class CastableScalarEvaluatorFact
                             result.set(abvs);
                             return;
 
+                        case ValueTag.XS_BYTE_TAG:
+                            tvp.getValue(tp.bytep);
+                            aOp.convertByte(tp.bytep, dOut);
+                            result.set(abvs);
+                            return;
+
                         case ValueTag.XS_DATE_TAG:
                             tvp.getValue(tp.datep);
                             aOp.convertDate(tp.datep, dOut);
@@ -170,24 +159,70 @@ public class CastableScalarEvaluatorFact
                             result.set(abvs);
                             return;
 
+                        case ValueTag.XS_INT_TAG:
+                            tvp.getValue(tp.intp);
+                            aOp.convertInt(tp.intp, dOut);
+                            result.set(abvs);
+                            return;
+
                         case ValueTag.XS_INTEGER_TAG:
                             tvp.getValue(tp.longp);
                             aOp.convertInteger(tp.longp, dOut);
                             result.set(abvs);
                             return;
 
+                        case ValueTag.XS_LONG_TAG:
+                            tvp.getValue(tp.longp);
+                            aOp.convertLong(tp.longp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_NEGATIVE_INTEGER_TAG:
+                            tvp.getValue(tp.longp);
+                            aOp.convertNegativeInteger(tp.longp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_NON_NEGATIVE_INTEGER_TAG:
+                            tvp.getValue(tp.longp);
+                            aOp.convertNonNegativeInteger(tp.longp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_NON_POSITIVE_INTEGER_TAG:
+                            tvp.getValue(tp.longp);
+                            aOp.convertNonPositiveInteger(tp.longp, dOut);
+                            result.set(abvs);
+                            return;
+
                         case ValueTag.XS_NOTATION_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertNotation(tp.utf8sp, dOut);
                             result.set(abvs);
                             return;
 
+                        case ValueTag.XS_POSITIVE_INTEGER_TAG:
+                            tvp.getValue(tp.longp);
+                            aOp.convertPositiveInteger(tp.longp, dOut);
+                            result.set(abvs);
+                            return;
+
                         case ValueTag.XS_QNAME_TAG:
                             tvp.getValue(tp.qnamep);
                             aOp.convertQName(tp.qnamep, dOut);
                             result.set(abvs);
                             return;
 
+                        case ValueTag.SEQUENCE_TAG:
+                            XDMConstants.setFalse(result);
+                            return;
+
+                        case ValueTag.XS_SHORT_TAG:
+                            tvp.getValue(tp.shortp);
+                            aOp.convertShort(tp.shortp, dOut);
+                            result.set(abvs);
+                            return;
+
                         case ValueTag.XS_STRING_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertString(tp.utf8sp, dOut);
@@ -200,6 +235,30 @@ public class CastableScalarEvaluatorFact
                             result.set(abvs);
                             return;
 
+                        case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                            tvp.getValue(tp.shortp);
+                            aOp.convertShort(tp.shortp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_UNSIGNED_INT_TAG:
+                            tvp.getValue(tp.longp);
+                            aOp.convertUnsignedInt(tp.longp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_UNSIGNED_LONG_TAG:
+                            tvp.getValue(tp.longp);
+                            aOp.convertUnsignedLong(tp.longp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_UNSIGNED_SHORT_TAG:
+                            tvp.getValue(tp.intp);
+                            aOp.convertUnsignedShort(tp.intp, dOut);
+                            result.set(abvs);
+                            return;
+
                         case ValueTag.XS_UNTYPED_ATOMIC_TAG:
                             tvp.getValue(tp.utf8sp);
                             aOp.convertUntypedAtomic(tp.utf8sp, dOut);
@@ -229,6 +288,8 @@ public class CastableScalarEvaluatorFact
                     aOp = new CastableAsBase64BinaryOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_BOOLEAN) {
                     aOp = new CastableAsBooleanOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_BYTE) {
+                    aOp = new CastableAsByteOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_DATE) {
                     aOp = new CastableAsDateOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_DATETIME) {
@@ -253,18 +314,38 @@ public class CastableScalarEvaluatorFact
                     aOp = new CastableAsGYearOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_G_YEAR_MONTH) {
                     aOp = new CastableAsGYearMonthOperation();
-                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_INTEGER) {
-                    aOp = new CastableAsIntegerOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_HEX_BINARY) {
                     aOp = new CastableAsHexBinaryOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_INT) {
+                    aOp = new CastableAsIntOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_INTEGER) {
+                    aOp = new CastableAsIntegerOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_LONG) {
+                    aOp = new CastableAsLongOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_NEGATIVE_INTEGER) {
+                    aOp = new CastableAsNegativeIntegerOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_NON_NEGATIVE_INTEGER) {
+                    aOp = new CastableAsNonNegativeIntegerOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_NON_POSITIVE_INTEGER) {
+                    aOp = new CastableAsNonPositiveIntegerOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_NOTATION) {
                     aOp = new CastableAsNotationOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_QNAME) {
                     aOp = new CastableAsQNameOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_SHORT) {
+                    aOp = new CastableAsShortOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_STRING) {
                     aOp = new CastableAsStringOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_TIME) {
                     aOp = new CastableAsTimeOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNSIGNED_BYTE) {
+                    aOp = new CastableAsUnsignedByteOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNSIGNED_INT) {
+                    aOp = new CastableAsUnsignedIntOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNSIGNED_LONG) {
+                    aOp = new CastableAsUnsignedLongOperation();
+                } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNSIGNED_SHORT) {
+                    aOp = new CastableAsUnsignedShortOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_UNTYPED_ATOMIC) {
                     aOp = new CastableAsUntypedAtomicOperation();
                 } else if (sType.getItemType() == BuiltinTypeRegistry.XS_YEAR_MONTH_DURATION) {
@@ -274,59 +355,7 @@ public class CastableScalarEvaluatorFact
                 }
             }
 
-            private int getBaseTypeForCasts(int tid) throws SystemException {
-                while (true) {
-                    switch (tid) {
-                        case ValueTag.XS_ANY_URI_TAG:
-                        case ValueTag.XS_BASE64_BINARY_TAG:
-                        case ValueTag.XS_BOOLEAN_TAG:
-                        case ValueTag.XS_DATE_TAG:
-                        case ValueTag.XS_DATETIME_TAG:
-                        case ValueTag.XS_DAY_TIME_DURATION_TAG:
-                        case ValueTag.XS_DECIMAL_TAG:
-                        case ValueTag.XS_DOUBLE_TAG:
-                        case ValueTag.XS_DURATION_TAG:
-                        case ValueTag.XS_FLOAT_TAG:
-                        case ValueTag.XS_G_DAY_TAG:
-                        case ValueTag.XS_G_MONTH_DAY_TAG:
-                        case ValueTag.XS_G_MONTH_TAG:
-                        case ValueTag.XS_G_YEAR_MONTH_TAG:
-                        case ValueTag.XS_G_YEAR_TAG:
-                        case ValueTag.XS_HEX_BINARY_TAG:
-                        case ValueTag.XS_INTEGER_TAG:
-                        case ValueTag.XS_QNAME_TAG:
-                        case ValueTag.XS_STRING_TAG:
-                        case ValueTag.XS_TIME_TAG:
-                        case ValueTag.XS_UNTYPED_ATOMIC_TAG:
-                        case ValueTag.XS_YEAR_MONTH_DURATION_TAG:
-                            return tid;
-
-                        case ValueTag.XS_ANY_ATOMIC_TAG:
-                            throw new SystemException(ErrorCode.XPTY0004);
-
-                        default:
-                            tid = BuiltinTypeRegistry.INSTANCE.getSchemaTypeById(tid).getBaseType().getTypeId();
-                    }
-                }
-            }
-
         };
     }
 
-    private static class TypedPointables {
-        BooleanPointable boolp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
-        IntegerPointable intp = (IntegerPointable) IntegerPointable.FACTORY.createPointable();
-        LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable();
-        FloatPointable floatp = (FloatPointable) FloatPointable.FACTORY.createPointable();
-        DoublePointable doublep = (DoublePointable) DoublePointable.FACTORY.createPointable();
-        UTF8StringPointable utf8sp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
-        XSBinaryPointable binaryp = (XSBinaryPointable) XSBinaryPointable.FACTORY.createPointable();
-        XSDecimalPointable decp = (XSDecimalPointable) XSDecimalPointable.FACTORY.createPointable();
-        XSDateTimePointable datetimep = (XSDateTimePointable) XSDateTimePointable.FACTORY.createPointable();
-        XSDatePointable datep = (XSDatePointable) XSDatePointable.FACTORY.createPointable();
-        XSDurationPointable durationp = (XSDurationPointable) XSDurationPointable.FACTORY.createPointable();
-        XSTimePointable timep = (XSTimePointable) XSTimePointable.FACTORY.createPointable();
-        XSQNamePointable qnamep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable();
-    }
-
 }
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java?rev=1384153&r1=1384152&r2=1384153&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java Wed Sep 12 22:29:46 2012
@@ -32,6 +32,7 @@ import org.apache.vxquery.datamodel.util
 import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.exceptions.ErrorCode;
 import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.types.BuiltinTypeConstants;
 import org.apache.vxquery.types.BuiltinTypeRegistry;
 
 import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
@@ -135,11 +136,78 @@ public class FunctionHelper {
                 case ValueTag.XS_YEAR_MONTH_DURATION_TAG:
                     return tid;
 
+                case ValueTag.XS_LONG_TAG:
+                case ValueTag.XS_NEGATIVE_INTEGER_TAG:
+                case ValueTag.XS_NON_POSITIVE_INTEGER_TAG:
+                case ValueTag.XS_NON_NEGATIVE_INTEGER_TAG:
+                case ValueTag.XS_POSITIVE_INTEGER_TAG:
+                case ValueTag.XS_UNSIGNED_INT_TAG:
+                case ValueTag.XS_UNSIGNED_LONG_TAG:
+                case ValueTag.XS_INT_TAG:
+                case ValueTag.XS_UNSIGNED_SHORT_TAG:
+                case ValueTag.XS_SHORT_TAG:
+                case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                case ValueTag.XS_BYTE_TAG:
+                    return ValueTag.XS_INTEGER_TAG;
+
+                case ValueTag.XS_ANY_ATOMIC_TAG:
+                    throw new SystemException(ErrorCode.XPTY0004);
+
+                default:
+                    tid = BuiltinTypeRegistry.INSTANCE.getSchemaTypeById(tid).getBaseType().getTypeId();
+            }
+        }
+    }
+
+    public static int getBaseTypeForArithmetics(int tid) throws SystemException {
+        if (tid >= BuiltinTypeConstants.BUILTIN_TYPE_COUNT) {
+            throw new SystemException(ErrorCode.XPTY0004);
+        }
+        while (true) {
+            switch (tid) {
+                case ValueTag.XS_STRING_TAG:
+                case ValueTag.XS_DECIMAL_TAG:
+                case ValueTag.XS_INTEGER_TAG:
+                case ValueTag.XS_FLOAT_TAG:
+                case ValueTag.XS_DOUBLE_TAG:
+                case ValueTag.XS_ANY_URI_TAG:
+                case ValueTag.XS_BOOLEAN_TAG:
+                case ValueTag.XS_DATE_TAG:
+                case ValueTag.XS_DATETIME_TAG:
+                case ValueTag.XS_TIME_TAG:
+                case ValueTag.XS_DAY_TIME_DURATION_TAG:
+                case ValueTag.XS_YEAR_MONTH_DURATION_TAG:
+                case ValueTag.XS_BASE64_BINARY_TAG:
+                case ValueTag.XS_HEX_BINARY_TAG:
+                case ValueTag.XS_QNAME_TAG:
+                case ValueTag.XS_G_DAY_TAG:
+                case ValueTag.XS_G_MONTH_DAY_TAG:
+                case ValueTag.XS_G_MONTH_TAG:
+                case ValueTag.XS_G_YEAR_MONTH_TAG:
+                case ValueTag.XS_G_YEAR_TAG:
+                case ValueTag.XS_UNTYPED_ATOMIC_TAG:
+                    return tid;
+
+                case ValueTag.XS_LONG_TAG:
+                case ValueTag.XS_NEGATIVE_INTEGER_TAG:
+                case ValueTag.XS_NON_POSITIVE_INTEGER_TAG:
+                case ValueTag.XS_NON_NEGATIVE_INTEGER_TAG:
+                case ValueTag.XS_POSITIVE_INTEGER_TAG:
+                case ValueTag.XS_UNSIGNED_INT_TAG:
+                case ValueTag.XS_UNSIGNED_LONG_TAG:
+                case ValueTag.XS_INT_TAG:
+                case ValueTag.XS_UNSIGNED_SHORT_TAG:
+                case ValueTag.XS_SHORT_TAG:
+                case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                case ValueTag.XS_BYTE_TAG:
+                    return ValueTag.XS_INTEGER_TAG;
+
                 case ValueTag.XS_ANY_ATOMIC_TAG:
                     throw new SystemException(ErrorCode.XPTY0004);
 
                 default:
                     tid = BuiltinTypeRegistry.INSTANCE.getSchemaTypeById(tid).getBaseType().getTypeId();
+                    return tid;
             }
         }
     }