You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/04/19 15:42:20 UTC
svn commit: r1095084 - in /cassandra/branches/cassandra-0.7: CHANGES.txt
src/java/org/apache/cassandra/cli/CliUtils.java
test/unit/org/apache/cassandra/cli/CliTest.java
Author: jbellis
Date: Tue Apr 19 13:42:19 2011
New Revision: 1095084
URL: http://svn.apache.org/viewvc?rev=1095084&view=rev
Log:
fix backslash substitutions in CLI
patch by Aaron Morton; reviewed by jbellis for CASSANDRA-2492
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUtils.java
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1095084&r1=1095083&r2=1095084&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Tue Apr 19 13:42:19 2011
@@ -31,6 +31,7 @@
* fix duplicate results from CFS.scan (CASSANDRA-2406)
* avoid caching token-only decoratedkeys (CASSANDRA-2416)
* preserve version when streaming data from old sstables (CASSANDRA-2283)
+ * fix backslash substitutions in CLI (CASSANDRA-2492)
0.7.4
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUtils.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUtils.java?rev=1095084&r1=1095083&r2=1095084&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUtils.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUtils.java Tue Apr 19 13:42:19 2011
@@ -6,6 +6,7 @@ import java.util.Set;
import org.apache.cassandra.thrift.CfDef;
import org.apache.cassandra.thrift.IndexOperator;
import org.apache.cassandra.thrift.KsDef;
+import org.apache.commons.lang.StringEscapeUtils;
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -38,70 +39,16 @@ public class CliUtils
*/
public static String unescapeSQLString(String b)
{
- int j = 1;
- final char start = b.charAt(0);
- final char end = b.charAt(b.length() - 1);
-
- if (start != '\'' && end != '\'')
- {
- j = 0;
- }
-
- StringBuilder sb = new StringBuilder(b.length());
-
- for (int i = j; ((j == 0) ? i : i + 1) < b.length(); i++)
- {
- if (b.charAt(i) == '\\' && i + 2 < b.length())
- {
- char n = b.charAt(i + 1);
- switch (n)
- {
- case '0':
- sb.append("\0");
- break;
- case '\'':
- sb.append("'");
- break;
- case '"':
- sb.append("\"");
- break;
- case 'b':
- sb.append("\b");
- break;
- case 'n':
- sb.append("\n");
- break;
- case 'r':
- sb.append("\r");
- break;
- case 't':
- sb.append("\t");
- break;
- case 'Z':
- sb.append("\u001A");
- break;
- case '\\':
- sb.append("\\");
- break;
- case '%':
- sb.append("%");
- break;
- case '_':
- sb.append("_");
- break;
- default:
- sb.append(n);
- }
- }
- else
- {
- sb.append(b.charAt(i));
- }
- }
-
- return sb.toString();
+ if (b.charAt(0) == '\'' && b.charAt(b.length()-1) == '\'')
+ b = b.substring(1, b.length()-1);
+ return StringEscapeUtils.unescapeJava(b);
}
+ public static String escapeSQLString(String b)
+ {
+ // single quotes are not escaped in java, need to be for cli
+ return StringEscapeUtils.escapeJava(b).replace("\'", "\\'");
+ }
/**
* Returns IndexOperator from string representation
* @param operator - string representing IndexOperator (=, >=, >, <, <=)
Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java?rev=1095084&r1=1095083&r2=1095084&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java Tue Apr 19 13:42:19 2011
@@ -215,4 +215,17 @@ public class CliTest extends CleanupHelp
errStream.reset(); // no errors to the end user.
}
}
-}
+
+ @Test
+ public void testEscape()
+ {
+ //escaped is the string read from the cli.
+ String escaped = "backspace \\b tab \\t linefeed \\n form feed \\f carriage return \\r duble quote \\\" " +
+ "single quote \\' backslash \\\\";
+ String unescaped = "backspace \b tab \t linefeed \n form feed \f carriage return \r duble quote \" " +
+ "single quote ' backslash \\";
+ // when read from the cli may have single quotes around it
+ assertEquals(unescaped, CliUtils.unescapeSQLString("'" + escaped + "'"));
+ assertEquals(escaped, CliUtils.escapeSQLString(unescaped));
+ }
+}
\ No newline at end of file