diff --git a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt index 569c203b6b..715adbf794 100644 --- a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt +++ b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt @@ -192,7 +192,7 @@ revokeStatement = 'REVOKE' 'FROM' ( userName | roleName | 'PUBLIC') ; -selectStatement = select | values [ correlationName ] +selectStatement = select ; insertStatement = [ with ] 'INSERT INTO' tableName @@ -305,6 +305,7 @@ select = [ orderBy ] [ offsetFetch ] [ forUpdate ] +| values ; queryExpressionBody = diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 8679fc2f95..db50582a4c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -669,7 +669,7 @@ final class ParserImpl implements Parser { case 'v': case 'V': if (!parseSelect && peekKeyword(ctx, "VALUES")) - return ctx.dsl.selectFrom(parseTableValueConstructor(ctx)); + return parseSelect(ctx); case 'w': case 'W': @@ -911,6 +911,9 @@ final class ParserImpl implements Parser { return result; } + if (peekKeyword(ctx, "VALUES")) + return (SelectQueryImpl) ctx.dsl.selectQuery(parseTableValueConstructor(ctx)); + parseKeyword(ctx, "SELECT"); String hints = parseHints(ctx); boolean distinct = parseKeywordIf(ctx, "DISTINCT") || parseKeywordIf(ctx, "UNIQUE");