/**
*
*/
package org.commcare.android.database.app;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
import org.commcare.android.database.TableBuilder;
import org.commcare.android.database.app.models.UserKeyRecord;
import org.commcare.resources.model.Resource;
import org.javarosa.core.model.instance.FormInstance;
import android.content.Context;
/**
* The helper for opening/updating the global (unencrypted) db space for CommCare.
*
*
*
* @author ctsims
*
*/
public class DatabaseAppOpenHelper extends SQLiteOpenHelper {
/**
* Version History
* V.2 - Added recovery table
* V.3 - Upgraded Resource models to have an optional descriptor field
*/
private static final int DB_VERSION_APP = 4;
private static final String DB_LOCATOR_PREF_APP = "database_app_";
private Context context;
public DatabaseAppOpenHelper(Context context, String appId) {
super(context, getDbName(appId), null, DB_VERSION_APP);
}
private static String getDbName(String appId) {
return DB_LOCATOR_PREF_APP + appId;
}
/* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
*/
@Override
public void onCreate(SQLiteDatabase database) {
try {
database.beginTransaction();
TableBuilder builder = new TableBuilder("GLOBAL_RESOURCE_TABLE");
builder.addData(new Resource());
database.execSQL(builder.getTableCreateString());
builder = new TableBuilder("UPGRADE_RESOURCE_TABLE");
builder.addData(new Resource());
database.execSQL(builder.getTableCreateString());
builder = new TableBuilder("RECOVERY_RESOURCE_TABLE");
builder.addData(new Resource());
database.execSQL(builder.getTableCreateString());
builder = new TableBuilder("fixture");
builder.addData(new FormInstance());
database.execSQL(builder.getTableCreateString());
builder = new TableBuilder(UserKeyRecord.class);
database.execSQL(builder.getTableCreateString());
database.execSQL("CREATE INDEX global_index_id ON GLOBAL_RESOURCE_TABLE ( " + Resource.META_INDEX_PARENT_GUID + " )");
database.execSQL("CREATE INDEX upgrade_index_id ON UPGRADE_RESOURCE_TABLE ( " + Resource.META_INDEX_PARENT_GUID + " )");
database.execSQL("CREATE INDEX recovery_index_id ON RECOVERY_RESOURCE_TABLE ( " + Resource.META_INDEX_PARENT_GUID + " )");
database.setTransactionSuccessful();
} finally {
database.endTransaction();
}
}
/* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
new AppDatabaseUpgrader(context).upgrade(db, oldVersion, newVersion);
}
}