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/03 04:14:20 UTC

svn commit: r1368771 - in /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast: CastToBase64BinaryOperation.java CastToHexBinaryOperation.java

Author: prestonc
Date: Fri Aug  3 02:14:19 2012
New Revision: 1368771

URL: http://svn.apache.org/viewvc?rev=1368771&view=rev
Log:
Binary cast from strings are now working.

Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java?rev=1368771&r1=1368770&r2=1368771&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToBase64BinaryOperation.java Fri Aug  3 02:14:19 2012
@@ -12,7 +12,8 @@ import edu.uci.ics.hyracks.data.std.prim
 import edu.uci.ics.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
 
 public class CastToBase64BinaryOperation extends AbstractCastToOperation {
-
+    private ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
+    
     @Override
     public void convertBase64Binary(XSBinaryPointable binaryp, DataOutput dOut) throws SystemException, IOException {
         dOut.write(ValueTag.XS_BASE64_BINARY_TAG);
@@ -27,14 +28,14 @@ public class CastToBase64BinaryOperation
 
     @Override
     public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
-        ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
-        Base64OutputStream b64os = new Base64OutputStream(baaos, true);
-        b64os.write(stringp.getByteArray(), stringp.getStartOffset() + 2, stringp.getUTFLength());
+        baaos.reset();
+        Base64OutputStream b64os = new Base64OutputStream(baaos, false);
+        b64os.write(stringp.getByteArray(), stringp.getStartOffset() + 2, stringp.getLength() - 2);
 
-        dOut.write(ValueTag.XS_STRING_TAG);
+        dOut.write(ValueTag.XS_BASE64_BINARY_TAG);
         dOut.write((byte) ((baaos.size() >>> 8) & 0xFF));
         dOut.write((byte) ((baaos.size() >>> 0) & 0xFF));
-        dOut.write(baaos.getByteArray());
+        dOut.write(baaos.getByteArray(), 0, baaos.size());
     }
 
     @Override

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=1368771&r1=1368770&r2=1368771&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 Fri Aug  3 02:14:19 2012
@@ -33,13 +33,10 @@ public class CastToHexBinaryOperation ex
         ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
         charIterator.reset();
         abvsInner.reset();
-        int c = 0;
-        byte halfByte1, halfByte2;
-        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
-            halfByte1 = getHexBinary((char) c);
-            halfByte2 = getHexBinary((char) c);
-
-            dOutInner.write(((halfByte1 & 0xf0) << 4) + (halfByte2 & 0x0f));
+        int c1 = 0, c2 = 0;
+        while ((c1 = charIterator.next()) != ICharacterIterator.EOS_CHAR
+                && (c2 = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            dOutInner.write(((Character.digit(c1, 16) << 4) + Character.digit(c2, 16)));
         }
 
         dOut.write(ValueTag.XS_HEX_BINARY_TAG);
@@ -52,41 +49,4 @@ public class CastToHexBinaryOperation ex
     public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
         convertString(stringp, dOut);
     }
-
-    private byte getHexBinary(char hexCharacter) {
-        if (hexCharacter == Character.valueOf('0')) {
-            return 0x00;
-        } else if (hexCharacter == Character.valueOf('1')) {
-            return 0x01;
-        } else if (hexCharacter == Character.valueOf('2')) {
-            return 0x02;
-        } else if (hexCharacter == Character.valueOf('3')) {
-            return 0x03;
-        } else if (hexCharacter == Character.valueOf('4')) {
-            return 0x04;
-        } else if (hexCharacter == Character.valueOf('5')) {
-            return 0x05;
-        } else if (hexCharacter == Character.valueOf('6')) {
-            return 0x06;
-        } else if (hexCharacter == Character.valueOf('7')) {
-            return 0x07;
-        } else if (hexCharacter == Character.valueOf('8')) {
-            return 0x08;
-        } else if (hexCharacter == Character.valueOf('9')) {
-            return 0x09;
-        } else if (hexCharacter == Character.valueOf('a')) {
-            return 0x0a;
-        } else if (hexCharacter == Character.valueOf('b')) {
-            return 0x0b;
-        } else if (hexCharacter == Character.valueOf('c')) {
-            return 0x0c;
-        } else if (hexCharacter == Character.valueOf('d')) {
-            return 0x0d;
-        } else if (hexCharacter == Character.valueOf('e')) {
-            return 0x0e;
-        } else {
-            return 0x0f;
-        }
-    }
-
 }
\ No newline at end of file