Skip to content

Commit 0cc809e

Browse files
committed
cleaned up some lookaheads
1 parent 36a4a0f commit 0cc809e

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1505,7 +1505,7 @@ Expression Expression() #Expression :
15051505
}
15061506
{
15071507
(
1508-
LOOKAHEAD(OrExpression())
1508+
LOOKAHEAD(3)
15091509
retval=OrExpression()
15101510
|
15111511
"(" retval=Expression() ")" {retval = new Parenthesis(retval); }
@@ -1662,7 +1662,7 @@ Expression InExpression() :
16621662
Expression leftExpression = null;
16631663
}
16641664
{
1665-
( LOOKAHEAD(1) "(" (
1665+
( LOOKAHEAD(3) "(" (
16661666
LOOKAHEAD(SimpleExpressionList()) leftItemsList = SimpleExpressionList() { result.setLeftItemsList(leftItemsList); }
16671667
|
16681668
leftExpression=SimpleExpression()
@@ -1673,7 +1673,7 @@ Expression InExpression() :
16731673
leftExpression=SimpleExpression() { result.setLeftExpression(leftExpression); }
16741674
[ "(" "+" ")" { result.setOldOracleJoinSyntax(EqualsTo.ORACLE_JOIN_RIGHT); } ]
16751675
)
1676-
[<K_NOT> { result.setNot(true); } ] <K_IN> "(" (LOOKAHEAD(SubSelect()) rightItemsList=SubSelect() | rightItemsList=SimpleExpressionList() ) ")"
1676+
[<K_NOT> { result.setNot(true); } ] <K_IN> "(" (LOOKAHEAD(3) rightItemsList=SubSelect() | rightItemsList=SimpleExpressionList() ) ")"
16771677
{
16781678
result.setRightItemsList(rightItemsList);
16791679
return result;
@@ -1839,7 +1839,7 @@ Expression SimpleExpression():
18391839
}
18401840
{
18411841
(
1842-
LOOKAHEAD(BitwiseAndOr())
1842+
LOOKAHEAD(2)
18431843
retval=BitwiseAndOr()
18441844
|
18451845
"(" retval=BitwiseAndOr() ")" {retval = new Parenthesis(retval); }
@@ -1883,11 +1883,11 @@ Expression BitwiseAndOr():
18831883
{
18841884
leftExpression=ConcatExpression() { result = leftExpression; }
18851885
(
1886-
LOOKAHEAD(2) (
1886+
(
18871887
"|" { result = new BitwiseOr(); }
18881888
|
18891889
"&" { result = new BitwiseAnd(); }
1890-
)
1890+
)
18911891

18921892
rightExpression=ConcatExpression()
18931893

@@ -1911,7 +1911,7 @@ Expression AdditiveExpression():
19111911
{
19121912
leftExpression=MultiplicativeExpression() { result = leftExpression; }
19131913
(
1914-
LOOKAHEAD(2) ("+" { result = new Addition(); }
1914+
("+" { result = new Addition(); }
19151915
| "-" { result = new Subtraction(); } )
19161916

19171917
rightExpression=MultiplicativeExpression()
@@ -1934,7 +1934,7 @@ Expression MultiplicativeExpression():
19341934
}
19351935
{
19361936
(
1937-
LOOKAHEAD(BitwiseXor())
1937+
LOOKAHEAD(2)
19381938
leftExpression=BitwiseXor()
19391939
|
19401940
"(" leftExpression=ConcatExpression() ")" {leftExpression = new Parenthesis(leftExpression); }
@@ -1947,7 +1947,7 @@ Expression MultiplicativeExpression():
19471947
)
19481948

19491949
(
1950-
LOOKAHEAD(BitwiseXor())
1950+
LOOKAHEAD(2)
19511951
rightExpression=BitwiseXor()
19521952
|
19531953
"(" rightExpression=ConcatExpression() ")" {rightExpression = new Parenthesis(rightExpression); }
@@ -2031,9 +2031,9 @@ Expression PrimaryExpression():
20312031

20322032
| LOOKAHEAD(["+" | "-"] Column()) [sign="+" | sign="-"] retval=Column()
20332033

2034-
| LOOKAHEAD([sign="+" | sign="-"] "(" SubSelect() ")") [sign="+" | sign="-"] "(" retval=SubSelect() ")"
2034+
| LOOKAHEAD(["+" | "-"] "(" BitwiseAndOr() ")") [sign="+" | sign="-"] "(" retval=BitwiseAndOr() ")" {retval = new Parenthesis(retval); }
20352035

2036-
| LOOKAHEAD([sign="+" | sign="-"] "(" retval=BitwiseAndOr() ")") [sign="+" | sign="-"] "(" retval=BitwiseAndOr() ")" {retval = new Parenthesis(retval); }
2036+
| LOOKAHEAD(["+" | "-"] "(" SubSelect() ")") [sign="+" | sign="-"] "(" retval=SubSelect() ")"
20372037

20382038
| token=<S_CHAR_LITERAL> { retval = new StringValue(token.image); }
20392039

src/test/java/net/sf/jsqlparser/test/select/SelectTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2075,4 +2075,32 @@ public void testIssue151_tableFunction() throws JSQLParserException {
20752075
public void testIssue217_keywordSeparator() throws JSQLParserException {
20762076
assertSqlCanBeParsedAndDeparsed("SELECT Separator");
20772077
}
2078+
2079+
// public void testIssue215_possibleEndlessParsing() throws JSQLParserException {
2080+
// assertSqlCanBeParsedAndDeparsed("SELECT (CASE WHEN ((value LIKE '%t1%') OR (value LIKE '%t2%')) THEN 't1s' WHEN ((((((((((((((((((((((((((((value LIKE '%t3%') OR (value LIKE '%t3%')) OR (value LIKE '%t3%')) OR (value LIKE '%t4%')) OR (value LIKE '%t4%')) OR (value LIKE '%t5%')) OR (value LIKE '%t6%')) OR (value LIKE '%t6%')) OR (value LIKE '%t7%')) OR (value LIKE '%t7%')) OR (value LIKE '%t7%')) OR (value LIKE '%t8%')) OR (value LIKE '%t8%')) OR (value LIKE '%CTO%')) OR (value LIKE '%cto%')) OR (value LIKE '%Cto%')) OR (value LIKE '%t9%')) OR (value LIKE '%t9%')) OR (value LIKE '%COO%')) OR (value LIKE '%coo%')) OR (value LIKE '%Coo%')) OR (value LIKE '%t10%')) OR (value LIKE '%t10%')) OR (value LIKE '%CIO%')) OR (value LIKE '%cio%')) OR (value LIKE '%Cio%')) OR (value LIKE '%t11%')) OR (value LIKE '%t11%')) THEN 't' WHEN ((((value LIKE '%t12%') OR (value LIKE '%t12%')) OR (value LIKE '%VP%')) OR (value LIKE '%vp%')) THEN 'Vice t12s' WHEN ((((((value LIKE '% IT %') OR (value LIKE '%t13%')) OR (value LIKE '%t13%')) OR (value LIKE '% it %')) OR (value LIKE '%tech%')) OR (value LIKE '%Tech%')) THEN 'IT' WHEN ((((value LIKE '%Analyst%') OR (value LIKE '%t14%')) OR (value LIKE '%Analytic%')) OR (value LIKE '%analytic%')) THEN 'Analysts' WHEN ((value LIKE '%Manager%') OR (value LIKE '%manager%')) THEN 't15' ELSE 'Other' END) FROM tab1");
2081+
// }
2082+
//
2083+
// public void testIssue215_possibleEndlessParsing2() throws JSQLParserException {
2084+
// assertSqlCanBeParsedAndDeparsed("SELECT (CASE WHEN ((value LIKE '%t1%') OR (value LIKE '%t2%')) THEN 't1s' ELSE 'Other' END) FROM tab1");
2085+
// }
2086+
2087+
// public void testIssue215_possibleEndlessParsing3() throws JSQLParserException {
2088+
// assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable WHERE ((((((((((((((((((((((((((((value LIKE '%t3%') OR (value LIKE '%t3%')) OR (value LIKE '%t3%')) OR (value LIKE '%t4%')) OR (value LIKE '%t4%')) OR (value LIKE '%t5%')) OR (value LIKE '%t6%')) OR (value LIKE '%t6%')) OR (value LIKE '%t7%')) OR (value LIKE '%t7%')) OR (value LIKE '%t7%')) OR (value LIKE '%t8%')) OR (value LIKE '%t8%')) OR (value LIKE '%CTO%')) OR (value LIKE '%cto%')) OR (value LIKE '%Cto%')) OR (value LIKE '%t9%')) OR (value LIKE '%t9%')) OR (value LIKE '%COO%')) OR (value LIKE '%coo%')) OR (value LIKE '%Coo%')) OR (value LIKE '%t10%')) OR (value LIKE '%t10%')) OR (value LIKE '%CIO%')) OR (value LIKE '%cio%')) OR (value LIKE '%Cio%')) OR (value LIKE '%t11%')) OR (value LIKE '%t11%'))");
2089+
// }
2090+
//
2091+
// public void testIssue215_possibleEndlessParsing4() throws JSQLParserException {
2092+
// assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable WHERE ((value LIKE '%t3%') OR (value LIKE '%t3%'))");
2093+
// }
2094+
2095+
public void testIssue215_possibleEndlessParsing5() throws JSQLParserException {
2096+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable WHERE ((((((value LIKE '%t3%') OR (value LIKE '%t3%')) OR (value LIKE '%t3%')) OR (value LIKE '%t4%')) OR (value LIKE '%t4%')) OR (value LIKE '%t5%'))");
2097+
}
2098+
2099+
public void testIssue215_possibleEndlessParsing6() throws JSQLParserException {
2100+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable WHERE (((((((((((((value LIKE '%t3%') OR (value LIKE '%t3%')) OR (value LIKE '%t3%')) OR (value LIKE '%t4%')) OR (value LIKE '%t4%')) OR (value LIKE '%t5%')) OR (value LIKE '%t6%')) OR (value LIKE '%t6%')) OR (value LIKE '%t7%')) OR (value LIKE '%t7%')) OR (value LIKE '%t7%')) OR (value LIKE '%t8%')) OR (value LIKE '%t8%'))");
2101+
}
2102+
2103+
// public void testIssue215_possibleEndlessParsing7() throws JSQLParserException {
2104+
// assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable WHERE (((((((((((((((((((((value LIKE '%t3%') OR (value LIKE '%t3%')) OR (value LIKE '%t3%')) OR (value LIKE '%t4%')) OR (value LIKE '%t4%')) OR (value LIKE '%t5%')) OR (value LIKE '%t6%')) OR (value LIKE '%t6%')) OR (value LIKE '%t7%')) OR (value LIKE '%t7%')) OR (value LIKE '%t7%')) OR (value LIKE '%t8%')) OR (value LIKE '%t8%')) OR (value LIKE '%CTO%')) OR (value LIKE '%cto%')) OR (value LIKE '%Cto%')) OR (value LIKE '%t9%')) OR (value LIKE '%t9%')) OR (value LIKE '%COO%')) OR (value LIKE '%coo%')) OR (value LIKE '%Coo%'))");
2105+
// }
20782106
}

0 commit comments

Comments
 (0)