From bb9900ba8f05ca4376519d264c3b5afa30fac59a Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 13 Jun 2022 11:57:10 +0200 Subject: [PATCH] [jOOQ/jOOQ#13660] PostgreSQL ON CONFLICT .. WHERE .. DO NOTHING generates not valid SQL --- .../java/org/jooq/impl/InsertQueryImpl.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index e21fe741d0..41499e4300 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -386,12 +386,7 @@ implements ctx.sql('(').qualify(false, c -> c.visit(new FieldsImpl<>(table().getPrimaryKey().getFields()))).sql(')'); } - if (onConflictWhere.hasWhere()) - ctx.qualify(false, c -> c - .formatSeparator() - .visit(K_WHERE) - .sql(' ') - .visit(onConflictWhere.getWhere())); + acceptOnConflictWhere(ctx); ctx.formatSeparator() .visit(K_DO_UPDATE) @@ -536,12 +531,7 @@ implements else { if (onConflict != null && onConflict.size() > 0) { ctx.sql(" (").visit(onConflict).sql(')'); - - if (onConflictWhere.hasWhere()) - ctx.formatSeparator() - .visit(K_WHERE) - .sql(' ') - .visit(onConflictWhere.getWhere()); + acceptOnConflictWhere(ctx); } @@ -626,6 +616,17 @@ implements ctx.end(INSERT_RETURNING); } + private final void acceptOnConflictWhere(Context ctx) { + if (onConflictWhere.hasWhere()) + + // [#11732] [#13660] Avoid qualification, which wasn't supported in older PG versions + ctx.qualify(false, c -> c + .formatSeparator() + .visit(K_WHERE) + .sql(' ') + .visit(onConflictWhere.getWhere())); + } + @Override public final Clause[] clauses(Context ctx) { return CLAUSES;