From dd7404c535748c1df12ef4f0b31654701ad18111 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 16 Feb 2018 11:34:21 +0100 Subject: [PATCH] [#7185] Emulate CREATE VIEW IF NOT EXISTS in PostgreSQL --- .../main/java/org/jooq/impl/CreateViewImpl.java | 3 ++- jOOQ/src/main/java/org/jooq/impl/Keywords.java | 1 + jOOQ/src/main/java/org/jooq/impl/Tools.java | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateViewImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateViewImpl.java index 116ee4c9f7..7d8c568c65 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CreateViewImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CreateViewImpl.java @@ -47,6 +47,7 @@ import static org.jooq.SQLDialect.DERBY; import static org.jooq.SQLDialect.FIREBIRD; // ... // ... +import static org.jooq.SQLDialect.POSTGRES; import static org.jooq.SQLDialect.SQLITE; // ... import static org.jooq.conf.ParamType.INLINED; @@ -88,7 +89,7 @@ final class CreateViewImpl extends AbstractQuery implements */ private static final long serialVersionUID = 8904572826501186329L; private static final Clause[] CLAUSES = { CREATE_VIEW }; - private static final EnumSet NO_SUPPORT_IF_NOT_EXISTS = EnumSet.of(DERBY, FIREBIRD); + private static final EnumSet NO_SUPPORT_IF_NOT_EXISTS = EnumSet.of(DERBY, FIREBIRD, POSTGRES); private final boolean ifNotExists; private final Table view; diff --git a/jOOQ/src/main/java/org/jooq/impl/Keywords.java b/jOOQ/src/main/java/org/jooq/impl/Keywords.java index 97b05a62d8..7c070ffaf3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Keywords.java +++ b/jOOQ/src/main/java/org/jooq/impl/Keywords.java @@ -254,6 +254,7 @@ final class Keywords { static final Keyword K_SIBLINGS = keyword("siblings"); static final Keyword K_SKIP = keyword("skip"); static final Keyword K_SQL = keyword("sql"); + static final Keyword K_SQLSTATE = keyword("sqlstate"); static final Keyword K_START_AT = keyword("start at"); static final Keyword K_START_WITH = keyword("start with"); static final Keyword K_SWITCH = keyword("switch"); diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 45259b8bc3..cda52f8b0c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -125,6 +125,7 @@ import static org.jooq.impl.Keywords.K_RAISE; import static org.jooq.impl.Keywords.K_RAISERROR; import static org.jooq.impl.Keywords.K_SERIAL; import static org.jooq.impl.Keywords.K_SERIAL8; +import static org.jooq.impl.Keywords.K_SQLSTATE; import static org.jooq.impl.Keywords.K_START_WITH; import static org.jooq.impl.Keywords.K_THEN; import static org.jooq.impl.Keywords.K_THROW; @@ -3730,6 +3731,11 @@ final class Tools { break; } + case POSTGRES: { + begin(ctx); + break; + } + default: break; } @@ -3895,6 +3901,14 @@ final class Tools { break; } + case POSTGRES: { + ctx.sql(';').formatIndentEnd().formatSeparator() + .visit(K_EXCEPTION).formatIndentStart().formatSeparator() + .visit(K_WHEN).sql(' ').visit(K_SQLSTATE).sql(" '42P07' ").visit(K_THEN).sql(' ').visit(K_NULL).sql(';').formatIndentEnd(); + end(ctx); + break; + } + default: break; }