package org.commcare.models.database; import android.content.ContentValues; import org.commcare.modern.database.DatabaseIndexingUtils; import org.commcare.modern.database.IndexedFixturePathsConstants; import org.commcare.modern.util.Pair; import net.sqlcipher.Cursor; import net.sqlcipher.database.SQLiteDatabase; import java.util.Set; /** * @author Phillip Mates (pmates@dimagi.com) */ public class IndexedFixturePathUtils { public static Pair<String, String> lookupIndexedFixturePaths(SQLiteDatabase db, String fixtureName) { Cursor c = db.query(IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_TABLE, new String[]{IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_BASE, IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_CHILD}, IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_NAME + "=?", new String[]{fixtureName}, null, null, null); try { if (c.getCount() == 0) { return null; } else { c.moveToFirst(); return Pair.create( c.getString(c.getColumnIndexOrThrow(IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_BASE)), c.getString(c.getColumnIndexOrThrow(IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_CHILD))); } } finally { c.close(); } } public static void insertIndexedFixturePathBases(SQLiteDatabase db, String fixtureName, String baseName, String childName) { ContentValues contentValues = new ContentValues(); contentValues.put(IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_BASE, baseName); contentValues.put(IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_CHILD, childName); contentValues.put(IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_NAME, fixtureName); try { db.beginTransaction(); long ret = db.insertOrThrow(IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_TABLE, IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_COL_BASE, contentValues); if (ret > Integer.MAX_VALUE) { throw new RuntimeException("Waaaaaaaaaay too many values"); } db.setTransactionSuccessful(); } finally { db.endTransaction(); } } public static void createStorageBackedFixtureIndexTable(SQLiteDatabase db) { db.execSQL(IndexedFixturePathsConstants.INDEXED_FIXTURE_PATHS_TABLE_STMT); db.execSQL(IndexedFixturePathsConstants.INDEXED_FIXTURE_INDEXING_STMT); } public static void buildFixtureIndices(SQLiteDatabase database, String tableName, Set<String> indices) { try { database.beginTransaction(); for (String indexStmt : DatabaseIndexingUtils.getIndexStatements(tableName, indices)) { database.execSQL(indexStmt); } database.setTransactionSuccessful(); } finally { database.endTransaction(); } } }