[jOOQ/jOOQ#10572] Support DELETE with aliasing

This commit is contained in:
Lukas Eder 2020-11-27 16:24:25 +01:00
parent a6461d6311
commit cd3ab3ffa6

View File

@ -1905,14 +1905,16 @@ final class ParserImpl implements Parser {
parseKeywordIf(ctx, "FROM");
Table<?> table = parseTableNameIf(ctx);
if (table == null) {
if (table == null)
table = table(parseSelect(ctx));
if (parseKeywordIf(ctx, "AS"))
table = table.as(parseIdentifier(ctx));
else if (!peekKeyword(ctx, "WHERE", "ORDER BY", "LIMIT", "RETURNING"))
table = table.as(parseIdentifierIf(ctx));
}
Name alias;
if (parseKeywordIf(ctx, "AS"))
table = table.as(parseIdentifier(ctx));
else if (!peekKeyword(ctx, "USING", "WHERE", "ORDER BY", "LIMIT", "RETURNING")
&& !peekKeyword(ctx, KEYWORDS_IN_STATEMENTS)
&& (alias = parseIdentifierIf(ctx)) != null)
table = table.as(alias);
ctx.scope(table);
@ -5864,7 +5866,7 @@ final class ParserImpl implements Parser {
if (parseKeywordIf(ctx, "AS"))
alias = parseIdentifier(ctx);
else if (!peekKeyword(ctx, KEYWORDS_IN_FROM))
else if (!peekKeyword(ctx, KEYWORDS_IN_FROM) && !peekKeyword(ctx, KEYWORDS_IN_STATEMENTS))
alias = parseIdentifierIf(ctx);
if (alias != null) {
@ -6153,7 +6155,7 @@ final class ParserImpl implements Parser {
if (parseKeywordIf(ctx, "AS"))
alias = parseIdentifier(ctx, true);
else if (!peekKeyword(ctx, KEYWORDS_IN_SELECT))
else if (!peekKeyword(ctx, KEYWORDS_IN_SELECT) && !peekKeyword(ctx, KEYWORDS_IN_STATEMENTS))
alias = parseIdentifierIf(ctx, true);
}
@ -12020,16 +12022,32 @@ final class ParserImpl implements Parser {
REGR_SXY,
}
private static final String[] KEYWORDS_IN_SELECT = {
private static final String[] KEYWORDS_IN_STATEMENTS = {
"ALTER",
"BEGIN",
"COMMENT",
"CONNECT BY",
"CREATE",
"DECLARE",
"DELETE",
"DROP",
"END",
"END", // In T-SQL, semicolons are optional, so a T-SQL END clause might appear
"GO", // The T-SQL statement batch delimiter, not a SELECT keyword
"GRANT",
"INSERT",
"MERGE",
"RENAME",
"REVOKE",
"SELECT",
"SET",
"TRUNCATE",
"UPDATE",
"USE",
"VALUES",
"WITH",
};
private static final String[] KEYWORDS_IN_SELECT = {
"CONNECT BY",
"EXCEPT",
"FETCH FIRST",
"FETCH NEXT",
@ -12040,49 +12058,29 @@ final class ParserImpl implements Parser {
"FOR UPDATE",
"FOR XML",
"FROM",
"GO",
"GRANT",
"GROUP BY",
"HAVING",
"INSERT",
"INTERSECT",
"INTO",
"LIMIT",
"MERGE",
"MINUS",
"OFFSET",
"ORDER BY",
"PARTITION BY",
"QUALIFY",
"RENAME",
"RETURNING",
"REVOKE",
"ROWS",
"SELECT",
"SET",
"START WITH",
"TRUNCATE",
"UNION",
"UPDATE",
"USE",
"VALUES",
"WHERE",
"WINDOW",
"WITH",
};
private static final String[] KEYWORDS_IN_FROM = {
"ALTER",
"BEGIN",
"COMMENT",
private static final String[] KEYWORDS_IN_FROM = {
"CONNECT BY",
"CREATE",
"CROSS APPLY",
"CROSS JOIN",
"DECLARE",
"DELETE",
"DROP",
"END", // In T-SQL, semicolons are optional, so a T-SQL END clause might appear
"EXCEPT",
"FETCH FIRST",
"FETCH NEXT",
@ -12094,12 +12092,9 @@ final class ParserImpl implements Parser {
"FOR XML",
"FULL JOIN",
"FULL OUTER JOIN",
"GO", // The T-SQL statement batch delimiter, not a SELECT keyword
"GRANT",
"GROUP BY",
"HAVING",
"INNER JOIN",
"INSERT",
"INTERSECT",
"INTO",
"JOIN",
@ -12108,7 +12103,6 @@ final class ParserImpl implements Parser {
"LEFT OUTER JOIN",
"LEFT SEMI JOIN",
"LIMIT",
"MERGE",
"MINUS",
"NATURAL FULL JOIN",
"NATURAL FULL OUTER JOIN",
@ -12124,27 +12118,18 @@ final class ParserImpl implements Parser {
"OUTER APPLY",
"PARTITION BY",
"QUALIFY",
"RENAME",
"RETURNING",
"REVOKE",
"RIGHT ANTI JOIN",
"RIGHT JOIN",
"RIGHT OUTER JOIN",
"RIGHT SEMI JOIN",
"ROWS",
"SELECT",
"SET",
"START WITH",
"STRAIGHT_JOIN",
"TRUNCATE",
"UNION",
"UPDATE",
"USE",
"USING",
"VALUES",
"WHERE",
"WINDOW",
"WITH",
};
private static final String[] PIVOT_KEYWORDS = {