package com.getbase.android.db.fluentsqlite;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import com.getbase.android.db.fluentsqlite.Query.QueryBuilder;
import android.database.sqlite.SQLiteDatabase;
public final class ViewActions {
private ViewActions() {
}
public static ViewSelector<ViewSelectStatementChooser> create() {
return new CreateViewAction();
}
public static ViewSelector<ViewAction> dropIfExists() {
return new DropViewAction();
}
public static class DropViewAction implements ViewSelector<ViewAction>, ViewAction {
private String mView;
DropViewAction() {
}
@Override
public void perform(SQLiteDatabase db) {
db.execSQL("DROP VIEW IF EXISTS " + mView);
}
@Override
public ViewAction view(String view) {
mView = checkNotNull(view);
return this;
}
}
public static class CreateViewAction implements ViewSelector<ViewSelectStatementChooser>, ViewAction, ViewSelectStatementChooser {
private String mView;
private RawQuery mQuery;
CreateViewAction() {
}
@Override
public void perform(SQLiteDatabase db) {
db.execSQL("CREATE VIEW " + mView + " AS " + mQuery.mRawQuery);
}
@Override
public ViewAction as(Query query) {
checkNotNull(query);
mQuery = query.toRawQuery();
checkArgument(mQuery.mRawQueryArgs.isEmpty(), "Cannot use query with bound args for View creation");
return this;
}
@Override
public ViewAction as(QueryBuilder queryBuilder) {
checkNotNull(queryBuilder);
return as(queryBuilder.build());
}
@Override
public ViewSelectStatementChooser view(String view) {
mView = checkNotNull(view);
return this;
}
}
public interface ViewSelector<T> {
T view(String view);
}
public interface ViewAction {
void perform(SQLiteDatabase db);
}
public interface ViewSelectStatementChooser {
ViewAction as(Query query);
ViewAction as(QueryBuilder queryBuilder);
}
}