From 81aa12f91c631694a3088c9dfb7cec725dfce93a Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 2 Jul 2020 15:47:42 +0200 Subject: [PATCH] [jOOQ/jOOQ#10345] NON_BIND_VARIABLE_SUFFIXES should only be used in PostgreSQL dialect --- jOOQ/src/main/java/org/jooq/impl/Tools.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 57015f837c..2db975f851 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -774,7 +774,7 @@ final class Tools { *
  • ?|
  • * */ - private static final char[][] NON_BIND_VARIABLE_SUFFIXES = { + private static final char[][] NON_BIND_VARIABLE_SUFFIXES = { { '?' }, { '|' }, { '&' }, @@ -789,15 +789,16 @@ final class Tools { * All hexadecimal digits accessible through array index, e.g. * HEX_DIGITS[15] == 'f'. */ - private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray(); + private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray(); - private static final Set REQUIRES_BACKSLASH_ESCAPING = SQLDialect.supportedBy(MARIADB, MYSQL); - private static final Set NO_SUPPORT_NULL = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB); - private static final Set NO_SUPPORT_BINARY_TYPE_LENGTH = SQLDialect.supportedBy(POSTGRES); - private static final Set NO_SUPPORT_TIMESTAMP_PRECISION = SQLDialect.supportedBy(DERBY); - private static final Set NO_SUPPORT_CAST_TYPE_IN_DDL = SQLDialect.supportedBy(MARIADB, MYSQL); - private static final Set DEFAULT_BEFORE_NULL = SQLDialect.supportedBy(FIREBIRD, HSQLDB); - private static final Set SUPPORT_MYSQL_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL); + private static final Set REQUIRES_BACKSLASH_ESCAPING = SQLDialect.supportedBy(MARIADB, MYSQL); + private static final Set NO_SUPPORT_NULL = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB); + private static final Set NO_SUPPORT_BINARY_TYPE_LENGTH = SQLDialect.supportedBy(POSTGRES); + private static final Set NO_SUPPORT_TIMESTAMP_PRECISION = SQLDialect.supportedBy(DERBY); + private static final Set NO_SUPPORT_CAST_TYPE_IN_DDL = SQLDialect.supportedBy(MARIADB, MYSQL); + private static final Set SUPPORT_NON_BIND_VARIABLE_SUFFIXES = SQLDialect.supportedBy(POSTGRES); + private static final Set DEFAULT_BEFORE_NULL = SQLDialect.supportedBy(FIREBIRD, HSQLDB); + private static final Set SUPPORT_MYSQL_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL); // ------------------------------------------------------------------------ // XXX: Record constructors and related methods @@ -2523,7 +2524,7 @@ final class Tools { &&(i - 1 < 0 || sqlChars[i - 1] != ':')))) { // [#5307] Consume PostgreSQL style operators. These aren't bind variables! - if (sqlChars[i] == '?' && i + 1 < sqlChars.length) { + if (sqlChars[i] == '?' && i + 1 < sqlChars.length && SUPPORT_NON_BIND_VARIABLE_SUFFIXES.contains(ctx.dialect())) { for (char[] suffix : NON_BIND_VARIABLE_SUFFIXES) { if (peek(sqlChars, i + 1, suffix)) { for (int j = i; i - j <= suffix.length; i++)