diff --git a/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java b/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java index 237a43d1b4..e4a977d61c 100644 --- a/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java @@ -66,4 +66,10 @@ public interface InsertOnConflictDoUpdateStep { */ @Support({ POSTGRES_9_5 }) InsertOnDuplicateSetStep doUpdate(); + + /** + * Add the DO IGNORE clause. + */ + @Support({ POSTGRES_9_5 }) + InsertFinalStep doNothing(); } diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java index 82bf82588c..83325ff01b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java @@ -123,8 +123,7 @@ class InsertImpl, InsertSetStep, InsertSetMoreStep, - InsertOnDuplicateSetMoreStep, - InsertOnConflictDoUpdateStep, + InsertOnDuplicateSetMoreStep, InsertOnConflictDoUpdateStep, InsertResultStep { /** @@ -580,6 +579,13 @@ class InsertImpl> keys) { - onDuplicateKeyUpdate = true; getDelegate().onConflict(keys); return this; } diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index aa14327daf..98d99a8ef1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -54,10 +54,10 @@ import static org.jooq.impl.DSL.select; import static org.jooq.impl.DSL.selectFrom; import static org.jooq.impl.DSL.selectOne; import static org.jooq.impl.DSL.table; +import static org.jooq.impl.Tools.DataKey.DATA_INSERT_SELECT_WITHOUT_INSERT_COLUMN_LIST; import static org.jooq.impl.Tools.EMPTY_FIELD; import static org.jooq.impl.Tools.aliasedFields; import static org.jooq.impl.Tools.fieldNames; -import static org.jooq.impl.Tools.DataKey.DATA_INSERT_SELECT_WITHOUT_INSERT_COLUMN_LIST; import java.util.Arrays; import java.util.Collection; @@ -140,7 +140,6 @@ final class InsertQueryImpl extends AbstractStoreQuery impl public final void onDuplicateKeyIgnore(boolean flag) { this.onDuplicateKeyUpdate = false; this.onDuplicateKeyIgnore = flag; - this.onConflict = null; } @Override @@ -278,10 +277,16 @@ final class InsertQueryImpl extends AbstractStoreQuery impl case POSTGRES_9_5: case POSTGRES: { toSQLInsert(ctx); - ctx.formatSeparator() - .start(INSERT_ON_DUPLICATE_KEY_UPDATE) - .keyword("on conflict do nothing") - .end(INSERT_ON_DUPLICATE_KEY_UPDATE); + ctx.formatSeparator().start(INSERT_ON_DUPLICATE_KEY_UPDATE).keyword("on conflict"); + + if (onConflict != null && onConflict.size() > 0) { + ctx.sql(" ("); + boolean qualify = ctx.qualify(); + ctx.qualify(false).visit(onConflict.get(0)).qualify(qualify); + ctx.sql(") "); + } + + ctx.keyword(" do nothing").end(INSERT_ON_DUPLICATE_KEY_UPDATE); break; }