/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Other licenses:
 * -----------------------------------------------------------------------------
 * Commercial licenses for this work are available. These replace the above
 * ASL 2.0 and offer limited warranties, support, maintenance, and commercial
 * database integrations.
 *
 * For more information, please visit: http://www.jooq.org/licenses
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
package org.jooq.impl;

import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.exists;
import static org.jooq.impl.DSL.notExists;
import static org.jooq.impl.DSL.table;
import static org.jooq.impl.Tools.filterOne;

import java.util.Collection;
import java.util.Optional;

import org.jooq.Condition;
import org.jooq.Configuration;
import org.jooq.DeleteConditionStep;
import org.jooq.DeleteResultStep;
import org.jooq.DeleteUsingStep;
import org.jooq.Field;
import org.jooq.Name;
import org.jooq.Operator;
import org.jooq.OrderField;
import org.jooq.Param;
import org.jooq.QueryPart;
import org.jooq.Record;
import org.jooq.Record1;
import org.jooq.Record10;
import org.jooq.Record11;
import org.jooq.Record12;
import org.jooq.Record13;
import org.jooq.Record14;
import org.jooq.Record15;
import org.jooq.Record16;
import org.jooq.Record17;
import org.jooq.Record18;
import org.jooq.Record19;
import org.jooq.Record2;
import org.jooq.Record20;
import org.jooq.Record21;
import org.jooq.Record22;
import org.jooq.Record3;
import org.jooq.Record4;
import org.jooq.Record5;
import org.jooq.Record6;
import org.jooq.Record7;
import org.jooq.Record8;
import org.jooq.Record9;
import org.jooq.Result;
import org.jooq.SQL;
import org.jooq.Select;
import org.jooq.SelectField;
import org.jooq.SelectFieldOrAsterisk;
import org.jooq.Table;
import org.jooq.TableLike;

Author:Lukas Eder
/** * @author Lukas Eder */
@SuppressWarnings({ "rawtypes", "unchecked" }) final class DeleteImpl<R extends Record> extends AbstractDelegatingRowCountQuery<DeleteQueryImpl<R>> implements // Cascading interface implementations for Delete behaviour DeleteUsingStep<R>, DeleteConditionStep<R>, DeleteResultStep<R> {
Generated UID
/** * Generated UID */
private static final long serialVersionUID = 2747566322757517382L; private boolean returningResult; DeleteImpl(Configuration configuration, WithImpl with, Table<R> table) { super(new DeleteQueryImpl<>(configuration, with, table)); } @Override public final DeleteImpl<R> using(TableLike<?> table) { getDelegate().addUsing(table); return this; } @Override public final DeleteImpl<R> using(TableLike<?>... tables) { getDelegate().addUsing(tables); return this; } @Override public final DeleteImpl<R> using(Collection<? extends TableLike<?>> tables) { getDelegate().addUsing(tables); return this; } @Override public final DeleteImpl<R> using(SQL sql) { return using(table(sql)); } @Override public final DeleteImpl<R> using(String sql) { return using(table(sql)); } @Override public final DeleteImpl<R> using(String sql, Object... bindings) { return using(table(sql, bindings)); } @Override public final DeleteImpl<R> using(String sql, QueryPart... parts) { return using(table(sql, parts)); } @Override public final DeleteImpl<R> using(Name name) { return using(table(name)); } @Override public final DeleteImpl<R> where(Condition conditions) { getDelegate().addConditions(conditions); return this; } @Override public final DeleteImpl<R> where(Condition... conditions) { getDelegate().addConditions(conditions); return this; } @Override public final DeleteImpl<R> where(Collection<? extends Condition> conditions) { getDelegate().addConditions(conditions); return this; } @Override public final DeleteImpl<R> where(Field<Boolean> condition) { return where(condition(condition)); } @Override @Deprecated public final DeleteImpl<R> where(Boolean condition) { return where(condition(condition)); } @Override public final DeleteImpl<R> where(SQL sql) { return where(condition(sql)); } @Override public final DeleteImpl<R> where(String sql) { return where(condition(sql)); } @Override public final DeleteImpl<R> where(String sql, Object... bindings) { return where(condition(sql, bindings)); } @Override public final DeleteImpl<R> where(String sql, QueryPart... parts) { return where(condition(sql, parts)); } @Override public final DeleteImpl<R> whereExists(Select<?> select) { return andExists(select); } @Override public final DeleteImpl<R> whereNotExists(Select<?> select) { return andNotExists(select); } @Override public final DeleteImpl<R> and(Condition condition) { getDelegate().addConditions(condition); return this; } @Override public final DeleteImpl<R> and(Field<Boolean> condition) { return and(condition(condition)); } @Override @Deprecated public final DeleteImpl<R> and(Boolean condition) { return and(condition(condition)); } @Override public final DeleteImpl<R> and(SQL sql) { return and(condition(sql)); } @Override public final DeleteImpl<R> and(String sql) { return and(condition(sql)); } @Override public final DeleteImpl<R> and(String sql, Object... bindings) { return and(condition(sql, bindings)); } @Override public final DeleteImpl<R> and(String sql, QueryPart... parts) { return and(condition(sql, parts)); } @Override public final DeleteImpl<R> andNot(Condition condition) { return and(condition.not()); } @Override public final DeleteImpl<R> andNot(Field<Boolean> condition) { return andNot(condition(condition)); } @Override @Deprecated public final DeleteImpl<R> andNot(Boolean condition) { return andNot(condition(condition)); } @Override public final DeleteImpl<R> andExists(Select<?> select) { return and(exists(select)); } @Override public final DeleteImpl<R> andNotExists(Select<?> select) { return and(notExists(select)); } @Override public final DeleteImpl<R> or(Condition condition) { getDelegate().addConditions(Operator.OR, condition); return this; } @Override public final DeleteImpl<R> or(Field<Boolean> condition) { return or(condition(condition)); } @Override @Deprecated public final DeleteImpl<R> or(Boolean condition) { return or(condition(condition)); } @Override public final DeleteImpl<R> or(SQL sql) { return or(condition(sql)); } @Override public final DeleteImpl<R> or(String sql) { return or(condition(sql)); } @Override public final DeleteImpl<R> or(String sql, Object... bindings) { return or(condition(sql, bindings)); } @Override public final DeleteImpl<R> or(String sql, QueryPart... parts) { return or(condition(sql, parts)); } @Override public final DeleteImpl<R> orNot(Condition condition) { return or(condition.not()); } @Override public final DeleteImpl<R> orNot(Field<Boolean> condition) { return orNot(condition(condition)); } @Override @Deprecated public final DeleteImpl<R> orNot(Boolean condition) { return orNot(condition(condition)); } @Override public final DeleteImpl<R> orExists(Select<?> select) { return or(exists(select)); } @Override public final DeleteImpl<R> orNotExists(Select<?> select) { return or(notExists(select)); } @Override public final DeleteImpl<R> orderBy(OrderField<?>... fields) { getDelegate().addOrderBy(fields); return this; } @Override public final DeleteImpl<R> orderBy(Collection<? extends OrderField<?>> fields) { getDelegate().addOrderBy(fields); return this; } @Override public final DeleteImpl<R> orderBy(int... fieldIndexes) { return orderBy(Tools.inline(fieldIndexes)); } @Override public final DeleteImpl<R> limit(Number numberOfRows) { getDelegate().addLimit(numberOfRows); return this; } @Override public final DeleteImpl<R> limit(Param<? extends Number> numberOfRows) { getDelegate().addLimit(numberOfRows); return this; } @Override public final DeleteImpl<R> returning() { getDelegate().setReturning(); return this; } @Override public final DeleteImpl<R> returning(SelectFieldOrAsterisk... f) { getDelegate().setReturning(f); return this; } @Override public final DeleteImpl<R> returning(Collection<? extends SelectFieldOrAsterisk> f) { getDelegate().setReturning(f); return this; } @Override public final DeleteImpl returningResult(SelectFieldOrAsterisk... f) { returningResult = true; getDelegate().setReturning(f); return this; } @Override public final DeleteImpl returningResult(Collection<? extends SelectFieldOrAsterisk> f) { returningResult = true; getDelegate().setReturning(f); return this; } @Override public final <T1> DeleteResultStep<Record1<T1>> returningResult(SelectField<T1> field1) { return returningResult(new SelectField[] { field1 }); } @Override public final <T1, T2> DeleteResultStep<Record2<T1, T2>> returningResult(SelectField<T1> field1, SelectField<T2> field2) { return returningResult(new SelectField[] { field1, field2 }); } @Override public final <T1, T2, T3> DeleteResultStep<Record3<T1, T2, T3>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3) { return returningResult(new SelectField[] { field1, field2, field3 }); } @Override public final <T1, T2, T3, T4> DeleteResultStep<Record4<T1, T2, T3, T4>> returningResult(SelectField<T1> field1, SelectField<T2> field2, SelectField<T3> field3, SelectField<T4> field4) { return returningResult(new SelectField[] { field1, field2, field3, field4 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21 }); } @Override public final <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) { return returningResult(new SelectField[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21, field22 }); } @Override public final Result<R> fetch() { getDelegate().execute(); return returningResult ? (Result<R>) getDelegate().getResult() : getDelegate().getReturnedRecords(); } @Override public final R fetchOne() { getDelegate().execute(); return filterOne(returningResult ? (Result<R>) getDelegate().getResult() : getDelegate().getReturnedRecords()); } @Override public final Optional<R> fetchOptional() { return Optional.ofNullable(fetchOne()); } }