Merge branch 'pr-1885'

This commit is contained in:
Andreas Dangel
2019-06-28 22:00:02 +02:00
3 changed files with 36 additions and 20 deletions

View File

@ -27,7 +27,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/**
* Various fixes for expression lists, join clauses
* Various fixes for expression lists, join clauses, case expression
*
* Hugo Araya Nash 06/2019
*====================================================================
@ -2870,24 +2870,14 @@ ASTAssignment Assignment() :
}
ASTCaseExpression CaseExpression() :
{ Token thisToken; PLSQLNode simpleNode = null; StringBuilder sb = new StringBuilder() ; }
{}
{
(
thisToken = <CASE> { sb.append(thisToken.image);}
( simpleNode = Expression() { sb.append(" "); sb.append(simpleNode.getImage()); } )?
( thisToken = <WHEN> { sb.append(" "); sb.append(thisToken.image); }
simpleNode = Expression() { sb.append(" "); sb.append(simpleNode.getImage()); }
thisToken = <THEN> { sb.append(" "); sb.append(thisToken.image); }
Expression() { sb.append(" "); sb.append(simpleNode.getImage()); }
)+
[ thisToken = <ELSE> { sb.append(" "); sb.append(thisToken.image);}
Expression() { sb.append(" "); sb.append(simpleNode.getImage()); }
]
thisToken = <END> { sb.append(" "); sb.append(thisToken.image);}
)
{
jjtThis.setImage(sb.toString()); return jjtThis;
}
<CASE>
( Expression() ( <WHEN> Expression() <THEN> Expression() )+
| ( <WHEN> Condition() <THEN> Expression() )+ )
[ <ELSE> Expression() ]
<END>
{ return jjtThis; }
}
/*
@ -3260,7 +3250,7 @@ ASTPrimaryPrefix PrimaryPrefix() :
// Note: AnalyticClause and WithinClause are only allowed for specific functions, but this grammar allows it for all functions.
LOOKAHEAD(FunctionName() "(") ( simpleNode = FunctionCall() [ AnalyticClause() ] [ WithinClause() ] ) { sb.append(simpleNode.getImage()); }
| LOOKAHEAD(MultiSetCondition()) simpleNode = MultiSetCondition()
| LOOKAHEAD(CaseExpression()) ( simpleNode =CaseExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110520
| LOOKAHEAD(<CASE>) ( simpleNode =CaseExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110520
| LOOKAHEAD(ObjectExpression() ) ( simpleNode = ObjectExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110604
//| LOOKAHEAD(LikeExpression()) ( simpleNode = LikeExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110604
| LOOKAHEAD(Literal()) ( simpleNode = Literal() ) { sb.append(simpleNode.getImage()) ; }

View File

@ -84,5 +84,28 @@ SELECT CASE
INTO my_result
FROM DUAL;
SELECT CASE WHEN EXISTS(SELECT *
FROM DUAL
WHERE 1 = 1)
THEN 1
ELSE 0
END isExists
INTO VAL
FROM dual;
SELECT CASE WHEN EXISTS(SELECT *
FROM DUAL)
THEN 1
ELSE 0
END isExists
INTO VAL
FROM dual;
SELECT CASE
WHEN f1(x) IS NULL THEN 1
ELSE 0
END isExists
INTO VAL
FROM dual;
END;
/