diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 04d133ce01..8f5bfc3a43 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -2352,19 +2352,19 @@ class ParserImpl implements Parser { } private static final FieldOrRow parseExp(ParserContext ctx, Type type) { - FieldOrRow r = parseSigned(ctx, type); + FieldOrRow r = parseUnaryOps(ctx, type); if (N.is(type) && r instanceof Field) for (;;) if (parseIf(ctx, '^')) - r = ((Field) r).pow(toField(ctx, parseSigned(ctx, type))); + r = ((Field) r).pow(toField(ctx, parseUnaryOps(ctx, type))); else break; return r; } - private static final FieldOrRow parseSigned(ParserContext ctx, Type type) { + private static final FieldOrRow parseUnaryOps(ParserContext ctx, Type type) { Integer sign = null; FieldOrRow r; @@ -2383,6 +2383,9 @@ class ParserImpl implements Parser { else if ((r = parseFieldUnsignedNumericLiteralIf(ctx, true)) == null) r = toField(ctx, parseTerm(ctx, type)).neg(); + while (parseIf(ctx, "::")) + r = cast(toField(ctx, r), parseDataType(ctx)); + return r; }