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/18 00:19:10 UTC

svn commit: r1386876 - /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java

Author: prestonc
Date: Mon Sep 17 22:19:09 2012
New Revision: 1386876

URL: http://svn.apache.org/viewvc?rev=1386876&view=rev
Log:
Added a few more functions and sorted them.

Modified:
    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/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=1386876&r1=1386875&r2=1386876&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 Mon Sep 17 22:19:09 2012
@@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.funct
 import java.io.DataOutput;
 import java.io.IOException;
 
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
@@ -54,6 +55,7 @@ public class FunctionHelper {
         public IntegerPointable intp = (IntegerPointable) IntegerPointable.FACTORY.createPointable();
         public LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable();
         public ShortPointable shortp = (ShortPointable) ShortPointable.FACTORY.createPointable();
+        public SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
         public UTF8StringPointable utf8sp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
         public XSBinaryPointable binaryp = (XSBinaryPointable) XSBinaryPointable.FACTORY.createPointable();
         public XSDatePointable datep = (XSDatePointable) XSDatePointable.FACTORY.createPointable();
@@ -64,49 +66,57 @@ public class FunctionHelper {
         public XSQNamePointable qnamep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable();
     }
 
-    public static long getTimezone(ITimezone timezonep) {
-        return timezonep.getTimezoneHour() * DateTime.CHRONON_OF_HOUR + timezonep.getTimezoneMinute()
-                * DateTime.CHRONON_OF_MINUTE;
-    }
-
-    public static void getIntegerPointable(TypedPointables tp, TaggedValuePointable tvp, DataOutput dOut)
-            throws SystemException, IOException {
-        long value;
-        switch (tvp.getTag()) {
-            case ValueTag.XS_INTEGER_TAG:
-            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:
-                tvp.getValue(tp.longp);
-                value = tp.longp.longValue();
-                break;
-
-            case ValueTag.XS_INT_TAG:
-            case ValueTag.XS_UNSIGNED_SHORT_TAG:
-                tvp.getValue(tp.intp);
-                value = tp.intp.longValue();
-                break;
+    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_SHORT_TAG:
-            case ValueTag.XS_UNSIGNED_BYTE_TAG:
-                tvp.getValue(tp.shortp);
-                value = tp.shortp.longValue();
-                break;
+                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_BYTE_TAG:
-                tvp.getValue(tp.bytep);
-                value = tp.bytep.longValue();
-                break;
+                case ValueTag.XS_ANY_ATOMIC_TAG:
+                    throw new SystemException(ErrorCode.XPTY0004);
 
-            default:
-                value = 0;
+                default:
+                    tid = BuiltinTypeRegistry.INSTANCE.getSchemaTypeById(tid).getBaseType().getTypeId();
+                    return tid;
+            }
         }
-        dOut.write(ValueTag.XS_INTEGER_TAG);
-        dOut.writeLong(value);
     }
 
     public static int getBaseTypeForComparisons(int tid) throws SystemException {
@@ -159,57 +169,200 @@ public class FunctionHelper {
         }
     }
 
-    public static int getBaseTypeForArithmetics(int tid) throws SystemException {
-        if (tid >= BuiltinTypeConstants.BUILTIN_TYPE_COUNT) {
-            throw new SystemException(ErrorCode.XPTY0004);
-        }
+    public static int getBaseTypeForGeneralComparisons(int tid) throws SystemException {
         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_BASE64_BINARY_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_DURATION_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_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_LONG_TAG:
-                case ValueTag.XS_NEGATIVE_INTEGER_TAG:
+                case ValueTag.XS_DECIMAL_TAG:
+                case ValueTag.XS_DOUBLE_TAG:
+                case ValueTag.XS_FLOAT_TAG:
+                case ValueTag.XS_INTEGER_TAG:
                 case ValueTag.XS_NON_POSITIVE_INTEGER_TAG:
+                case ValueTag.XS_NEGATIVE_INTEGER_TAG:
+                case ValueTag.XS_LONG_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_POSITIVE_INTEGER_TAG:
                 case ValueTag.XS_INT_TAG:
-                case ValueTag.XS_UNSIGNED_SHORT_TAG:
+                case ValueTag.XS_UNSIGNED_INT_TAG:
                 case ValueTag.XS_SHORT_TAG:
-                case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                case ValueTag.XS_UNSIGNED_SHORT_TAG:
                 case ValueTag.XS_BYTE_TAG:
-                    return ValueTag.XS_INTEGER_TAG;
+                case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                    return ValueTag.XS_DOUBLE_TAG;
 
                 case ValueTag.XS_ANY_ATOMIC_TAG:
                     throw new SystemException(ErrorCode.XPTY0004);
 
                 default:
                     tid = BuiltinTypeRegistry.INSTANCE.getSchemaTypeById(tid).getBaseType().getTypeId();
-                    return tid;
             }
         }
     }
 
+    public static void getDoublePointable(TaggedValuePointable tvp, DataOutput dOut) throws SystemException,
+            IOException {
+        TypedPointables tp = new TypedPointables();
+        double value;
+        switch (tvp.getTag()) {
+            case ValueTag.XS_DECIMAL_TAG:
+                tvp.getValue(tp.decp);
+                value = tp.decp.doubleValue();
+                break;
+
+            case ValueTag.XS_DOUBLE_TAG:
+                tvp.getValue(tp.doublep);
+                value = tp.doublep.doubleValue();
+                break;
+
+            case ValueTag.XS_FLOAT_TAG:
+                tvp.getValue(tp.floatp);
+                value = tp.floatp.doubleValue();
+                break;
+
+            case ValueTag.XS_INTEGER_TAG:
+            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:
+                tvp.getValue(tp.longp);
+                value = tp.longp.doubleValue();
+                break;
+
+            case ValueTag.XS_INT_TAG:
+            case ValueTag.XS_UNSIGNED_SHORT_TAG:
+                tvp.getValue(tp.intp);
+                value = tp.intp.doubleValue();
+                break;
+
+            case ValueTag.XS_SHORT_TAG:
+            case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                tvp.getValue(tp.shortp);
+                value = tp.shortp.doubleValue();
+                break;
+
+            case ValueTag.XS_BYTE_TAG:
+                tvp.getValue(tp.bytep);
+                value = tp.bytep.doubleValue();
+                break;
+
+            default:
+                value = 0;
+        }
+        dOut.write(ValueTag.XS_DOUBLE_TAG);
+        dOut.writeDouble(value);
+    }
+
+    public static void getIntegerPointable(TypedPointables tp, TaggedValuePointable tvp, DataOutput dOut)
+            throws SystemException, IOException {
+        long value;
+        switch (tvp.getTag()) {
+            case ValueTag.XS_INTEGER_TAG:
+            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:
+                tvp.getValue(tp.longp);
+                value = tp.longp.longValue();
+                break;
+
+            case ValueTag.XS_INT_TAG:
+            case ValueTag.XS_UNSIGNED_SHORT_TAG:
+                tvp.getValue(tp.intp);
+                value = tp.intp.longValue();
+                break;
+
+            case ValueTag.XS_SHORT_TAG:
+            case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                tvp.getValue(tp.shortp);
+                value = tp.shortp.longValue();
+                break;
+
+            case ValueTag.XS_BYTE_TAG:
+                tvp.getValue(tp.bytep);
+                value = tp.bytep.longValue();
+                break;
+
+            default:
+                value = 0;
+        }
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(value);
+    }
+
+    public static long getTimezone(ITimezone timezonep) {
+        return timezonep.getTimezoneHour() * DateTime.CHRONON_OF_HOUR + timezonep.getTimezoneMinute()
+                * DateTime.CHRONON_OF_MINUTE;
+    }
+
+    public static boolean isDerivedFromDouble(int tid) {
+        switch (tid) {
+            case ValueTag.XS_DECIMAL_TAG:
+            case ValueTag.XS_DOUBLE_TAG:
+            case ValueTag.XS_FLOAT_TAG:
+                return true;
+        }
+        return isDerivedFromInteger(tid);
+    }
+
+    public static boolean isDerivedFromInteger(int tid) {
+        switch (tid) {
+            case ValueTag.XS_INTEGER_TAG:
+            case ValueTag.XS_NON_POSITIVE_INTEGER_TAG:
+            case ValueTag.XS_NEGATIVE_INTEGER_TAG:
+            case ValueTag.XS_LONG_TAG:
+            case ValueTag.XS_NON_NEGATIVE_INTEGER_TAG:
+            case ValueTag.XS_UNSIGNED_LONG_TAG:
+            case ValueTag.XS_POSITIVE_INTEGER_TAG:
+            case ValueTag.XS_INT_TAG:
+            case ValueTag.XS_UNSIGNED_INT_TAG:
+            case ValueTag.XS_SHORT_TAG:
+            case ValueTag.XS_UNSIGNED_SHORT_TAG:
+            case ValueTag.XS_BYTE_TAG:
+            case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                return true;
+        }
+        return false;
+    }
+
+    public static boolean isDerivedFromString(int tid) {
+        switch (tid) {
+            case ValueTag.XS_STRING_TAG:
+            case ValueTag.XS_NORMALIZED_STRING_TAG:
+            case ValueTag.XS_TOKEN_TAG:
+            case ValueTag.XS_LANGUAGE_TAG:
+            case ValueTag.XS_NMTOKEN_TAG:
+            case ValueTag.XS_NAME_TAG:
+            case ValueTag.XS_NCNAME_TAG:
+            case ValueTag.XS_ID_TAG:
+            case ValueTag.XS_IDREF_TAG:
+            case ValueTag.XS_ENTITY_TAG:
+                return true;
+        }
+        return false;
+    }
 }