package co.smartreceipts.android.persistence.database.tables; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.support.annotation.NonNull; import co.smartreceipts.android.model.Category; import co.smartreceipts.android.persistence.database.defaults.TableDefaultsCustomizer; import co.smartreceipts.android.persistence.database.tables.adapters.CategoryDatabaseAdapter; import co.smartreceipts.android.persistence.database.tables.keys.CategoryPrimaryKey; import co.smartreceipts.android.persistence.database.tables.ordering.OrderBy; import co.smartreceipts.android.utils.log.Logger; /** * Stores all database operations related to the {@link Category} model object */ public final class CategoriesTable extends AbstractSqlTable<Category, String> { // SQL Definitions: public static final String TABLE_NAME = "categories"; public static final String COLUMN_NAME = "name"; public static final String COLUMN_CODE = "code"; public static final String COLUMN_BREAKDOWN = "breakdown"; public CategoriesTable(@NonNull SQLiteOpenHelper sqLiteOpenHelper) { super(sqLiteOpenHelper, TABLE_NAME, new CategoryDatabaseAdapter(), new CategoryPrimaryKey(), new OrderBy(COLUMN_NAME, false)); } @Override public synchronized void onCreate(@NonNull SQLiteDatabase db, @NonNull TableDefaultsCustomizer customizer) { super.onCreate(db, customizer); final String categories = "CREATE TABLE " + getTableName() + " (" + COLUMN_NAME + " TEXT PRIMARY KEY, " + COLUMN_CODE + " TEXT, " + COLUMN_BREAKDOWN + " BOOLEAN DEFAULT 1, " + AbstractSqlTable.COLUMN_DRIVE_SYNC_ID + " TEXT, " + AbstractSqlTable.COLUMN_DRIVE_IS_SYNCED + " BOOLEAN DEFAULT 0, " + AbstractSqlTable.COLUMN_DRIVE_MARKED_FOR_DELETION + " BOOLEAN DEFAULT 0, " + AbstractSqlTable.COLUMN_LAST_LOCAL_MODIFICATION_TIME + " DATE" + ");"; Logger.debug(this, categories); db.execSQL(categories); customizer.insertCategoryDefaults(this); } @Override public synchronized void onUpgrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion, @NonNull TableDefaultsCustomizer customizer) { super.onUpgrade(db, oldVersion, newVersion, customizer); if (oldVersion <= 2) { final String alterCategories = "ALTER TABLE " + getTableName() + " ADD " + COLUMN_BREAKDOWN + " BOOLEAN DEFAULT 1"; db.execSQL(alterCategories); } if (oldVersion <= 14) { onUpgradeToAddSyncInformation(db, oldVersion, newVersion); } } }