From ca19cb98e9ad793318c86ac06d7f419b6b58d98d Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sat, 22 Jun 2013 11:41:32 +0200 Subject: [PATCH] [#2528] Combining renderFormatted with inlined bind variables will change bind values when they contain newlines --- .../test/_/testcases/RenderAndBindTests.java | 21 +++++++++++++++++++ .../src/org/jooq/test/jOOQAbstractTest.java | 5 +++++ .../src/main/java/org/jooq/RenderContext.java | 8 +++++++ .../org/jooq/impl/DefaultRenderContext.java | 12 ++++++++--- jOOQ/src/main/java/org/jooq/impl/Val.java | 4 ++-- 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/RenderAndBindTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/RenderAndBindTests.java index 1c34f7bde3..0601356ee0 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/RenderAndBindTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/RenderAndBindTests.java @@ -530,4 +530,25 @@ extends BaseTest { */ RenderContext sql(String sql); + /** + * Append some SQL to the context's contained {@link StringBuilder}. + *

+ * Set literal = true to indicate that the + * RenderContext shall not format the argument SQL. + */ + RenderContext sql(String sql, boolean literal); + /** * Append some SQL to the context's contained {@link StringBuilder}. */ diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java index b936b788d2..13cf27d349 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java @@ -146,14 +146,20 @@ class DefaultRenderContext extends AbstractContext implements Ren @Override public final RenderContext sql(String s) { - if (s != null && cachedRenderFormatted) { - sql.append(NEWLINE.matcher(s).replaceAll("$0" + indentation())); + return sql(s, s == null || !cachedRenderFormatted); + } + + @Override + public final RenderContext sql(String s, boolean literal) { + if (literal) { + sql.append(s); } else { - sql.append(s); + sql.append(NEWLINE.matcher(s).replaceAll("$0" + indentation())); } return this; + } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/Val.java b/jOOQ/src/main/java/org/jooq/impl/Val.java index f065f53818..f2233d7782 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Val.java +++ b/jOOQ/src/main/java/org/jooq/impl/Val.java @@ -486,7 +486,7 @@ class Val extends AbstractParam { } } else if (ArrayRecord.class.isAssignableFrom(type)) { - context.sql(val.toString()); + context.sql(val.toString(), true); } else if (EnumType.class.isAssignableFrom(type)) { toSQL(context, ((EnumType) val).getLiteral()); @@ -501,7 +501,7 @@ class Val extends AbstractParam { // - UUID else { context.sql("'") - .sql(escape(val)) + .sql(escape(val), true) .sql("'"); } }