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;
}
}