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