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