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/01 02:02:08 UTC

svn commit: r1379675 - /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/

Author: prestonc
Date: Sat Sep  1 00:02:07 2012
New Revision: 1379675

URL: http://svn.apache.org/viewvc?rev=1379675&view=rev
Log:
Updated the support for derived integer values. Needed a convert to string and found some bugs in the code.

Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/AbstractCastToOperation.java
    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/cast/CastToByteOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDoubleOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToFloatOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNegativeIntegerOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonNegativeIntegerOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonPositiveIntegerOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToShortOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/AbstractCastToOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/AbstractCastToOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/AbstractCastToOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/AbstractCastToOperation.java Sat Sep  1 00:02:07 2012
@@ -154,11 +154,11 @@ public abstract class AbstractCastToOper
         throw new SystemException(ErrorCode.XPTY0004);
     }
     
-    public void convertUnsignedByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
         throw new SystemException(ErrorCode.XPTY0004);
     }
     
-    public void convertUnsignedInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         throw new SystemException(ErrorCode.XPTY0004);
     }
     
@@ -166,7 +166,7 @@ public abstract class AbstractCastToOper
         throw new SystemException(ErrorCode.XPTY0004);
     }
     
-    public void convertUnsignedShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
         throw new SystemException(ErrorCode.XPTY0004);
     }
 

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=1379675&r1=1379674&r2=1379675&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 Sat Sep  1 00:02:07 2012
@@ -269,14 +269,14 @@ public class CastScalarEvaluatorFactory 
                             return;
 
                         case ValueTag.XS_UNSIGNED_BYTE_TAG:
-                            tvp.getValue(tp.bytep);
-                            aOp.convertUnsignedByte(tp.bytep, dOut);
+                            tvp.getValue(tp.shortp);
+                            aOp.convertUnsignedByte(tp.shortp, dOut);
                             result.set(abvs);
                             return;
 
                         case ValueTag.XS_UNSIGNED_INT_TAG:
-                            tvp.getValue(tp.intp);
-                            aOp.convertUnsignedInt(tp.intp, dOut);
+                            tvp.getValue(tp.longp);
+                            aOp.convertUnsignedInt(tp.longp, dOut);
                             result.set(abvs);
                             return;
 
@@ -287,8 +287,8 @@ public class CastScalarEvaluatorFactory 
                             return;
 
                         case ValueTag.XS_UNSIGNED_SHORT_TAG:
-                            tvp.getValue(tp.shortp);
-                            aOp.convertUnsignedShort(tp.shortp, dOut);
+                            tvp.getValue(tp.intp);
+                            aOp.convertUnsignedShort(tp.intp, dOut);
                             result.set(abvs);
                             return;
 

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToByteOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToByteOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToByteOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToByteOperation.java Sat Sep  1 00:02:07 2012
@@ -145,20 +145,20 @@ public class CastToByteOperation extends
         writeByteValue(shortp, dOut);
     }
 
-    public void convertUnsignedByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
-        writeByteValue(bytep, dOut);
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        writeByteValue(shortp, dOut);
     }
 
-    public void convertUnsignedInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        writeByteValue(intp, dOut);
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        writeByteValue(longp, dOut);
     }
 
     public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         writeByteValue(longp, dOut);
     }
 
-    public void convertUnsignedShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        writeByteValue(shortp, dOut);
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        writeByteValue(intp, dOut);
     }
 
     private void writeByteValue(INumeric numericp, DataOutput dOut) throws SystemException, IOException {

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDecimalOperation.java Sat Sep  1 00:02:07 2012
@@ -180,20 +180,20 @@ public class CastToDecimalOperation exte
         writeDecimalValue(shortp, dOut);
     }
 
-    public void convertUnsignedByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
-        writeDecimalValue(bytep, dOut);
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        writeDecimalValue(shortp, dOut);
     }
 
-    public void convertUnsignedInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        writeDecimalValue(intp, dOut);
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        writeDecimalValue(longp, dOut);
     }
 
     public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         writeDecimalValue(longp, dOut);
     }
 
-    public void convertUnsignedShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        writeDecimalValue(shortp, dOut);
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        writeDecimalValue(intp, dOut);
     }
 
     private void writeDecimalValue(INumeric numericp, DataOutput dOut) throws SystemException, IOException {

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDoubleOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDoubleOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDoubleOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToDoubleOperation.java Sat Sep  1 00:02:07 2012
@@ -254,20 +254,20 @@ public class CastToDoubleOperation exten
         writeDoubleValue(shortp, dOut);
     }
 
-    public void convertUnsignedByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
-        writeDoubleValue(bytep, dOut);
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        writeDoubleValue(shortp, dOut);
     }
 
-    public void convertUnsignedInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        writeDoubleValue(intp, dOut);
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        writeDoubleValue(longp, dOut);
     }
 
     public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         writeDoubleValue(longp, dOut);
     }
 
-    public void convertUnsignedShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        writeDoubleValue(shortp, dOut);
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        writeDoubleValue(intp, dOut);
     }
 
     private void writeDoubleValue(INumeric numericp, DataOutput dOut) throws SystemException, IOException {

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToFloatOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToFloatOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToFloatOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToFloatOperation.java Sat Sep  1 00:02:07 2012
@@ -218,20 +218,20 @@ public class CastToFloatOperation extend
         writeDoubleValue(shortp, dOut);
     }
 
-    public void convertUnsignedByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
-        writeDoubleValue(bytep, dOut);
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        writeDoubleValue(shortp, dOut);
     }
 
-    public void convertUnsignedInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        writeDoubleValue(intp, dOut);
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        writeDoubleValue(longp, dOut);
     }
 
     public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         writeDoubleValue(longp, dOut);
     }
 
-    public void convertUnsignedShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        writeDoubleValue(shortp, dOut);
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        writeDoubleValue(intp, dOut);
     }
 
     private void writeDoubleValue(INumeric numericp, DataOutput dOut) throws SystemException, IOException {

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntOperation.java Sat Sep  1 00:02:07 2012
@@ -145,20 +145,20 @@ public class CastToIntOperation extends 
         writeIntValue(shortp, dOut);
     }
 
-    public void convertUnsignedByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
-        writeIntValue(bytep, dOut);
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        writeIntValue(shortp, dOut);
     }
 
-    public void convertUnsignedInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        writeIntValue(intp, dOut);
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        writeIntValue(longp, dOut);
     }
 
     public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         writeIntValue(longp, dOut);
     }
 
-    public void convertUnsignedShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        writeIntValue(shortp, dOut);
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        writeIntValue(intp, dOut);
     }
 
     private void writeIntValue(INumeric numericp, DataOutput dOut) throws SystemException, IOException {

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java Sat Sep  1 00:02:07 2012
@@ -88,8 +88,6 @@ public class CastToIntegerOperation exte
             negative = true;
             c = charIterator.next();
             limit = Long.MIN_VALUE;
-        } else if (negativeRequired) {
-            throw new SystemException(ErrorCode.FORG0001);
         }
 
         // Read the numeric value.
@@ -103,6 +101,10 @@ public class CastToIntegerOperation exte
                 throw new SystemException(ErrorCode.FORG0001);
             }
         } while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR);
+        
+        if (negativeRequired && value !=0 && !negative) {
+            throw new SystemException(ErrorCode.FORG0001);
+        }
 
         dOut.write(returnTag);
         dOut.writeLong((negative ? value : -value));
@@ -148,20 +150,20 @@ public class CastToIntegerOperation exte
         writeIntegerValue(shortp, dOut);
     }
 
-    public void convertUnsignedByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
-        writeIntegerValue(bytep, dOut);
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        writeIntegerValue(shortp, dOut);
     }
 
-    public void convertUnsignedInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        writeIntegerValue(intp, dOut);
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        writeIntegerValue(longp, dOut);
     }
 
     public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         writeIntegerValue(longp, dOut);
     }
 
-    public void convertUnsignedShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        writeIntegerValue(shortp, dOut);
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        writeIntegerValue(intp, dOut);
     }
 
     private void writeIntegerValue(INumeric numericp, DataOutput dOut) throws SystemException, IOException {

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNegativeIntegerOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNegativeIntegerOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNegativeIntegerOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNegativeIntegerOperation.java Sat Sep  1 00:02:07 2012
@@ -7,7 +7,7 @@ public class CastToNegativeIntegerOperat
     public CastToNegativeIntegerOperation() {
         negativeAllowed = true;
         negativeRequired = true;
-        returnTag = ValueTag.XS_NON_POSITIVE_INTEGER_TAG;
+        returnTag = ValueTag.XS_NEGATIVE_INTEGER_TAG;
     }
 
 }
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonNegativeIntegerOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonNegativeIntegerOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonNegativeIntegerOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonNegativeIntegerOperation.java Sat Sep  1 00:02:07 2012
@@ -5,9 +5,8 @@ import org.apache.vxquery.datamodel.valu
 public class CastToNonNegativeIntegerOperation extends CastToIntegerOperation {
 
     public CastToNonNegativeIntegerOperation() {
-        negativeAllowed = true;
-        negativeRequired = true;
-        returnTag = ValueTag.XS_NON_POSITIVE_INTEGER_TAG;
+        negativeAllowed = false;
+        returnTag = ValueTag.XS_NON_NEGATIVE_INTEGER_TAG;
     }
 
 }
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonPositiveIntegerOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonPositiveIntegerOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonPositiveIntegerOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNonPositiveIntegerOperation.java Sat Sep  1 00:02:07 2012
@@ -5,7 +5,8 @@ import org.apache.vxquery.datamodel.valu
 public class CastToNonPositiveIntegerOperation extends CastToIntegerOperation {
 
     public CastToNonPositiveIntegerOperation() {
-        negativeAllowed = false;
+        negativeAllowed = true;
+        negativeRequired = true;
         returnTag = ValueTag.XS_NON_NEGATIVE_INTEGER_TAG;
     }
 

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToShortOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToShortOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToShortOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToShortOperation.java Sat Sep  1 00:02:07 2012
@@ -145,20 +145,20 @@ public class CastToShortOperation extend
         writeShortValue(shortp, dOut);
     }
 
-    public void convertUnsignedByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
-        writeShortValue(bytep, dOut);
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        writeShortValue(shortp, dOut);
     }
 
-    public void convertUnsignedInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
-        writeShortValue(intp, dOut);
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        writeShortValue(longp, dOut);
     }
 
     public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         writeShortValue(longp, dOut);
     }
 
-    public void convertUnsignedShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
-        writeShortValue(shortp, dOut);
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        writeShortValue(intp, dOut);
     }
 
     private void writeShortValue(INumeric numericp, DataOutput dOut) throws SystemException, IOException {

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java?rev=1379675&r1=1379674&r2=1379675&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java Sat Sep  1 00:02:07 2012
@@ -19,10 +19,12 @@ import org.apache.vxquery.datamodel.valu
 import org.apache.vxquery.exceptions.SystemException;
 
 import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
+import edu.uci.ics.hyracks.data.std.primitive.BytePointable;
 import edu.uci.ics.hyracks.data.std.primitive.DoublePointable;
 import edu.uci.ics.hyracks.data.std.primitive.FloatPointable;
 import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
 import edu.uci.ics.hyracks.data.std.primitive.LongPointable;
+import edu.uci.ics.hyracks.data.std.primitive.ShortPointable;
 import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
 import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
 import edu.uci.ics.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
@@ -161,7 +163,7 @@ public class CastToStringOperation exten
             decp.set(abvsInner.getByteArray(), abvsInner.getStartOffset() + 1,
                     XSDecimalPointable.TYPE_TRAITS.getFixedLength());
             convertDecimal(decp, dOut);
-        } else if (value == 0) {
+        } else if (value == -0.0 || value == 0.0) {
             long bits = Double.doubleToLongBits(value);
             boolean negative = ((bits >> 63) == 0) ? false : true;
 
@@ -411,7 +413,7 @@ public class CastToStringOperation exten
             XSDecimalPointable decp = (XSDecimalPointable) XSDecimalPointable.FACTORY.createPointable();
             decp.set(abvsInner.getByteArray(), abvsInner.getStartOffset() + 1, abvsInner.getLength());
             convertDecimal(decp, dOut);
-        } else if (value == 0) {
+        } else if (value == -0.0f || value == 0.0f) {
             long bits = Float.floatToIntBits(value);
             boolean negative = ((bits >> 31) == 0) ? false : true;
 
@@ -637,23 +639,7 @@ public class CastToStringOperation exten
     @Override
     public void convertInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
         abvsInner.reset();
-        long value = longp.getLong();
-        if (value < 0) {
-            // Negative result, but the rest of the calculations can be based on a positive value.
-            writeChar('-', dOutInner);
-            value *= -1;
-        }
-        if (value == 0) {
-            writeChar((char) ('0'), dOutInner);
-        } else {
-            int nDigits = (int) Math.log10(value) + 1;
-            long pow10 = (long) Math.pow(10, nDigits - 1);
-            for (int i = nDigits - 1; i >= 0; --i) {
-                writeChar((char) ('0' + (value / pow10)), dOutInner);
-                value %= pow10;
-                pow10 /= 10;
-            }
-        }
+        writeNumberWithPadding(longp.getLong(), 1, dOutInner);
         sendStringDataOutput(dOut);
     }
 
@@ -735,6 +721,99 @@ public class CastToStringOperation exten
         sendStringDataOutput(dOut);
     }
 
+    /**
+     * Derived Datatypes
+     */
+    public void convertByte(BytePointable bytep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(bytep.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertInt(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(intp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertNegativeInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertNonNegativeInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertNonPositiveInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertPositiveInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertShort(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(shortp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertUnsignedByte(ShortPointable shortp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(shortp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertUnsignedInt(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertUnsignedLong(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(longp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    public void convertUnsignedShort(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        writeNumberWithPadding(intp.longValue(), 1, dOutInner);
+        sendStringDataOutput(dOut);
+    }
+
+    /**
+     * Returns the number of digits in a long. A few special cases that needed attention.
+     */
+    private int getNumberOfDigits(long value) {
+        if (value == 0) {
+            return 0;
+        }
+        double nDigitsRaw = Math.log10(value);
+        int nDigits = (int) nDigitsRaw;
+        if (nDigits > 11 && nDigitsRaw == nDigits) {
+            // Return exact number of digits and does not need adjustment. (Ex 999999999999999999)
+            return nDigits;
+        } else {
+            // Decimal value returned so we must increment to the next number.
+            return nDigits + 1;
+        }
+    }
+
     private void sendStringDataOutput(DataOutput dOut) throws SystemException, IOException {
         dOut.write(returnTag);
         dOut.write((byte) ((abvsInner.getLength() >>> 8) & 0xFF));
@@ -789,20 +868,22 @@ public class CastToStringOperation exten
     private void writeNumberWithPadding(long value, int padding, DataOutput dOut) {
         if (value < 0) {
             writeChar('-', dOut);
+            value = Math.abs(value);
         }
-        value = Math.abs(value);
-        int nDigits = (value == 0 ? 0 : (int) Math.log10(value) + 1);
+        int nDigits = getNumberOfDigits(value);
 
+        // Add zero padding for set length numbers.
         while (padding > nDigits) {
             writeChar('0', dOut);
             --padding;
         }
-        int number;
-        while (nDigits > 0) {
-            number = (int) (value / Math.pow(10, nDigits - 1));
-            writeChar(Character.forDigit(number, 10), dOut);
-            value = (int) (value - number * Math.pow(10, nDigits - 1));
-            --nDigits;
+        
+        // Write the actual number.
+        long pow10 = (long) Math.pow(10, nDigits - 1);
+        for (int i = nDigits - 1; i >= 0; --i) {
+            writeChar((char) ('0' + (value / pow10)), dOut);
+            value %= pow10;
+            pow10 /= 10;
         }
     }