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/08/21 01:17:21 UTC
svn commit: r1375305 - in
/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions:
cast/CastToHexBinaryOperation.java comparison/ValueEqComparisonOperation.java
Author: prestonc
Date: Mon Aug 20 23:17:20 2012
New Revision: 1375305
URL: http://svn.apache.org/viewvc?rev=1375305&view=rev
Log:
Fixed and issue with comparing equal arrays.
Modified:
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java?rev=1375305&r1=1375304&r2=1375305&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java Mon Aug 20 23:17:20 2012
@@ -34,7 +34,7 @@ public class CastToHexBinaryOperation ex
ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
charIterator.reset();
abvsInner.reset();
- int c1 = 0, c2 = 0;
+ int c1 = 0, c2 = 0, length = 0;
while ((c1 = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
c2 = charIterator.next();
if (c2 == ICharacterIterator.EOS_CHAR) {
@@ -47,12 +47,13 @@ public class CastToHexBinaryOperation ex
throw new SystemException(ErrorCode.FORG0001);
}
dOutInner.write(((Character.digit(c1, 16) << 4) + Character.digit(c2, 16)));
+ length += 2;
}
dOut.write(ValueTag.XS_HEX_BINARY_TAG);
- dOut.write((byte) ((abvsInner.getLength() >>> 8) & 0xFF));
- dOut.write((byte) ((abvsInner.getLength() >>> 0) & 0xFF));
- dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset(), abvsInner.getLength());
+ dOut.write((byte) ((length >>> 8) & 0xFF));
+ dOut.write((byte) ((length >>> 0) & 0xFF));
+ dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset(), length);
}
@Override
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java?rev=1375305&r1=1375304&r2=1375305&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java Mon Aug 20 23:17:20 2012
@@ -2,7 +2,6 @@ package org.apache.vxquery.runtime.funct
import java.io.DataOutput;
import java.io.IOException;
-import java.util.Arrays;
import org.apache.vxquery.context.DynamicContext;
import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
@@ -38,7 +37,8 @@ public class ValueEqComparisonOperation
@Override
public boolean operateBase64BinaryBase64Binary(XSBinaryPointable binaryp1, XSBinaryPointable binaryp2)
throws SystemException, IOException {
- return Arrays.equals(binaryp1.getByteArray(), binaryp2.getByteArray());
+ return arraysEqual(binaryp1.getByteArray(), binaryp1.getStartOffset(), binaryp1.getLength(),
+ binaryp2.getByteArray(), binaryp2.getStartOffset(), binaryp2.getLength());
}
@Override
@@ -58,8 +58,8 @@ public class ValueEqComparisonOperation
DateTime.getTimezoneDateTime(datep2, dCtx, dOut2);
byte[] bytes2 = abvs2.getByteArray();
- if (XSDateTimePointable.getYearMonth(bytes1, 0) == XSDateTimePointable.getYearMonth(bytes2, 0)
- && XSDateTimePointable.getDayTime(bytes1, 0) == XSDateTimePointable.getDayTime(bytes2, 0)) {
+ if (XSDateTimePointable.getYearMonth(bytes1, abvs1.getStartOffset()) == XSDateTimePointable.getYearMonth(bytes2, abvs2.getStartOffset())
+ && XSDateTimePointable.getDayTime(bytes1, abvs1.getStartOffset()) == XSDateTimePointable.getDayTime(bytes2, abvs2.getStartOffset())) {
return true;
}
return false;
@@ -152,7 +152,8 @@ public class ValueEqComparisonOperation
@Override
public boolean operateDurationDuration(XSDurationPointable durationp1, XSDurationPointable durationp2)
throws SystemException, IOException {
- return Arrays.equals(durationp1.getByteArray(), durationp2.getByteArray());
+ return arraysEqual(durationp1.getByteArray(), durationp1.getStartOffset(), durationp1.getLength(),
+ durationp2.getByteArray(), durationp2.getStartOffset(), durationp2.getLength());
}
@Override
@@ -218,7 +219,8 @@ public class ValueEqComparisonOperation
@Override
public boolean operateHexBinaryHexBinary(XSBinaryPointable binaryp1, XSBinaryPointable binaryp2)
throws SystemException, IOException {
- return Arrays.equals(binaryp1.getByteArray(), binaryp2.getByteArray());
+ return arraysEqual(binaryp1.getByteArray(), binaryp1.getStartOffset(), binaryp1.getLength(),
+ binaryp2.getByteArray(), binaryp2.getStartOffset(), binaryp2.getLength());
}
@Override
@@ -260,7 +262,8 @@ public class ValueEqComparisonOperation
@Override
public boolean operateQNameQName(XSQNamePointable qnamep1, XSQNamePointable qnamep2) throws SystemException,
IOException {
- return Arrays.equals(qnamep1.getByteArray(), qnamep2.getByteArray());
+ return arraysEqual(qnamep1.getByteArray(), qnamep1.getStartOffset(), qnamep1.getLength(),
+ qnamep2.getByteArray(), qnamep2.getStartOffset(), qnamep2.getLength());
}
@Override
@@ -289,4 +292,16 @@ public class ValueEqComparisonOperation
return (intp1.compareTo(intp2) == 0);
}
+ private boolean arraysEqual(byte[] bytes1, int offset1, int length1, byte[] bytes2, int offset2, int length2) {
+ if (length1 != length2) {
+ return false;
+ }
+ for (int i = 0; i < length1; ++i) {
+ if (bytes1[offset1 + i] != bytes2[offset2 + i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
}
\ No newline at end of file