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 13169fd058..04be7e5c67 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 @@ -533,25 +533,26 @@ term = | 'ARRAY' '[' [ fields ] ']' | 'AVG' '(' [ 'DISTINCT' | 'ALL' ] field ')' [ keep | filter ] [ over ] | 'BIT_LENGTH' '(' field ')' -| 'CONCAT' '(' fields ')' -| 'CURRENT_SCHEMA' -| 'CURRENT_USER' -| 'CHARINDEX' '(' field ',' field ')' -| 'CHAR_LENGTH' '(' field ')' -| ( 'CEIL' | 'CEILING' ) '(' sum ')' -| 'COSH' '(' sum ')' -| 'COS' '(' sum ')' -| 'COTH' '(' sum ')' -| 'COT' '(' sum ')' -| 'COUNT' '(' ( '*' | [ 'DISTINCT' | 'ALL' ] field ) ')' [ keep | filter ] [ over ] -| 'CURRVAL' '(' ( name | stringLiteral ) ')' -| 'CURRENT_TIMESTAMP' -| 'CURRENT_TIME' -| 'CURRENT_DATE' | case | 'CAST' '(' field 'AS' dataType ')' +| 'CONVERT' '(' dataType ',' field ')' +| ( 'CEIL' | 'CEILING' ) '(' sum ')' +| 'CHARINDEX' '(' field ',' field ')' +| 'CHAR_LENGTH' '(' field ')' | 'COALESCE' '(' fields ')' +| 'CONCAT' '(' fields ')' +| 'COS' '(' sum ')' +| 'COSH' '(' sum ')' +| 'COT' '(' sum ')' +| 'COTH' '(' sum ')' +| 'COUNT' '(' ( '*' | [ 'DISTINCT' | 'ALL' ] field ) ')' [ keep | filter ] [ over ] | 'CUME_DIST' ( '(' ')' over | '(' fields ')' withinGroup ) +| 'CURRVAL' '(' ( name | stringLiteral ) ')' +| 'CURRENT_DATE' +| 'CURRENT_SCHEMA' +| 'CURRENT_TIME' +| 'CURRENT_TIMESTAMP' +| 'CURRENT_USER' | dateLiteral | 'DATE_TRUNC' '(' stringLiteral ',' field ')' | 'DAY' '(' field ')' @@ -647,6 +648,7 @@ term = | 'TANH' '(' sum ')' | timeLiteral | timestampLiteral +| 'TO_NUMBER' '(' field ')' | 'TRANSLATE' '(' field ',' field ',' field ')' | 'TRIM' '(' field ')' | 'TRUNC' '(' field ',' stringLiteral ')' diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 7a5de3a040..8fc68345cd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -3810,12 +3810,14 @@ final class ParserImpl implements Parser { if ((field = parseFieldCaseIf(ctx)) != null) return field; - else if ((field = parseCastIf(ctx)) != null) + else if ((field = parseFieldCastIf(ctx)) != null) return field; else if ((field = parseFieldCoalesceIf(ctx)) != null) return field; else if ((field = parseFieldCumeDistIf(ctx)) != null) return field; + else if ((field = parseFieldConvertIf(ctx)) != null) + return field; break; @@ -5171,7 +5173,7 @@ final class ParserImpl implements Parser { return null; } - private static final Field parseCastIf(ParserContext ctx) { + private static final Field parseFieldCastIf(ParserContext ctx) { if (parseFunctionNameIf(ctx, "CAST")) { parse(ctx, '('); Field field = parseField(ctx); @@ -5185,6 +5187,20 @@ final class ParserImpl implements Parser { return null; } + private static final Field parseFieldConvertIf(ParserContext ctx) { + if (parseFunctionNameIf(ctx, "CONVERT")) { + parse(ctx, '('); + DataType type = parseDataType(ctx); + parse(ctx, ','); + Field field = parseField(ctx); + parse(ctx, ')'); + + return cast(field, type); + } + + return null; + } + private static final Field parseBooleanValueExpressionIf(ParserContext ctx) { TruthValue truth = parseTruthValueIf(ctx);