[plsql] Refactor ExtractExpression

* Separate helper productions for datetime/xml
* Use StringLiteral for xpath and namespace
This commit is contained in:
Andreas Dangel
2020-03-05 12:02:56 +01:00
parent 69025d7522
commit 3329374214
5 changed files with 116 additions and 6 deletions

View File

@@ -27,6 +27,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/**
* Add support for XMLROOT, improve ExtractExpression to support xml
*
* Piotr Szymanski 03/2020
*====================================================================
* Add basic support for with clause in select statements
*
* Andreas Dangel 09/2019
@@ -3241,7 +3245,16 @@ ASTUnaryExpression UnaryExpression(boolean isUnarySign) #UnaryExpression(>1) :
ASTExtractExpression ExtractExpression() :
{}
{
LOOKAHEAD(4)
LOOKAHEAD(4) ExtractDatetime() { return jjtThis ; }
|
LOOKAHEAD(3) ExtractXml(jjtThis) { return jjtThis ; }
}
/**
* See https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/EXTRACT-datetime.html#GUID-36E52BF8-945D-437D-9A3C-6860CABD210E
*/
void ExtractDatetime() #void : {}
{
<EXTRACT> "("
( <MONTH> | <YEAR> | <DAY> |<HOUR> | <MINUTE> | <SECOND>
| <TIMEZONE_HOUR> | <TIMEZONE_MINUTE>
@@ -3254,10 +3267,17 @@ ASTExtractExpression ExtractExpression() :
|
LOOKAHEAD(Name()) Name()
) ")"
{ return jjtThis ; }
|
LOOKAHEAD(3) <EXTRACT> "(" Argument() "," Expression() ["," SchemaName() ] ")"
{ return jjtThis ; }
}
/**
* See https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/EXTRACT-XML.html#GUID-593295AA-4F46-4D75-B8DC-E7BCEDB1D4D7
*/
void ExtractXml(ASTExtractExpression extractExpr) #void :
{
extractExpr.setXml();
}
{
<EXTRACT> "(" Argument() "," StringLiteral() ["," StringLiteral() ] ")"
}
ASTUnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() #UnaryExpressionNotPlusMinus(>1) :