Home | History | Annotate | Download | only in room
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package androidx.room;
     18 
     19 import androidx.annotation.RestrictTo;
     20 import androidx.sqlite.db.SupportSQLiteStatement;
     21 
     22 /**
     23  * Implementations of this class knows how to delete or update a particular entity.
     24  * <p>
     25  * This is an internal library class and all of its implementations are auto-generated.
     26  *
     27  * @param <T> The type parameter of the entity to be deleted
     28  * @hide
     29  */
     30 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     31 @SuppressWarnings({"WeakerAccess", "unused"})
     32 public abstract class EntityDeletionOrUpdateAdapter<T> extends SharedSQLiteStatement {
     33     /**
     34      * Creates a DeletionOrUpdateAdapter that can delete or update the entity type T on the given
     35      * database.
     36      *
     37      * @param database The database to delete / update the item in.
     38      */
     39     public EntityDeletionOrUpdateAdapter(RoomDatabase database) {
     40         super(database);
     41     }
     42 
     43     /**
     44      * Create the deletion or update query
     45      *
     46      * @return An SQL query that can delete or update instances of T.
     47      */
     48     @Override
     49     protected abstract String createQuery();
     50 
     51     /**
     52      * Binds the entity into the given statement.
     53      *
     54      * @param statement The SQLite statement that prepared for the query returned from
     55      *                  createQuery.
     56      * @param entity    The entity of type T.
     57      */
     58     protected abstract void bind(SupportSQLiteStatement statement, T entity);
     59 
     60     /**
     61      * Deletes or updates the given entities in the database and returns the affected row count.
     62      *
     63      * @param entity The entity to delete or update
     64      * @return The number of affected rows
     65      */
     66     public final int handle(T entity) {
     67         final SupportSQLiteStatement stmt = acquire();
     68         try {
     69             bind(stmt, entity);
     70             return stmt.executeUpdateDelete();
     71         } finally {
     72             release(stmt);
     73         }
     74     }
     75 
     76     /**
     77      * Deletes or updates the given entities in the database and returns the affected row count.
     78      *
     79      * @param entities Entities to delete or update
     80      * @return The number of affected rows
     81      */
     82     public final int handleMultiple(Iterable<T> entities) {
     83         final SupportSQLiteStatement stmt = acquire();
     84         try {
     85             int total = 0;
     86             for (T entity : entities) {
     87                 bind(stmt, entity);
     88                 total += stmt.executeUpdateDelete();
     89             }
     90             return total;
     91         } finally {
     92             release(stmt);
     93         }
     94     }
     95 
     96     /**
     97      * Deletes or updates the given entities in the database and returns the affected row count.
     98      *
     99      * @param entities Entities to delete or update
    100      * @return The number of affected rows
    101      */
    102     public final int handleMultiple(T[] entities) {
    103         final SupportSQLiteStatement stmt = acquire();
    104         try {
    105             int total = 0;
    106             for (T entity : entities) {
    107                 bind(stmt, entity);
    108                 total += stmt.executeUpdateDelete();
    109             }
    110             return total;
    111         } finally {
    112             release(stmt);
    113         }
    114     }
    115 }
    116