You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2011/06/16 22:03:57 UTC
svn commit: r1136637 - in /cassandra/branches/cassandra-0.8:
src/java/org/apache/cassandra/tools/SSTableExport.java
test/unit/org/apache/cassandra/SchemaLoader.java
test/unit/org/apache/cassandra/tools/SSTableExportTest.java
Author: brandonwilliams
Date: Thu Jun 16 20:03:57 2011
New Revision: 1136637
URL: http://svn.apache.org/viewvc?rev=1136637&view=rev
Log:
sstable2json escapes quotes.
Patch by Pavel Yaskevich, reviewed by brandonwilliams for CASSANDRA-2780
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/tools/SSTableExportTest.java
Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java?rev=1136637&r1=1136636&r2=1136637&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java (original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java Thu Jun 16 20:03:57 2011
@@ -81,7 +81,12 @@ public class SSTableExport
*/
private static String quote(String val)
{
- return String.format("\"%s\"", val);
+ return String.format("\"%s\"", escapeQuotes(val));
+ }
+
+ private static String escapeQuotes(String val)
+ {
+ return val.replace("\"", "\\\"");
}
/**
Modified: cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java?rev=1136637&r1=1136636&r2=1136637&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java (original)
+++ cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java Thu Jun 16 20:03:57 2011
@@ -113,6 +113,12 @@ public class SchemaLoader
standardCFMD(ks1, "Standard4"),
standardCFMD(ks1, "StandardLong1"),
standardCFMD(ks1, "StandardLong2"),
+ new CFMetaData(ks1,
+ "ValuesWithQuotes",
+ st,
+ BytesType.instance,
+ null)
+ .defaultValidator(UTF8Type.instance),
superCFMD(ks1, "Super1", LongType.instance),
superCFMD(ks1, "Super2", LongType.instance),
superCFMD(ks1, "Super3", LongType.instance),
Modified: cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/tools/SSTableExportTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/tools/SSTableExportTest.java?rev=1136637&r1=1136636&r2=1136637&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/tools/SSTableExportTest.java (original)
+++ cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/tools/SSTableExportTest.java Thu Jun 16 20:03:57 2011
@@ -22,17 +22,15 @@ import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
import org.apache.cassandra.SchemaLoader;
-import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.ColumnFamily;
import org.apache.cassandra.db.CounterColumn;
import org.apache.cassandra.db.ExpiringColumn;
+import org.apache.cassandra.db.Column;
import org.apache.cassandra.db.filter.QueryFilter;
import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.dht.IPartitioner;
+import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.io.sstable.Descriptor;
import org.apache.cassandra.io.sstable.SSTableReader;
import org.apache.cassandra.io.sstable.SSTableWriter;
@@ -243,4 +241,30 @@ public class SSTableExportTest extends S
assert ((String) colA.get(3)).equals("c");
assert (Long) colA.get(4) == Long.MIN_VALUE;
}
+
+ @Test
+ public void testEscapingDoubleQuotes() throws IOException
+ {
+ File tempSS = tempSSTableFile("Keyspace1", "ValuesWithQuotes");
+ ColumnFamily cfamily = ColumnFamily.create("Keyspace1", "ValuesWithQuotes");
+ SSTableWriter writer = new SSTableWriter(tempSS.getPath(), 2);
+
+ // Add rowA
+ cfamily.addColumn(null, new Column(ByteBufferUtil.bytes("data"), UTF8Type.instance.fromString("{\"foo\":\"bar\"}")));
+ writer.append(Util.dk("rowA"), cfamily);
+ cfamily.clear();
+
+ SSTableReader reader = writer.closeAndOpenReader();
+
+ // Export to JSON and verify
+ File tempJson = File.createTempFile("ValuesWithQuotes", ".json");
+ SSTableExport.export(reader, new PrintStream(tempJson.getPath()), new String[0]);
+
+ JSONObject json = (JSONObject) JSONValue.parse(new FileReader(tempJson));
+
+ JSONArray rowA = (JSONArray)json.get(asHex("rowA"));
+ JSONArray data = (JSONArray)rowA.get(0);
+ assert hexToBytes((String)data.get(0)).equals(ByteBufferUtil.bytes("data"));
+ assert data.get(1).equals("{\"foo\":\"bar\"}");
+ }
}