From a43ffeae2a3ac084ed99cfba1723327865a7e4e6 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 11 Sep 2024 14:58:25 +0200 Subject: [PATCH] [jOOQ/jOOQ#12485] Use PreparedStatement.setObject(int, Object, Types.OTHER) instead of setString(int, String) to bind array bind values in PostgreSQL --- jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index f7735c5de6..7dffbcb4d9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -1479,9 +1479,16 @@ public class DefaultBinding implements Binding { @Override final void set0(BindingSetStatementContext ctx, Object[] value) throws SQLException { switch (ctx.family()) { + case POSTGRES: { + + // [#12485] Passing the array string as OTHER (OID = unspecified) may prevent poor + // decisions by the PostgreSQL optimiser. + ctx.statement().setObject(ctx.index(), toPGArrayString(value), Types.OTHER); + break; + } + - case POSTGRES: case YUGABYTEDB: { ctx.statement().setString(ctx.index(), toPGArrayString(value)); break;