From db0396033f925b5101f49c101f036558a4d3dd2d Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 15 Mar 2023 10:36:25 +0100 Subject: [PATCH] [jOOQ/jOOQ#14791] SQLDialect version check throws NumberFormatException in Percona DB --- jOOQ/src/main/java/org/jooq/SQLDialect.java | 6 +++++- jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/SQLDialect.java b/jOOQ/src/main/java/org/jooq/SQLDialect.java index fe2f099181..1fd65b28df 100644 --- a/jOOQ/src/main/java/org/jooq/SQLDialect.java +++ b/jOOQ/src/main/java/org/jooq/SQLDialect.java @@ -43,6 +43,8 @@ import java.util.Collection; import java.util.Collections; import java.util.EnumSet; import java.util.Set; +import java.util.concurrent.locks.Condition; +import java.util.regex.Pattern; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -1375,6 +1377,8 @@ public enum SQLDialect { ); } + private static final Pattern P_PATCH_VERSION_MYSQL = Pattern.compile("^\\d+\\.\\d+\\.(\\d+).*$"); + private final int patchVersion(String productVersion) { if (productVersion == null) return Integer.MAX_VALUE; @@ -1383,7 +1387,7 @@ public enum SQLDialect { case H2: return Integer.parseInt(productVersion.split(" ")[0].split("\\.")[2]); case MYSQL: - return Integer.parseInt(productVersion.split("\\.")[2]); + return Integer.parseInt(P_PATCH_VERSION_MYSQL.matcher(productVersion).replaceFirst("$1")); default: return Integer.MAX_VALUE; } diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java index b4651b408f..e0fee4ed3e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java @@ -644,7 +644,9 @@ class DefaultExecuteContext implements ExecuteContext { else logVersionSupport.info("Version", "Database version is supported by dialect " + dialect() + ": " + productVersion); } - catch (SQLException e) { + + // [#14791] Could also be NumberFormatException when reading non-standard version numbers + catch (Exception e) { logVersionSupport.error("Error reading database version", e); } }