[jOOQ/jOOQ#9212] Add support for MariaDB INSERT and DELETE RETURNING

This commit is contained in:
Lukas Eder 2020-07-15 15:40:23 +02:00
parent 11e9ec7eac
commit f40a591bf4
5 changed files with 112 additions and 71 deletions

View File

@ -42,6 +42,7 @@ package org.jooq;
// ...
// ...
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.MARIADB;
// ...
import static org.jooq.SQLDialect.POSTGRES;
@ -153,7 +154,7 @@ public interface DeleteQuery<R extends Record> extends ConditionProvider, Delete
*
* @see #getReturnedRecords()
*/
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
void setReturning();
/**
@ -163,7 +164,7 @@ public interface DeleteQuery<R extends Record> extends ConditionProvider, Delete
* @param fields Fields to be returned
* @see #getReturnedRecords()
*/
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
void setReturning(SelectFieldOrAsterisk... fields);
/**
@ -173,7 +174,7 @@ public interface DeleteQuery<R extends Record> extends ConditionProvider, Delete
* @param fields Fields to be returned
* @see #getReturnedRecords()
*/
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
void setReturning(Collection<? extends SelectFieldOrAsterisk> fields);
/**
@ -196,7 +197,7 @@ public interface DeleteQuery<R extends Record> extends ConditionProvider, Delete
* @see #getReturnedRecords()
*/
@Nullable
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
R getReturnedRecord();
/**
@ -222,7 +223,7 @@ public interface DeleteQuery<R extends Record> extends ConditionProvider, Delete
* </ul>
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
Result<R> getReturnedRecords();
}

View File

@ -41,6 +41,7 @@ package org.jooq;
// ...
// ...
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.MARIADB;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
@ -110,7 +111,7 @@ public interface DeleteResultStep<R extends Record> extends Delete<R> {
* @see DeleteQuery#getReturnedRecords()
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
Result<R> fetch() throws DataAccessException;
/**
@ -126,7 +127,7 @@ public interface DeleteResultStep<R extends Record> extends Delete<R> {
* @see DeleteQuery#getReturnedRecord()
*/
@Nullable
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
R fetchOne() throws DataAccessException, TooManyRowsException;
@ -141,7 +142,7 @@ public interface DeleteResultStep<R extends Record> extends Delete<R> {
* @see DeleteQuery#getReturnedRecord()
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
Optional<R> fetchOptional() throws DataAccessException, TooManyRowsException;
}

View File

@ -37,19 +37,19 @@
*/
package org.jooq;
import org.jetbrains.annotations.*;
// ...
// ...
// ...
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.MARIADB;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
import java.util.Collection;
import org.jetbrains.annotations.NotNull;
/**
* This type is used for the {@link Delete}'s DSL API.
* <p>
@ -100,7 +100,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
DeleteResultStep<R> returning();
/**
@ -119,7 +119,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
DeleteResultStep<R> returning(SelectFieldOrAsterisk... fields);
/**
@ -138,7 +138,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
DeleteResultStep<R> returning(Collection<? extends SelectFieldOrAsterisk> fields);
/**
@ -151,7 +151,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
DeleteResultStep<Record> returningResult(SelectFieldOrAsterisk... fields);
/**
@ -164,7 +164,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
DeleteResultStep<Record> returningResult(Collection<? extends SelectFieldOrAsterisk> fields);
@ -178,7 +178,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1> DeleteResultStep<Record1<T1>> returningResult(SelectField<T1> field1);
/**
@ -190,7 +190,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2> DeleteResultStep<Record2<T1, T2>> returningResult(SelectField<T1> field1, SelectField<T2> field2);
/**
@ -202,7 +202,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3> DeleteResultStep<Record3<T1, T2, T3>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3);
/**
@ -214,7 +214,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4> DeleteResultStep<Record4<T1, T2, T3, T4>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4);
/**
@ -226,7 +226,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5> DeleteResultStep<Record5<T1, T2, T3, T4, T5>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5);
/**
@ -238,7 +238,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6> DeleteResultStep<Record6<T1, T2, T3, T4, T5, T6>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6);
/**
@ -250,7 +250,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7> DeleteResultStep<Record7<T1, T2, T3, T4, T5, T6, T7>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7);
/**
@ -262,7 +262,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8> DeleteResultStep<Record8<T1, T2, T3, T4, T5, T6, T7, T8>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8);
/**
@ -274,7 +274,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9> DeleteResultStep<Record9<T1, T2, T3, T4, T5, T6, T7, T8, T9>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9);
/**
@ -286,7 +286,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> DeleteResultStep<Record10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10);
/**
@ -298,7 +298,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> DeleteResultStep<Record11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11);
/**
@ -310,7 +310,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> DeleteResultStep<Record12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12);
/**
@ -322,7 +322,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> DeleteResultStep<Record13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13);
/**
@ -334,7 +334,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> DeleteResultStep<Record14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14);
/**
@ -346,7 +346,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DeleteResultStep<Record15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14, SelectField<T15> field15);
/**
@ -358,7 +358,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> DeleteResultStep<Record16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14, SelectField<T15> field15, SelectField<T16> field16);
/**
@ -370,7 +370,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> DeleteResultStep<Record17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14, SelectField<T15> field15, SelectField<T16> field16, SelectField<T17> field17);
/**
@ -382,7 +382,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> DeleteResultStep<Record18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14, SelectField<T15> field15, SelectField<T16> field16, SelectField<T17> field17, SelectField<T18> field18);
/**
@ -394,7 +394,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> DeleteResultStep<Record19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14, SelectField<T15> field15, SelectField<T16> field16, SelectField<T17> field17, SelectField<T18> field18, SelectField<T19> field19);
/**
@ -406,7 +406,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> DeleteResultStep<Record20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14, SelectField<T15> field15, SelectField<T16> field16, SelectField<T17> field17, SelectField<T18> field18, SelectField<T19> field19, SelectField<T20> field20);
/**
@ -418,7 +418,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> DeleteResultStep<Record21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14, SelectField<T15> field15, SelectField<T16> field16, SelectField<T17> field17, SelectField<T18> field18, SelectField<T19> field19, SelectField<T20> field20, SelectField<T21> field21);
/**
@ -430,7 +430,7 @@ public interface DeleteReturningStep<R extends Record> extends DeleteFinalStep<R
* @see DeleteResultStep
*/
@NotNull
@Support({ FIREBIRD, POSTGRES })
@Support({ FIREBIRD, MARIADB, POSTGRES })
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> DeleteResultStep<Record22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4, SelectField<T5> field5, SelectField<T6> field6, SelectField<T7> field7, SelectField<T8> field8, SelectField<T9> field9, SelectField<T10> field10, SelectField<T11> field11, SelectField<T12> field12, SelectField<T13> field13, SelectField<T14> field14, SelectField<T15> field15, SelectField<T16> field16, SelectField<T17> field17, SelectField<T18> field18, SelectField<T19> field19, SelectField<T20> field20, SelectField<T21> field21, SelectField<T22> field22);

View File

@ -42,6 +42,8 @@ import static java.lang.Boolean.TRUE;
// ...
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.DERBY;
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
@ -50,9 +52,12 @@ import static org.jooq.SQLDialect.HSQLDB;
// ...
import static org.jooq.SQLDialect.MARIADB;
// ...
// ...
// ...
import static org.jooq.SQLDialect.MYSQL;
// ...
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
// ...
@ -122,10 +127,12 @@ import org.jooq.QualifiedAsterisk;
import org.jooq.Record;
import org.jooq.Result;
import org.jooq.SQLDialect;
import org.jooq.Scope;
import org.jooq.Select;
import org.jooq.SelectFieldOrAsterisk;
import org.jooq.Table;
import org.jooq.UniqueKey;
import org.jooq.Update;
import org.jooq.conf.ExecuteWithoutWhere;
import org.jooq.conf.RenderNameCase;
import org.jooq.conf.SettingsTools;
@ -147,6 +154,10 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
private static final JooqLogger log = JooqLogger.getLogger(AbstractQuery.class);
private static final Set<SQLDialect> NO_SUPPORT_INSERT_ALIASED_TABLE = SQLDialect.supportedBy(DERBY, FIREBIRD, H2, MARIADB, MYSQL);
private static final Set<SQLDialect> NATIVE_SUPPORT_INSERT_RETURNING = SQLDialect.supportedBy(FIREBIRD, MARIADB, POSTGRES);
private static final Set<SQLDialect> NATIVE_SUPPORT_UPDATE_RETURNING = SQLDialect.supportedBy(FIREBIRD, POSTGRES);
private static final Set<SQLDialect> NATIVE_SUPPORT_DELETE_RETURNING = SQLDialect.supportedBy(FIREBIRD, MARIADB, POSTGRES);
@ -758,40 +769,48 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
final void toSQLReturning(Context<?> ctx) {
if (!returning.isEmpty()) {
switch (ctx.family()) {
// Other dialects don't render a RETURNING clause, but
// use JDBC's Statement.RETURN_GENERATED_KEYS mode instead
if (nativeSupportReturning(ctx)) {
boolean declareFields = ctx.declareFields();
boolean qualify = ctx.qualify();
boolean unqualify = ctx.family() == MARIADB;
if (unqualify)
ctx.qualify(false);
ctx.formatSeparator()
.visit(K_RETURNING)
.sql(' ')
.declareFields(true)
case FIREBIRD:
case POSTGRES: {
boolean previous = ctx.declareFields();
.visit(
ctx.formatSeparator()
.visit(K_RETURNING)
.sql(' ')
.declareFields(true)
.visit(ctx.family() == FIREBIRD ? new SelectFieldList<>(returningResolvedAsterisks) : returning)
.declareFields(previous);
// Firebird doesn't support asterisks at all here
// MariaDB doesn't support qualified asterisks: https://jira.mariadb.org/browse/MDEV-23178
ctx.family() == FIREBIRD || ctx.family() == MARIADB
? new SelectFieldList<>(returningResolvedAsterisks)
: returning
)
.declareFields(declareFields);
break;
}
default:
// Other dialects don't render a RETURNING clause, but
// use JDBC's Statement.RETURN_GENERATED_KEYS mode instead
break;
if (unqualify)
ctx.qualify(qualify);
}
}
}
private final boolean nativeSupportReturning(Scope ctx) {
return this instanceof Insert && NATIVE_SUPPORT_INSERT_RETURNING.contains(ctx.dialect())
|| this instanceof Update && NATIVE_SUPPORT_UPDATE_RETURNING.contains(ctx.dialect())
|| this instanceof Delete && NATIVE_SUPPORT_DELETE_RETURNING.contains(ctx.dialect());
}
@Override
protected final void prepare(ExecuteContext ctx) throws SQLException {
@ -799,7 +818,7 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
Tools.setFetchSize(ctx, 0);
}
private void prepare0(ExecuteContext ctx) throws SQLException {
private final void prepare0(ExecuteContext ctx) throws SQLException {
Connection connection = ctx.connection();
@ -810,10 +829,8 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
if (returning.isEmpty()) {
super.prepare(ctx);
return;
}
@ -823,8 +840,9 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
// Values should be returned from the INSERT
else if (nativeSupportReturning(ctx)) {
super.prepare(ctx);
}
else {
switch (ctx.family()) {
@ -836,15 +854,9 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
// Postgres uses the RETURNING clause in SQL
case FIREBIRD:
case POSTGRES:
// SQLite will select last_insert_rowid() after the INSER
case SQLITE:
case CUBRID:
super.prepare(ctx);
break;
@ -861,8 +873,12 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
case DERBY:
case H2:
// [#9212] Older MariaDB versions that don't support RETURNING
// yet, or UPDATE .. RETURNING
case MARIADB:
case MYSQL:
ctx.statement(connection.prepareStatement(ctx.sql(), Statement.RETURN_GENERATED_KEYS));
@ -999,11 +1015,18 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
case DERBY:
case H2:
case MARIADB:
case MYSQL: {
return executeReturningGeneratedKeysFetchAdditionalRows(ctx, listener);
}
case MARIADB: {
if (!nativeSupportReturning(ctx))
return executeReturningGeneratedKeysFetchAdditionalRows(ctx, listener);
rs = executeReturningQuery(ctx, listener);
break;
}
@ -1245,7 +1268,7 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
}
}
private Field<?> returnedIdentity() {
private final Field<?> returnedIdentity() {
if (table.getIdentity() != null)
return table.getIdentity().getField();
else

View File

@ -1322,11 +1322,27 @@ final class Tools {
Field<?>[] result = new Field[fields.length];
for (int i = 0; i < fields.length; i++)
result[i] = DSL.field(fields[i].getUnqualifiedName(), fields[i].getDataType());
result[i] = unqualified(fields[i]);
return result;
}
static final List<Field<?>> unqualified(Collection<? extends Field<?>> fields) {
if (fields == null)
return null;
List<Field<?>> result = new ArrayList<>(fields.size());
for (Field<?> field : fields)
result.add(unqualified(field));
return result;
}
static final <T> Field<T> unqualified(Field<T> field) {
return DSL.field(field.getUnqualifiedName(), field.getDataType());
}
static final Name[] unqualifiedNames(Field<?>[] fields) {
if (fields == null)
return null;