From c3f8c3028e3a4df7777a362e43b9fb3456d25ac2 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 23 Sep 2020 21:13:57 +0200 Subject: [PATCH] [jOOQ/jOOQ#10679] Parser incorrectly parses IN predicate of degree > 1 with extra parentheses around SELECT subquery --- jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 60af8f2f4e..e53a5baa03 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -5364,7 +5364,7 @@ final class ParserImpl implements Parser { : left instanceof Field ? ((Field) left).in(EMPTY_FIELD) : new RowInCondition((Row) left, new QueryPartList<>(), false); - else if (peekKeyword(ctx, "SELECT") || peekKeyword(ctx, "SEL") || peekKeyword(ctx, "WITH")) + else if (peekSelectOrWith(ctx, true)) result = not ? left instanceof Field ? ((Field) left).notIn(parseWithOrSelect(ctx, 1)) @@ -5413,7 +5413,7 @@ final class ParserImpl implements Parser { else if (left instanceof Field && (parseKeywordIf(ctx, "LIKE") || parseOperatorIf(ctx, "~~") || (notOp = parseOperatorIf(ctx, "!~~")))) { if (parseKeywordIf(ctx, "ANY")) { parse(ctx, '('); - if (peekKeyword(ctx, "SELECT") || peekKeyword(ctx, "SEL") || peekKeyword(ctx, "WITH")) { + if (peekSelectOrWith(ctx, true)) { Select select = parseWithOrSelect(ctx); parse(ctx, ')'); LikeEscapeStep result = (not ^ notOp) ? ((Field) left).notLike(any(select)) : ((Field) left).like(any(select)); @@ -5438,7 +5438,7 @@ final class ParserImpl implements Parser { } else if (parseKeywordIf(ctx, "ALL")) { parse(ctx, '('); - if (peekKeyword(ctx, "SELECT") || peekKeyword(ctx, "SEL") || peekKeyword(ctx, "WITH")) { + if (peekSelectOrWith(ctx, true)) { Select select = parseWithOrSelect(ctx); parse(ctx, ')'); LikeEscapeStep result = (not ^ notOp) ? ((Field) left).notLike(all(select)) : ((Field) left).like(all(select));