Author: shawkins
Date: 2011-10-21 16:18:54 -0400 (Fri, 21 Oct 2011)
New Revision: 3575
Modified:
trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java
Log:
TEIID-1790 fix for substring parsing
Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2011-10-20 17:09:57
UTC (rev 3574)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2011-10-21 20:18:54
UTC (rev 3575)
@@ -3588,6 +3588,7 @@
Expression expression = null;
ArrayList args = new ArrayList(2);
+ ArrayList otherArgs = null;
Token funcToken = null;
}
{
@@ -3620,14 +3621,14 @@
<RPAREN>
)
|
- LOOKAHEAD(4, {getToken(1).image.equalsIgnoreCase("SUBSTRING")}) (
+ LOOKAHEAD(2, {getToken(1).image.equalsIgnoreCase("SUBSTRING")}) (
funcName = nonReserved("SUBSTRING")
<LPAREN>
expression = expression(info)
{
args.add(expression);
}
- <FROM> expression = expression(info)
+ ((<FROM> expression = expression(info)
{
args.add(expression);
}
@@ -3635,7 +3636,7 @@
{
args.add(expression);
}
- ]
+ ])|(<COMMA> otherArgs = expressionList(info)) {args.addAll(otherArgs);})
<RPAREN>
)
|
Modified: trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java 2011-10-20 17:09:57
UTC (rev 3574)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java 2011-10-21 20:18:54
UTC (rev 3575)
@@ -6862,5 +6862,11 @@
@Test public void testTrim1() {
helpException("select trim('xy' from e1) from pm1.g1");
}
+
+ @Test public void testSubString() throws QueryParserException {
+ Query actualCommand = (Query)QueryParser.getQueryParser().parseCommand("SELECT
substring(RTRIM(MED.BATDAT), 4, 4) FROM FCC.MEDMAS AS MED", new ParseInfo());
+ String actualString = actualCommand.toString();
+ assertEquals("SELECT substring(RTRIM(MED.BATDAT), 4, 4) FROM FCC.MEDMAS AS
MED", actualString);
+ }
}
Show replies by thread