From bb7a8b4c3b36c2f79f3f95febfb2ddeb3b0c7022 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 3 Jan 2023 19:48:11 +0100 Subject: [PATCH] [jOOQ/jOOQ#7106] Add support for procedural transaction statements - WIP This includes: - Partial support for Db2, Firebird, SQL Server --- .../src/main/java/org/jooq/impl/Keywords.java | 1 + .../java/org/jooq/impl/ReleaseSavepoint.java | 16 +++++++++++++- .../src/main/java/org/jooq/impl/Rollback.java | 21 ++++++++++++++++--- .../main/java/org/jooq/impl/Savepoint.java | 14 ++++++++++++- .../java/org/jooq/impl/StartTransaction.java | 16 ++++++++++++++ 5 files changed, 63 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Keywords.java b/jOOQ/src/main/java/org/jooq/impl/Keywords.java index 0fb5c19f38..61d3993612 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Keywords.java +++ b/jOOQ/src/main/java/org/jooq/impl/Keywords.java @@ -371,6 +371,7 @@ final class Keywords { static final Keyword K_ROWS_FROM = keyword("rows from"); static final Keyword K_ROWS_ONLY = keyword("rows only"); static final Keyword K_ROWS_WITH_TIES = keyword("rows with ties"); + static final Keyword K_SAVE = keyword("save"); static final Keyword K_SAVEPOINT = keyword("savepoint"); static final Keyword K_SCHEMA = keyword("schema"); static final Keyword K_SCN = keyword("scn"); diff --git a/jOOQ/src/main/java/org/jooq/impl/ReleaseSavepoint.java b/jOOQ/src/main/java/org/jooq/impl/ReleaseSavepoint.java index ab5d290bb7..c8b6ad8c37 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ReleaseSavepoint.java +++ b/jOOQ/src/main/java/org/jooq/impl/ReleaseSavepoint.java @@ -89,7 +89,21 @@ implements @Override public final void accept(Context ctx) { - ctx.visit(K_RELEASE).sql(' ').visit(K_SAVEPOINT).sql(' ').visit(name); + switch (ctx.family()) { + + + + + + + + + + + default: + ctx.visit(K_RELEASE).sql(' ').visit(K_SAVEPOINT).sql(' ').visit(name); + break; + } } // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/impl/Rollback.java b/jOOQ/src/main/java/org/jooq/impl/Rollback.java index c42e3065ba..70fb60cc21 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Rollback.java +++ b/jOOQ/src/main/java/org/jooq/impl/Rollback.java @@ -114,10 +114,25 @@ implements @Override public final void accept(Context ctx) { - ctx.visit(K_ROLLBACK); + switch (ctx.family()) { - if (toSavepoint != null) - ctx.sql(' ').visit(K_TO).sql(' ').visit(K_SAVEPOINT).sql(' ').visit(toSavepoint); + + + + + + + + + + + default: + ctx.visit(K_ROLLBACK); + + if (toSavepoint != null) + ctx.sql(' ').visit(K_TO).sql(' ').visit(K_SAVEPOINT).sql(' ').visit(toSavepoint); + break; + } } // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/impl/Savepoint.java b/jOOQ/src/main/java/org/jooq/impl/Savepoint.java index c689e85c37..8b025765d9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Savepoint.java +++ b/jOOQ/src/main/java/org/jooq/impl/Savepoint.java @@ -89,7 +89,19 @@ implements @Override public final void accept(Context ctx) { - ctx.visit(K_SAVEPOINT).sql(' ').visit(name); + switch (ctx.family()) { + + + + + + + + + default: + ctx.visit(K_SAVEPOINT).sql(' ').visit(name); + break; + } } // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/impl/StartTransaction.java b/jOOQ/src/main/java/org/jooq/impl/StartTransaction.java index 7aa9b03120..046b4b3e4f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/StartTransaction.java +++ b/jOOQ/src/main/java/org/jooq/impl/StartTransaction.java @@ -92,6 +92,22 @@ implements break; } + + + + + + + + + + case FIREBIRD: { + ctx.visit(K_SET).sql(' ').visit(K_TRANSACTION).sql(' ').visit(K_READ).sql(' ').visit(K_WRITE); + break; + } + + + case H2: { ctx.visit(K_BEGIN).sql(' ').visit(K_TRANSACTION); break;