From f6479786b1787b8f82b167e65233db2855bc39a9 Mon Sep 17 00:00:00 2001 From: Henrik Johansson Date: Fri, 26 Oct 2012 16:37:27 +0200 Subject: [PATCH] Fixed issue with encoding and escaping " and \ when inserting into Postgres Array column. --- .../main/java/org/jooq/impl/DefaultBindContext.java | 2 +- .../java/org/jooq/impl/PostgresArrayEscapingTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBindContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBindContext.java index dede680594..94cb3dfed2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBindContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBindContext.java @@ -332,7 +332,7 @@ class DefaultBindContext extends AbstractBindContext { } else { sb.append("\""); - sb.append(o.toString().replaceAll("\"", "\"\"")); + sb.append(o.toString().replace("\\", "\\\\").replace("\"", "\\\"")); sb.append("\""); } diff --git a/jOOQ/src/test/java/org/jooq/impl/PostgresArrayEscapingTest.java b/jOOQ/src/test/java/org/jooq/impl/PostgresArrayEscapingTest.java index 2dd7f57943..effe7653d1 100644 --- a/jOOQ/src/test/java/org/jooq/impl/PostgresArrayEscapingTest.java +++ b/jOOQ/src/test/java/org/jooq/impl/PostgresArrayEscapingTest.java @@ -30,4 +30,14 @@ public class PostgresArrayEscapingTest { public void nulls() { assertEquals("{null}", DefaultBindContext.postgresArrayString(new Object[]{null})); } + + @Test + public void stringsWithQuotesShouldBeEscaped() { + assertEquals("{\"\\\"foo\"}", DefaultBindContext.postgresArrayString(new String[]{"\"foo"})); + } + + @Test + public void stringsWithBackslashesShouldBeEncoded() { + assertEquals("{\"\\\\foo\"}", DefaultBindContext.postgresArrayString(new String[]{"\\foo"})); + } }