lincoln-lil commented on code in PR #20242:
URL: https://github.com/apache/flink/pull/20242#discussion_r923342921
##########
flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl:
##########
@@ -2203,3 +2203,94 @@ SqlNode TryCastFunctionCall() :
return operator.createCall(s.end(this), args);
}
}
+
+/**
+* Parses a partition key/value,
+* e.g. p or p = '10'.
+*/
+SqlPartitionSpecProperty PartitionSpecProperty():
+{
+ final SqlParserPos pos;
+ final SqlIdentifier key;
+ SqlNode value = null;
+}
+{
+ key = SimpleIdentifier() { pos = getPos(); }
+ [
+ LOOKAHEAD(1)
+ <EQ> value = Literal()
+ ]
+ {
+ return new SqlPartitionSpecProperty(key, value, pos);
+ }
+}
+
+/**
+* Parses a partition specifications statement,
+* e.g. ANALYZE TABLE tbl1 partition(col1='val1', col2='val2') xxx
+* or
+* ANALYZE TABLE tbl1 partition(col1, col2) xxx.
+*/
+void ExtendedPartitionSpecCommaList(SqlNodeList list) :
+{
+ SqlPartitionSpecProperty property;
+}
+{
+ <LPAREN>
+ property = PartitionSpecProperty()
+ {
+ list.add(property);
+ }
+ (
+ <COMMA> property = PartitionSpecProperty()
+ {
+ list.add(property);
+ }
+ )*
+ <RPAREN>
+}
+
+/** Parses a comma-separated list of simple identifiers with position. */
+SqlNodeList SimpleIdentifierCommaListWithPosition() :
+{
+ final Span s;
+ final List<SqlNode> list = new ArrayList<SqlNode>();
+}
+{
+ { s = span(); }
+ SimpleIdentifierCommaList(list) {
+ return new SqlNodeList(list, s.end(this));
+ }
+}
+
+/** Parses an ANALYZE TABLE statement. */
+SqlNode SqlAnalyzeTable():
+{
+ final Span s;
+ final SqlIdentifier tableName;
+ SqlNodeList partitionSpec = SqlNodeList.EMPTY;
+ SqlNodeList columns = SqlNodeList.EMPTY;
+ boolean allColumns = false;
+}
+{
+ <ANALYZE> <TABLE> { s = span(); }
+ tableName = CompoundIdentifier()
+ [
+ <PARTITION> {
+ partitionSpec = new SqlNodeList(getPos());
+ ExtendedPartitionSpecCommaList(partitionSpec);
Review Comment:
May this be simplified by reusing existing helpers?
e.g.,
```
(
LOOKAHEAD...
partitionSpec = ParenthesizedKeyValueOptionCommaList()
|
LOOKAHEAD...
partitionSpec = ParenthesizedSimpleIdentifierList()
)
```
The grammar seems a subset of hints
```
hintComment:
'/*+' hint [, hint ]* '*/'
hint:
hintName
| hintName '(' optionKey '=' optionVal [, optionKey '=' optionVal ]* ')'
| hintName '(' hintOption [, hintOption ]* ')'
optionKey:
simpleIdentifier
| stringLiteral
optionVal:
stringLiteral
hintOption:
simpleIdentifier
| numericLiteral
| stringLiteral
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]