From 86913f438ba4689068eb730fdb7e84b0609d5cce Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 11 Feb 2022 10:42:25 +0100 Subject: [PATCH] [jOOQ/jOOQ#13048] Settings.parseRetainCommentsBetweenQueries doesn't work for the last comment --- .../main/java/org/jooq/impl/ParserImpl.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index e47595620a..95f23c26fe 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -862,15 +862,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { while (parseDelimiterIf(false)) p = positionBeforeWhitespace; - if (TRUE.equals(settings().isParseRetainCommentsBetweenQueries()) && p < position) { - for (int i = p; i < position; i++) { - if (character(i) != ' ') { - result.add(new IgnoreQuery(substring(p, position))); - break; - } - } - } - + retainComments(result, p); query = patchParsedQuery(parseQuery(false, false)); if (query == IGNORE || query == IGNORE_NO_DELIMITER) continue; @@ -879,10 +871,22 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { } while (parseDelimiterIf(true) && (p = positionBeforeWhitespace) >= 0 && !done()); + retainComments(result, p); return done("Unexpected token or missing query delimiter", dsl.queries(result)); }); } + private final void retainComments(List result, int p) { + if (TRUE.equals(settings().isParseRetainCommentsBetweenQueries()) && p < position) { + for (int i = p; i < position; i++) { + if (character(i) != ' ') { + result.add(new IgnoreQuery(substring(p, position))); + break; + } + } + } + } + private static final Pattern P_SEARCH_PATH = Pattern.compile("(?i:select\\s+(pg_catalog\\s*\\.\\s*)?set_config\\s*\\(\\s*'search_path'\\s*,\\s*'([^']*)'\\s*,\\s*\\w+\\s*\\))"); private final Query patchParsedQuery(Query query) {