From bf33ef569919e8c17e70de46b876ef5b80059807 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 8 Aug 2018 10:14:03 +0200 Subject: [PATCH] [#7725] Support parsing unknown, parameterless functions --- .../main/resources/org/jooq/web/grammar-3.12.txt | 1 + jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 15 +++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt index 257348abb6..5d488efb3e 100644 --- a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt +++ b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt @@ -753,6 +753,7 @@ term = | '{' 't' stringLiteral '}' | '{' 'fn' term '}' | '{' 'ts' stringLiteral '}' +| identifier '(' [ field { ',' field } ] ')' ; truthValue = 'TRUE' | 'FALSE' | 'NULL' diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 098c7fc04b..64b9939e2d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -4608,7 +4608,7 @@ final class ParserImpl implements Parser { return field; else if ((field = parseFieldPowerIf(ctx)) != null) return field; - else if (parseFunctionNameIf(ctx, "PI")) + else if (parseFunctionNameIf(ctx, "PI") && parse(ctx, '(') && parse(ctx, ')')) return pi(); if (parseKeywordIf(ctx, "PRIOR")) @@ -6876,12 +6876,15 @@ final class ParserImpl implements Parser { if (ctx.dsl.settings().getParseUnknownFunctions() == ParseUnknownFunctions.IGNORE && parseIf(ctx, '(')) { List> arguments = new ArrayList>(); - do { - arguments.add(parseField(ctx)); - } - while (parseIf(ctx, ',')); + if (!parseIf(ctx, ')')) { + do { + arguments.add(parseField(ctx)); + } + while (parseIf(ctx, ',')); + + parse(ctx, ')'); + } - parse(ctx, ')'); return function(name, Object.class, arguments.toArray(EMPTY_FIELD)); } else {