From 789462bfca4c382e976df2c128f66ed09676bf98 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 24 Nov 2023 11:29:31 +0100 Subject: [PATCH] [jOOQ/jOOQ#15316] Historic RETURNING implementation only for INSERT The historic SQLite RETURNING implementation only works for INSERT statements, running a follow-up query with _rowid_ = last_insert_rowid() predicate. --- jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java index ec8320bd70..263f4a916b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java @@ -938,7 +938,11 @@ abstract class AbstractDMLQuery extends AbstractRowCountQuery } final boolean nativeSupportReturning(Scope ctx) { - return !(ctx.family() == SQLITE && fetchTriggerValuesAfterReturning(ctx)) + + // [#15316] The historic RETURNING emulation of SQLite was available for INSERT only, using + // _rowid_ = last_insert_rowid() checks, which obviously doesn't work for UPDATE and DELETE + return !(ctx.family() == SQLITE && this instanceof Insert && fetchTriggerValuesAfterReturning(ctx)) + && (this instanceof Insert && !NO_NATIVE_SUPPORT_INSERT_RETURNING.contains(ctx.dialect()) || this instanceof Update && !NO_NATIVE_SUPPORT_UPDATE_RETURNING.contains(ctx.dialect()) || this instanceof Delete && !NO_NATIVE_SUPPORT_DELETE_RETURNING.contains(ctx.dialect()));