You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/01/20 18:32:51 UTC

svn commit: r901294 - in /incubator/chemistry/trunk/chemistry/chemistry-commons/src: main/antlr3/org/apache/chemistry/cmissql/ main/antlr3/org/apache/chemistry/impl/simple/ main/java/org/apache/chemistry/impl/simple/ test/gunit/org/apache/chemistry/cmi...

Author: fguillaume
Date: Wed Jan 20 17:32:50 2010
New Revision: 901294

URL: http://svn.apache.org/viewvc?rev=901294&view=rev
Log:
Make query keywords case-insensitive

Modified:
    incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g
    incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g
    incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g
    incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java
    incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite
    incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java

Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g?rev=901294&r1=901293&r2=901294&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g Wed Jan 20 17:32:50 2010
@@ -62,34 +62,34 @@
 
 // ----- Generic SQL -----
 
-SELECT : 'SELECT';
-FROM : 'FROM';
-AS : 'AS';
-JOIN : 'JOIN';
-INNER : 'INNER';
-OUTER : 'OUTER';
-LEFT : 'LEFT';
-RIGHT : 'RIGHT';
-ON : 'ON';
-WHERE : 'WHERE';
-ORDER : 'ORDER';
-BY : 'BY';
-ASC : 'ASC';
-DESC : 'DESC';
+SELECT : ('S'|'s')('E'|'e')('L'|'l')('E'|'e')('C'|'c')('T'|'t');
+FROM : ('F'|'f')('R'|'r')('O'|'o')('M'|'m');
+AS : ('A'|'a')('S'|'s');
+JOIN : ('J'|'j')('O'|'o')('I'|'i')('N'|'n');
+INNER : ('I'|'i')('N'|'n')('N'|'n')('E'|'e')('R'|'r');
+OUTER : ('O'|'o')('U'|'u')('T'|'t')('E'|'e')('R'|'r');
+LEFT : ('L'|'l')('E'|'e')('F'|'f')('T'|'t');
+RIGHT : ('R'|'r')('I'|'i')('G'|'g')('H'|'h')('T'|'t');
+ON : ('O'|'o')('N'|'n');
+WHERE : ('W'|'w')('H'|'h')('E'|'e')('R'|'r')('E'|'e');
+ORDER : ('O'|'o')('R'|'r')('D'|'d')('E'|'e')('R'|'r');
+BY : ('B'|'b')('Y'|'y');
+ASC : ('A'|'a')('S'|'s')('C'|'c');
+DESC : ('D'|'d')('E'|'e')('S'|'s')('C'|'c');
 
 // ----- Operators -----
-IS : 'IS';
-NULL : 'NULL';
-AND : 'AND';
-OR : 'OR';
-NOT : 'NOT';
-IN : 'IN';
-LIKE : 'LIKE';
-ANY : 'ANY';
-CONTAINS : 'CONTAINS';
-SCORE : 'SCORE';
-IN_FOLDER : 'IN_FOLDER';
-IN_TREE : 'IN_TREE';
+IS : ('I'|'i')('S'|'s');
+NULL : ('N'|'n')('U'|'u')('L'|'l')('L'|'l');
+AND : ('A'|'a')('N'|'n')('D'|'d');
+OR : ('O'|'o')('R'|'r');
+NOT : ('N'|'n')('O'|'o')('T'|'t');
+IN : ('I'|'i')('N'|'n');
+LIKE : ('L'|'l')('I'|'i')('K'|'k')('E'|'e');
+ANY : ('A'|'a')('N'|'n')('Y'|'y');
+CONTAINS : ('C'|'c')('O'|'o')('N'|'n')('T'|'t')('A'|'a')('I'|'i')('N'|'n')('S'|'s');
+SCORE : ('S'|'s')('C'|'c')('O'|'o')('R'|'r')('E'|'e');
+IN_FOLDER : ('I'|'i')('N'|'n')'_'('F'|'f')('O'|'o')('L'|'l')('D'|'d')('E'|'e')('R'|'r');
+IN_TREE : ('I'|'i')('N'|'n')'_'('T'|'t')('R'|'r')('E'|'e')('E'|'e');
 
 STAR : '*';
 LPAR : '(';

Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g?rev=901294&r1=901293&r2=901294&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g Wed Jan 20 17:32:50 2010
@@ -50,6 +50,20 @@
 package org.apache.chemistry.cmissql;
 }
 
+@members {
+    public String errorMessage;
+
+    @Override
+    public void displayRecognitionError(String[] tokenNames,
+            RecognitionException e) {
+        if (errorMessage == null) {
+            String hdr = getErrorHeader(e);
+            String msg = getErrorMessage(e, tokenNames);
+            errorMessage = hdr + " " + msg;
+        }
+    }
+}
+
 query: SELECT^ select_list from_clause where_clause? order_by_clause?;
 
 select_list

Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g?rev=901294&r1=901293&r2=901294&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g Wed Jan 20 17:32:50 2010
@@ -53,6 +53,7 @@
 
 @members {
     public SimpleData data;
+
     public SimpleConnection connection;
 
     public String errorMessage;
@@ -61,7 +62,9 @@
     public void displayRecognitionError(String[] tokenNames,
             RecognitionException e) {
         if (errorMessage == null) {
-            errorMessage = getErrorMessage(e, tokenNames);
+            String hdr = getErrorHeader(e);
+            String msg = getErrorMessage(e, tokenNames);
+            errorMessage = hdr + " " + msg;
         }
     }
 }

Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java?rev=901294&r1=901293&r2=901294&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java Wed Jan 20 17:32:50 2010
@@ -69,7 +69,6 @@
 import org.apache.chemistry.VersioningState;
 import org.apache.chemistry.cmissql.CmisSqlLexer;
 import org.apache.chemistry.cmissql.CmisSqlParser;
-import org.apache.chemistry.impl.simple.CmisSqlSimpleWalker.query_return;
 import org.apache.chemistry.util.GregorianCalendar;
 
 public class SimpleConnection implements Connection, SPI {
@@ -782,11 +781,17 @@
                     statement.getBytes("UTF-8")));
             TokenSource lexer = new CmisSqlLexer(input);
             TokenStream tokens = new CommonTokenStream(lexer);
-            CommonTree tree = (CommonTree) new CmisSqlParser(tokens).query().getTree();
+            CmisSqlParser parser = new CmisSqlParser(tokens);
+            CmisSqlParser.query_return query = parser.query();
+            if (parser.errorMessage != null) {
+                throw new CMISRuntimeException("Cannot parse query: "
+                        + statement + " (" + parser.errorMessage + ")");
+            }
+            CommonTree tree = (CommonTree) query.getTree();
             CommonTreeNodeStream nodes = new CommonTreeNodeStream(tree);
             nodes.setTokenStream(tokens);
             CmisSqlSimpleWalker walker = new CmisSqlSimpleWalker(nodes);
-            query_return res = walker.query(data, this);
+            CmisSqlSimpleWalker.query_return res = walker.query(data, this);
             if (walker.errorMessage != null) {
                 throw new CMISRuntimeException("Cannot parse query: "
                         + statement + " (" + walker.errorMessage + ")");

Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite?rev=901294&r1=901293&r2=901294&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite Wed Jan 20 17:32:50 2010
@@ -59,7 +59,7 @@
 "-123" OK
 "0" OK
 "0123" FAIL
-"abc123" FAIL
+"abc123" OK
 "123abc" FAIL
 "'abc'" OK
 

Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java?rev=901294&r1=901293&r2=901294&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java Wed Jan 20 17:32:50 2010
@@ -270,6 +270,9 @@
         Collection<CMISObject> res = conn.query("SELECT * FROM cmis:folder",
                 false);
         assertEquals(1, res.size()); // the root
+        // case insensitive on keywords and types
+        res = conn.query("seLect * fRoM cmis:Folder", false);
+        assertEquals(1, res.size());
         res = conn.query("SELECT * FROM fold", false);
         assertEquals(0, res.size());
         res = conn.query("SELECT * FROM doc", false);