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