[#3000] Fixed also org.jooq.impl.Val implementation

This commit is contained in:
Lukas Eder 2014-10-10 15:55:06 +02:00
parent 74c76a15c5
commit 83d12c8d70
2 changed files with 11 additions and 7 deletions

View File

@ -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 <code>index</code> of a <code>char[]</code>
*

View File

@ -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<T> extends AbstractParam<T> {
* Escape a string literal by replacing <code>'</code> by <code>''</code>, 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("'", "''");