package com.getbase.android.db.fluentsqlite; import static com.google.common.base.Preconditions.checkNotNull; import com.getbase.android.db.fluentsqlite.Expressions.Expression; import com.google.common.base.Functions; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.FluentIterable; import com.google.common.collect.Lists; import android.database.sqlite.SQLiteDatabase; import java.util.Arrays; import java.util.List; public class Delete implements DeleteTableSelector { private String mTable; private List<String> mSelections = Lists.newArrayList(); private List<Object> mSelectionArgs = Lists.newArrayList(); private Delete() { } public static DeleteTableSelector delete() { return new Delete(); } public int perform(SQLiteDatabase db) { return db.delete( mTable, Joiner.on(" AND ").join(mSelections), FluentIterable.from(mSelectionArgs).transform(Functions.toStringFunction()).toArray(String.class) ); } @Override public Delete from(String table) { mTable = checkNotNull(table); return this; } @SafeVarargs public final <T> Delete where(String selection, T... selectionArgs) { if (selection != null) { mSelections.add("(" + selection + ")"); if (selectionArgs != null) { mSelectionArgs.addAll(Arrays.asList(selectionArgs)); } } else { Preconditions.checkArgument(selectionArgs == null || selectionArgs.length == 0, "Cannot use not null arguments with null selection"); } return this; } @SafeVarargs public final <T> Delete where(Expression expression, T... selectionArgs) { return where(expression.getSql(), expression.getMergedArgs(selectionArgs)); } }