From 83d12c8d702a6de8e923a0b32aca8dc90152258b Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 10 Oct 2014 15:55:06 +0200 Subject: [PATCH] [#3000] Fixed also org.jooq.impl.Val implementation --- jOOQ/src/main/java/org/jooq/impl/Utils.java | 11 +++++++++-- jOOQ/src/main/java/org/jooq/impl/Val.java | 7 ++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Utils.java b/jOOQ/src/main/java/org/jooq/impl/Utils.java index 6739814194..4f37abab37 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Utils.java +++ b/jOOQ/src/main/java/org/jooq/impl/Utils.java @@ -1175,8 +1175,7 @@ final class Utils { String[][] quotes = QUOTES.get(family); // [#3630] Depending on this setting, we need to consider backslashes as escape characters within string literals. - BackslashEscaping escaping = getBackslashEscaping(ctx.configuration().settings()); - boolean needsBackslashEscaping = escaping == ON || (escaping == DEFAULT && EnumSet.of(MARIADB, MYSQL).contains(family)); + boolean needsBackslashEscaping = needsBackslashEscaping(ctx.configuration()); for (int i = 0; i < sqlChars.length; i++) { @@ -1340,6 +1339,14 @@ final class Utils { } } + /** + * Whether backslash escaping is needed in inlined string literals. + */ + static final boolean needsBackslashEscaping(Configuration configuration) { + BackslashEscaping escaping = getBackslashEscaping(configuration.settings()); + return escaping == ON || (escaping == DEFAULT && EnumSet.of(MARIADB, MYSQL).contains(configuration.dialect().family())); + } + /** * Peek for a string at a given index of a char[] * diff --git a/jOOQ/src/main/java/org/jooq/impl/Val.java b/jOOQ/src/main/java/org/jooq/impl/Val.java index 59dd7615fc..d0bc32d648 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Val.java +++ b/jOOQ/src/main/java/org/jooq/impl/Val.java @@ -60,12 +60,11 @@ import static org.jooq.SQLDialect.POSTGRES; import static org.jooq.SQLDialect.SQLITE; // ... // ... -import static org.jooq.conf.BackslashEscaping.ON; import static org.jooq.conf.ParamType.NAMED; import static org.jooq.conf.ParamType.NAMED_OR_INLINED; import static org.jooq.impl.DSL.name; import static org.jooq.impl.DSL.using; -import static org.jooq.impl.Utils.settings; +import static org.jooq.impl.Utils.needsBackslashEscaping; import static org.jooq.tools.StringUtils.leftPad; import java.math.BigDecimal; @@ -84,7 +83,6 @@ import org.jooq.RenderContext; import org.jooq.SQLDialect; import org.jooq.Schema; import org.jooq.UDTRecord; -import org.jooq.conf.BackslashEscaping; import org.jooq.tools.StringUtils; import org.jooq.types.Interval; @@ -642,10 +640,9 @@ class Val extends AbstractParam { * Escape a string literal by replacing ' by '', and possibly also backslashes. */ private final String escape(Object val, Context context) { - BackslashEscaping escaping = settings(context.configuration()).getBackslashEscaping(); String result = val.toString(); - if (escaping == ON) + if (needsBackslashEscaping(context.configuration())) result = result.replace("\\", "\\\\"); return result.replace("'", "''");