Skip to content

Commit 80153df

Browse files
committed
1 parent 1a3d289 commit 80153df

File tree

2 files changed

+63
-5
lines changed

2 files changed

+63
-5
lines changed

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

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2149,6 +2149,22 @@ Expression Condition():
21492149
{ return not?new NotExpression(result):result; }
21502150
}
21512151

2152+
Expression LightCondition():
2153+
{
2154+
Expression result;
2155+
Token token;
2156+
boolean not = false;
2157+
}
2158+
{
2159+
[ <K_NOT> { not = true; }]
2160+
(
2161+
LOOKAHEAD(RegularCondition()) result=RegularCondition()
2162+
| result=SimpleExpression()
2163+
)
2164+
2165+
{ return not?new NotExpression(result):result; }
2166+
}
2167+
21522168
Expression RegularCondition() #RegularCondition:
21532169
{
21542170
Expression result = null;
@@ -2349,6 +2365,20 @@ ExpressionList SimpleExpressionList() #ExpressionList:
23492365
}
23502366
}
23512367

2368+
ExpressionList ConditionExpressionList() #ExpressionList:
2369+
{
2370+
ExpressionList retval = new ExpressionList();
2371+
List<Expression> expressions = new ArrayList<Expression>();
2372+
Expression expr = null;
2373+
}
2374+
{
2375+
expr=Condition() { expressions.add(expr); } ("," expr=Condition() { expressions.add(expr); })*
2376+
{
2377+
retval.setExpressions(expressions);
2378+
return retval;
2379+
}
2380+
}
2381+
23522382
// trim( [leading|trailing|both] expr from expr)
23532383
// The [leading|trailing|both] token has already been consumed
23542384
NamedExpressionList NamedExpressionList1():
@@ -2678,7 +2708,7 @@ Expression PrimaryExpression() #PrimaryExpression:
26782708

26792709
| LOOKAHEAD(2) retval = IntervalExpression()
26802710

2681-
| retval=Column()
2711+
| retval=Column()
26822712

26832713
| LOOKAHEAD("(" SimpleExpression() ")") "(" retval=SimpleExpression() ")" {retval = new Parenthesis(retval); }
26842714

@@ -3071,15 +3101,17 @@ Function Function() #Function:
30713101
funcName=RelObjectNameExt()
30723102

30733103
[ "." tmp=RelObjectNameExt() { funcName+= "." + tmp; } ["." tmp=RelObjectNameExt() { funcName+= "." + tmp; }]]
3074-
"(" [ [<K_DISTINCT> { retval.setDistinct(true); } | <K_ALL> { retval.setAllColumns(true); }]
3104+
"(" [ [ LOOKAHEAD(2)(<K_DISTINCT> { retval.setDistinct(true); } | <K_ALL> { retval.setAllColumns(true); }) ]
30753105
( LOOKAHEAD(4)
3106+
"*" { retval.setAllColumns(true); }
3107+
|
30763108
namedExpressionList=NamedExpressionList1()
30773109
|
30783110
LOOKAHEAD(NamedExpressionListExprFirst()) namedExpressionList = NamedExpressionListExprFirst()
3079-
|
3080-
LOOKAHEAD(3) expressionList=SimpleExpressionList()
30813111
|
3082-
"*" { retval.setAllColumns(true); }
3112+
LOOKAHEAD(SimpleExpressionList()) expressionList=SimpleExpressionList()
3113+
//|
3114+
//LOOKAHEAD(ConditionExpressionList()) expressionList=ConditionExpressionList()
30833115
|
30843116
expr = SubSelect() { expr.setUseBrackets(false); expressionList = new ExpressionList(expr); }
30853117
)]

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,24 @@
2626
import static org.junit.Assert.assertNull;
2727
import static org.junit.Assert.assertTrue;
2828
import static org.junit.Assert.fail;
29+
import org.junit.Before;
2930
import org.junit.Ignore;
31+
import org.junit.Rule;
3032
import org.junit.Test;
33+
import org.junit.rules.TestName;
3134

3235
public class SelectTest {
3336

37+
@Rule
38+
public TestName name = new TestName();
39+
3440
private final CCJSqlParserManager parserManager = new CCJSqlParserManager();
3541

42+
@Before
43+
public void setup() {
44+
System.out.println(name.getMethodName());
45+
}
46+
3647
// From statement multipart
3748
@Test
3849
public void testMultiPartTableNameWithServerNameAndDatabaseNameAndSchemaName() throws Exception {
@@ -3361,6 +3372,21 @@ public void testOptimizeForIssue348() throws JSQLParserException {
33613372
assertSqlCanBeParsedAndDeparsed("SELECT * FROM EMP ORDER BY SALARY DESC OPTIMIZE FOR 20 ROWS");
33623373
}
33633374

3375+
@Test
3376+
public void testFuncConditionParameter() throws JSQLParserException {
3377+
assertSqlCanBeParsedAndDeparsed("SELECT func(a < b)");
3378+
}
3379+
3380+
@Test
3381+
public void testFuncConditionParameter2() throws JSQLParserException {
3382+
assertSqlCanBeParsedAndDeparsed("SELECT func(a < b, c)");
3383+
}
3384+
3385+
@Test
3386+
public void testFuncConditionParameter3() throws JSQLParserException {
3387+
assertSqlCanBeParsedAndDeparsed("SELECT CAST((MAX(CAST(IIF(isnumeric(license_no) = 1, license_no, 0) AS INT )) + 2) as varchar) FROM lcps.t_license WHERE profession_id = 60 and license_type = 100 and YEAR(issue_date) % 2 = case when YEAR(issue_date) % 2 = 0 then 0 else 1 end and ISNUMERIC(license_no) = 1");
3388+
}
3389+
33643390
@Test
33653391
public void testRawStringExpressionIssue656() throws JSQLParserException {
33663392
for (String c : new String[]{"u", "e", "n", "r", "b", "rb"}) {

0 commit comments

Comments
 (0)