package com.quran.labs.androidquran.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton
class TranslationsDBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "translations.db";
private static final int DB_VERSION = 3;
private static final String CREATE_TRANSLATIONS_TABLE =
"CREATE TABLE " + TranslationsTable.TABLE_NAME + "(" +
TranslationsTable.ID + " integer primary key, " +
TranslationsTable.NAME + " varchar not null, " +
TranslationsTable.TRANSLATOR + " varchar, " +
TranslationsTable.TRANSLATOR_FOREIGN + " varchar, " +
TranslationsTable.FILENAME + " varchar not null, " +
TranslationsTable.URL + " varchar, " +
TranslationsTable.LANGUAGE_CODE + " varchar, " +
TranslationsTable.VERSION + " integer not null default 0);";
@Inject
TranslationsDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TRANSLATIONS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 3) {
// a new column is added and columns are re-arranged
final String BACKUP_TABLE = TranslationsTable.TABLE_NAME + "_backup";
db.beginTransaction();
try {
db.execSQL("ALTER TABLE " + TranslationsTable.TABLE_NAME + " RENAME TO " + BACKUP_TABLE);
db.execSQL(CREATE_TRANSLATIONS_TABLE);
db.execSQL("INSERT INTO " + TranslationsTable.TABLE_NAME + " (" +
TranslationsTable.ID + ", " +
TranslationsTable.NAME + ", " +
TranslationsTable.TRANSLATOR + ", " +
TranslationsTable.FILENAME + ", " +
TranslationsTable.URL + ", " +
TranslationsTable.VERSION + ")" +
"SELECT " + TranslationsTable.ID + ", " +
TranslationsTable.NAME + ", " +
TranslationsTable.TRANSLATOR + ", " +
TranslationsTable.FILENAME + ", " +
TranslationsTable.URL + ", " +
TranslationsTable.VERSION +
" FROM " + BACKUP_TABLE);
db.execSQL("DROP TABLE " + BACKUP_TABLE);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
}
static class TranslationsTable {
static final String TABLE_NAME = "translations";
static final String ID = "id";
static final String NAME = "name";
static final String TRANSLATOR = "translator";
static final String TRANSLATOR_FOREIGN = "translator_foreign";
static final String FILENAME = "filename";
static final String URL = "url";
static final String LANGUAGE_CODE = "languageCode";
static final String VERSION = "version";
}
}