Author: jbellis
Date: Thu Jul  1 05:57:37 2010
New Revision: 959520

URL: http://svn.apache.org/viewvc?rev=959520&view=rev
Log:
backport CASSANDRA-1232 to 0.6.  patch by jbellis

Modified:
    cassandra/branches/cassandra-0.6/CHANGES.txt
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/UTF8Type.java

Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=959520&r1=959519&r2=959520&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Thu Jul  1 05:57:37 2010
@@ -1,6 +1,8 @@
 0.6.4
  * avoid queuing multiple hint deliveries for the same endpoint
    (CASSANDRA-1229)
+ * better performance for and stricter checking of UTF8 column names
+   (CASSANDRA-1232)
 
 0.6.3
  * retry to make streaming connections up to 8 times. (CASSANDRA-1019)

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/UTF8Type.java?rev=959520&r1=959519&r2=959520&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
 Thu Jul  1 05:57:37 2010
@@ -21,31 +21,29 @@ package org.apache.cassandra.db.marshal;
  */
 
 
-import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.util.Arrays;
 
-public class UTF8Type extends AbstractType
+public class UTF8Type extends BytesType
 {
-    public int compare(byte[] o1, byte[] o2)
+    private static final CharsetDecoder utf8Decoder;
+    static
     {
-        try
-        {
-            return new String(o1, "UTF-8").compareTo(new String(o2, "UTF-8"));
-        }
-        catch (UnsupportedEncodingException e)
-        {
-            throw new RuntimeException(e);
-        }
+        utf8Decoder = Charset.forName("UTF-8").newDecoder();
     }
 
     public String getString(byte[] bytes)
     {
         try
         {
-            return new String(bytes, "UTF-8");
+            return utf8Decoder.decode(ByteBuffer.wrap(bytes)).toString();
         }
-        catch (UnsupportedEncodingException e)
+        catch (CharacterCodingException e)
         {
-            throw new RuntimeException(e);
+            throw new MarshalException("invalid UTF8 bytes " + 
Arrays.toString(bytes));
         }
     }
 }


Reply via email to