package com.raizlabs.android.dbflow.sql.language; import android.support.annotation.NonNull; import com.raizlabs.android.dbflow.annotation.ConflictAction; import com.raizlabs.android.dbflow.config.FlowManager; import com.raizlabs.android.dbflow.sql.Query; import com.raizlabs.android.dbflow.sql.QueryBuilder; /** * Description: The SQLite UPDATE query. Will update rows in the DB. */ public class Update<TModel> implements Query { /** * The conflict action to resolve updates. */ private ConflictAction conflictAction = ConflictAction.NONE; private final Class<TModel> table; /** * Constructs new instace of an UPDATE query with the specified table. * * @param table The table to use. */ public Update(Class<TModel> table) { this.table = table; } @NonNull public Update<TModel> conflictAction(ConflictAction conflictAction) { this.conflictAction = conflictAction; return this; } @NonNull public Update<TModel> or(ConflictAction conflictAction) { return conflictAction(conflictAction); } /** * @return This instance. * @see ConflictAction#ROLLBACK */ @NonNull public Update<TModel> orRollback() { return conflictAction(ConflictAction.ROLLBACK); } /** * @return This instance. * @see ConflictAction#ABORT */ @NonNull public Update<TModel> orAbort() { return conflictAction(ConflictAction.ABORT); } /** * @return This instance. * @see ConflictAction#REPLACE */ @NonNull public Update<TModel> orReplace() { return conflictAction(ConflictAction.REPLACE); } /** * @return This instance. * @see ConflictAction#FAIL */ @NonNull public Update<TModel> orFail() { return conflictAction(ConflictAction.FAIL); } /** * @return This instance. * @see ConflictAction#IGNORE */ @NonNull public Update<TModel> orIgnore() { return conflictAction(ConflictAction.IGNORE); } /** * Begins a SET piece of the SQL query * * @param conditions The array of conditions that define this SET statement * @return A SET query piece of this statement */ @NonNull public Set<TModel> set(SQLOperator... conditions) { return new Set<>(this, table).conditions(conditions); } @Override public String getQuery() { QueryBuilder queryBuilder = new QueryBuilder("UPDATE "); if (conflictAction != null && !conflictAction.equals(ConflictAction.NONE)) { queryBuilder.append("OR").appendSpaceSeparated(conflictAction.name()); } queryBuilder.append(FlowManager.getTableName(table)).appendSpace(); return queryBuilder.getQuery(); } public Class<TModel> getTable() { return table; } }