diff --git a/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java b/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java index e4a977d61c..fb4d9aa8b1 100644 --- a/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java @@ -58,6 +58,7 @@ import static org.jooq.SQLDialect.POSTGRES_9_5; * * * @author Lukas Eder + * @author Fabrice Le Roy */ public interface InsertOnConflictDoUpdateStep { diff --git a/jOOQ/src/main/java/org/jooq/InsertOnDuplicateStep.java b/jOOQ/src/main/java/org/jooq/InsertOnDuplicateStep.java index 5109774b03..7e4544d2f9 100644 --- a/jOOQ/src/main/java/org/jooq/InsertOnDuplicateStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertOnDuplicateStep.java @@ -84,6 +84,12 @@ public interface InsertOnDuplicateStep extends InsertReturning @Support({ POSTGRES_9_5 }) InsertOnConflictDoUpdateStep onConflict(Collection> keys); + /** + * Add an ON CONFLICT DO NOTHING clause to this insert query. + */ + @Support({ POSTGRES_9_5 }) + InsertFinalStep onConflictDoNothing(); + /** * Add an ON DUPLICATE KEY UPDATE clause to this insert query. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java index 83325ff01b..c34e6460f2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java @@ -123,7 +123,8 @@ class InsertImpl, InsertSetStep, InsertSetMoreStep, - InsertOnDuplicateSetMoreStep, InsertOnConflictDoUpdateStep, + InsertOnDuplicateSetMoreStep, + InsertOnConflictDoUpdateStep, InsertResultStep { /** @@ -579,14 +580,12 @@ class InsertImpl extends AbstractStoreQuery impl @Override public final void onConflict(Collection> fields) { - onDuplicateKeyUpdate(true); this.onConflict = new QueryPartList>(fields); } @@ -133,7 +132,6 @@ final class InsertQueryImpl extends AbstractStoreQuery impl public final void onDuplicateKeyUpdate(boolean flag) { this.onDuplicateKeyIgnore = false; this.onDuplicateKeyUpdate = flag; - this.onConflict = null; } @Override @@ -277,16 +275,23 @@ 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"); + ctx.formatSeparator() + .start(INSERT_ON_DUPLICATE_KEY_UPDATE) + .keyword("on conflict") + .sql(' '); if (onConflict != null && onConflict.size() > 0) { - ctx.sql(" ("); boolean qualify = ctx.qualify(); - ctx.qualify(false).visit(onConflict.get(0)).qualify(qualify); - ctx.sql(") "); + + ctx.sql('(') + .qualify(false) + .visit(onConflict) + .qualify(qualify) + .sql(") "); } - ctx.keyword(" do nothing").end(INSERT_ON_DUPLICATE_KEY_UPDATE); + ctx.keyword("do nothing") + .end(INSERT_ON_DUPLICATE_KEY_UPDATE); break; } diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 4d68eef01c..a8abcbb0a6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -3507,14 +3507,15 @@ class ParserImpl implements Parser { private static final Field parseWindowFunction(ParserContext ctx, WindowIgnoreNullsStep s1, WindowOverStep s2) { if (s1 != null) { - boolean respectNulls = parseKeywordIf(ctx, "RESPECT NULLS"); - boolean ignoreNulls = !respectNulls && parseKeywordIf(ctx, "IGNORE NULLS"); - s2 = respectNulls - ? s1.respectNulls() - : ignoreNulls - ? s1.ignoreNulls() - : s1; + + + + + + + + s2 = s1; } parseKeyword(ctx, "OVER"); diff --git a/jOOQ/src/main/resources/META-INF/ABOUT.txt b/jOOQ/src/main/resources/META-INF/ABOUT.txt index a143856bc9..1fd962d4a8 100644 --- a/jOOQ/src/main/resources/META-INF/ABOUT.txt +++ b/jOOQ/src/main/resources/META-INF/ABOUT.txt @@ -14,6 +14,7 @@ Authors and contributors of jOOQ or parts of jOOQ in alphabetical order: - Ed Schaller - Eric Peters - Espen Stromsnes +- Fabrice Le Roy - Gonzalo Ortiz Jaureguizar - Gregory Hlavac - Henrik Sjöstrand