You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ty...@apache.org on 2014/07/16 18:27:35 UTC

git commit: Follow up to 7111 to fix failing unit tests on trunk

Repository: cassandra
Updated Branches:
  refs/heads/trunk 82cfcab4c -> c7f3a238e


Follow up to 7111 to fix failing unit tests on trunk

Patch by Benjamin Lerer; reviewed by Tyler Hobbs for CASSANDRA-7111


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c7f3a238
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c7f3a238
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c7f3a238

Branch: refs/heads/trunk
Commit: c7f3a238e7fcc09292c0316b4df3279a4d241b2d
Parents: 82cfcab
Author: Tyler Hobbs <ty...@datastax.com>
Authored: Wed Jul 16 11:26:35 2014 -0500
Committer: Tyler Hobbs <ty...@datastax.com>
Committed: Wed Jul 16 11:26:35 2014 -0500

----------------------------------------------------------------------
 .../apache/cassandra/cql3/ErrorCollector.java   | 37 ++++++++++++++++++--
 .../apache/cassandra/cql3/QueryProcessor.java   |  2 +-
 .../apache/cassandra/cql3/CqlParserTest.java    |  8 ++---
 .../cassandra/cql3/ErrorCollectorTest.java      | 24 +++++++++++++
 4 files changed, 63 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c7f3a238/src/java/org/apache/cassandra/cql3/ErrorCollector.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/ErrorCollector.java b/src/java/org/apache/cassandra/cql3/ErrorCollector.java
index 41536f5..40949de 100644
--- a/src/java/org/apache/cassandra/cql3/ErrorCollector.java
+++ b/src/java/org/apache/cassandra/cql3/ErrorCollector.java
@@ -91,14 +91,14 @@ public final class ErrorCollector implements ErrorListener
     }
 
     /**
-     * Throws the last syntax error found by the lexer or the parser if it exists.
+     * Throws the first syntax error found by the lexer or the parser if it exists.
      *
      * @throws SyntaxException the syntax error.
      */
-    public void throwLastSyntaxError() throws SyntaxException
+    public void throwFirstSyntaxError() throws SyntaxException
     {
         if (!errorMsgs.isEmpty())
-            throw new SyntaxException(errorMsgs.getLast());
+            throw new SyntaxException(errorMsgs.getFirst());
     }
 
     /**
@@ -132,6 +132,9 @@ public final class ErrorCollector implements ErrorListener
                              Token to,
                              Token offending)
     {
+        if (!areTokensValid(from, to, offending))
+            return;
+
         String[] lines = query.split("\n");
 
         boolean includeQueryStart = (from.getLine() == 1) && (from.getCharPositionInLine() == 0);
@@ -157,6 +160,34 @@ public final class ErrorCollector implements ErrorListener
     }
 
     /**
+     * Checks if the specified tokens are valid.
+     *
+     * @param token the tokens to check
+     * @return <code>true</code> if all the specified tokens are valid ones,
+     * <code>false</code> otherwise.
+     */
+    private static boolean areTokensValid(Token... tokens)
+    {
+        for (Token token : tokens)
+        {
+            if (!isTokenValid(token))
+                return false;
+        }
+        return true;
+    }
+
+    /**
+     * Checks that the specified token is valid.
+     *
+     * @param token the token to check
+     * @return <code>true</code> if it is considered as valid, <code>false</code> otherwise.
+     */
+    private static boolean isTokenValid(Token token)
+    {
+        return token.getLine() > 0 && token.getCharPositionInLine() >= 0;
+    }
+
+    /**
      * Puts the specified token within square brackets.
      *
      * @param line the line containing the token

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c7f3a238/src/java/org/apache/cassandra/cql3/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/QueryProcessor.java b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
index bc64f80..999c849 100644
--- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
@@ -455,7 +455,7 @@ public class QueryProcessor implements QueryHandler
 
             // The errorCollector has queue up any errors that the lexer and parser may have encountered
             // along the way, if necessary, we turn the last error into exceptions here.
-            errorCollector.throwLastSyntaxError();
+            errorCollector.throwFirstSyntaxError();
 
             return statement;
         }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c7f3a238/test/unit/org/apache/cassandra/cql3/CqlParserTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/CqlParserTest.java b/test/unit/org/apache/cassandra/cql3/CqlParserTest.java
index d122eb5..eaba9c7 100644
--- a/test/unit/org/apache/cassandra/cql3/CqlParserTest.java
+++ b/test/unit/org/apache/cassandra/cql3/CqlParserTest.java
@@ -36,7 +36,7 @@ public class CqlParserTest
         SyntaxErrorCounter firstCounter = new SyntaxErrorCounter();
         SyntaxErrorCounter secondCounter = new SyntaxErrorCounter();
 
-        CharStream stream = new ANTLRStringStream("SELECT * FORM test;");
+        CharStream stream = new ANTLRStringStream("SELECT * FORM users");
         CqlLexer lexer = new CqlLexer(stream);
 
         TokenStream tokenStream = new CommonTokenStream(lexer);
@@ -46,8 +46,8 @@ public class CqlParserTest
 
         parser.query();
 
-        assertEquals(1, firstCounter.count);
-        assertEquals(1, secondCounter.count);
+        assertTrue(firstCounter.count > 0);
+        assertTrue(secondCounter.count > 0);
     }
 
     @Test
@@ -67,7 +67,7 @@ public class CqlParserTest
 
         parser.query();
 
-        assertEquals(1, firstCounter.count);
+        assertTrue(firstCounter.count > 0);
         assertEquals(0, secondCounter.count);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c7f3a238/test/unit/org/apache/cassandra/cql3/ErrorCollectorTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/ErrorCollectorTest.java b/test/unit/org/apache/cassandra/cql3/ErrorCollectorTest.java
index 4f5db34..4ecf460 100644
--- a/test/unit/org/apache/cassandra/cql3/ErrorCollectorTest.java
+++ b/test/unit/org/apache/cassandra/cql3/ErrorCollectorTest.java
@@ -107,6 +107,30 @@ public class ErrorCollectorTest
         assertEquals(expected, builder.toString());
     }
 
+    /**
+     * With ANTLR 3.5.2 it appears that some tokens can contains unexpected values: a line = 0 
+     * and a charPositionInLine = -1.
+     */
+    @Test
+    public void testAppendSnippetWithInvalidToken()
+    {
+        String query = "select * fom users";
+
+        ErrorCollector collector = new ErrorCollector(query);
+
+        StringBuilder builder = new StringBuilder();
+
+        Token from = new MockToken(1, 5, "select");
+        Token to = new MockToken(0, -1, "");
+        Token offending = new MockToken(0, -1, "");
+
+        collector.appendSnippet(builder, from, to, offending);
+
+        String expected = "";
+
+        assertEquals(expected, builder.toString());
+    }
+
     private final static class MockToken implements Token
     {
         /**