You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2014/12/15 11:38:59 UTC
svn commit: r1645616 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java
Author: thomasm
Date: Mon Dec 15 10:38:58 2014
New Revision: 1645616
URL: http://svn.apache.org/r1645616
Log:
OAK-2354 Support comments anywhere in a SQL-2 statement
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1645616&r1=1645615&r2=1645616&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java Mon Dec 15 10:38:58 2014
@@ -63,7 +63,8 @@ public class SQL2Parser {
private static final Logger LOG = LoggerFactory.getLogger(SQL2Parser.class);
// Character types, used during the tokenizer phase
- private static final int CHAR_END = -1, CHAR_VALUE = 2, CHAR_QUOTED = 3;
+ private static final int CHAR_END = -1, CHAR_IGNORE = 0;
+ private static final int CHAR_VALUE = 2, CHAR_QUOTED = 3;
private static final int CHAR_NAME = 4, CHAR_SPECIAL_1 = 5, CHAR_SPECIAL_2 = 6;
private static final int CHAR_STRING = 7, CHAR_DECIMAL = 8, CHAR_BRACKETED = 9;
@@ -155,7 +156,6 @@ public class SQL2Parser {
read("BY");
orderings = parseOrder();
}
- parseComment();
if (!currentToken.isEmpty()) {
throw getSyntaxError("<end>");
}
@@ -920,18 +920,6 @@ public class SQL2Parser {
}
}
- private void parseComment() throws ParseException {
- if (readIf("/") && readIf("*")) {
- //skip to the end directly
- parseIndex = characterTypes.length - 3;
- read();
- boolean endComment = readIf("*") && readIf("/");
- if (!endComment) {
- throw getSyntaxError("end of comment");
- }
- }
- }
-
private boolean readIf(String token) throws ParseException {
if (isToken(token)) {
read();
@@ -987,7 +975,6 @@ public class SQL2Parser {
char c = command[i];
int type = 0;
switch (c) {
- case '/':
case '-':
case '(':
case ')':
@@ -1013,6 +1000,21 @@ public class SQL2Parser {
case '.':
type = CHAR_DECIMAL;
break;
+ case '/':
+ if (command[i + 1] != '*') {
+ type = CHAR_SPECIAL_1;
+ break;
+ }
+ types[i] = type = CHAR_IGNORE;
+ startLoop = i;
+ i += 2;
+ checkRunOver(i, len, startLoop);
+ while (command[i] != '*' || command[i + 1] != '/') {
+ i++;
+ checkRunOver(i, len, startLoop);
+ }
+ i++;
+ break;
case '[':
types[i] = type = CHAR_BRACKETED;
startLoop = i;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java?rev=1645616&r1=1645615&r2=1645616&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java Mon Dec 15 10:38:58 2014
@@ -183,7 +183,9 @@ public class Statement {
// leave original xpath string as a comment
if (xpathQuery != null) {
buff.append(" /* xpath: ");
- buff.append(xpathQuery);
+ // the xpath query may not contain the "end comment" marker
+ String xpathEscaped = xpathQuery.replaceAll("\\*\\/", "* /");
+ buff.append(xpathEscaped);
buff.append(" */");
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java?rev=1645616&r1=1645615&r2=1645616&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java Mon Dec 15 10:38:58 2014
@@ -41,6 +41,9 @@ public class SQL2ParserTest {
public void testIgnoreSqlComment() throws ParseException {
p.parse("select * from [nt:unstructured] /* sql comment */");
p.parse("select [jcr:path], [jcr:score], * from [nt:base] as a /* xpath: //* */");
+ p.parse("/* begin query */ select [jcr:path] /* this is the path */, " +
+ "[jcr:score] /* the score */, * /* everything*/ " +
+ "from [nt:base] /* all node types */ as a /* an identifier */");
}
@Test(expected = ParseException.class)