diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 1fbdf4dc32..5d29f6e2b1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -2788,7 +2788,7 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon // TODO: [#9780] Are there any possible syntaxes and data types? parseIf('='); - Object value = parseSignedIntegerLiteralIf(); + Object value = parseSignedIntegerLiteralIf0(true); return dsl.set(name, value != null ? inline(value) : inline(parseStringLiteral())); } @@ -5390,7 +5390,7 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon identityOption = true; continue; } - else if (parseSignedIntegerLiteralIf() != null) { + else if (parseSignedIntegerLiteralIf0(true) != null) { identityOption = true; continue; } @@ -14861,6 +14861,11 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon @Override public final Long parseSignedIntegerLiteralIf() { + Number result = parseSignedIntegerLiteralIf0(false); + return result == null ? null : result.longValue(); + } + + private final Number parseSignedIntegerLiteralIf0(boolean allowBigInteger) { int p = position(); parseDigitsOrSign(); @@ -14869,7 +14874,16 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon String s = substring(p, position()); parseWhitespaceIf(); - return Long.valueOf(s); + + try { + return Long.valueOf(s); + } + catch (Exception e) { + if (allowBigInteger) + return new BigInteger(s); + else + throw e; + } } private final List parseList(char separator, Function element) { @@ -14935,22 +14949,22 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon } private final Field parseCastIntegerOrBindVariable0( - Supplier l + Supplier l ) { - Long i = l.get(); + Number i = l.get(); if (i != null) return DSL.inline(i); Field f = parseBindVariableIf(); if (f != null) - return (Field) f; + return (Field) f; throw expected("Integer or bind variable"); } private final Field parseCastIntegerOrBindVariable( - Supplier l + Supplier l ) { if (parseFunctionNameIf("CAST")) { parse('('); @@ -14966,11 +14980,11 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon } private final Field parseUnsignedIntegerOrBindVariable() { - return parseCastIntegerOrBindVariable(this::parseUnsignedIntegerLiteralIf); + return parseCastIntegerOrBindVariable(() -> parseUnsignedIntegerLiteralIf0(true)); } private final Field parseSignedIntegerOrBindVariable() { - return parseCastIntegerOrBindVariable(this::parseSignedIntegerLiteralIf); + return parseCastIntegerOrBindVariable(() -> parseSignedIntegerLiteralIf0(true)); } @Override @@ -14985,6 +14999,11 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon @Override public final Long parseUnsignedIntegerLiteralIf() { + Number result = parseUnsignedIntegerLiteralIf0(false); + return result == null ? null : result.longValue(); + } + + private final Number parseUnsignedIntegerLiteralIf0(boolean allowBigInteger) { int p = position(); parseDigits(); @@ -14993,7 +15012,16 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon String s = substring(p, position()); parseWhitespaceIf(); - return Long.valueOf(s); + + try { + return Long.valueOf(s); + } + catch (Exception e) { + if (allowBigInteger) + return new BigInteger(s); + else + throw e; + } } private static final record Join(JoinType type, JoinHint hint) {}