1394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski/* 2394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * Copyright (C) 2010 The Android Open Source Project 3394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * 4394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * Licensed under the Apache License, Version 2.0 (the "License"); 5394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * you may not use this file except in compliance with the License. 6394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * You may obtain a copy of the License at 7394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * 8394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * http://www.apache.org/licenses/LICENSE-2.0 9394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * 10394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * Unless required by applicable law or agreed to in writing, software 11394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * distributed under the License is distributed on an "AS IS" BASIS, 12394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * See the License for the specific language governing permissions and 14394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * limitations under the License. 15394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski */ 16394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 17394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskipackage com.android.dumprendertree2; 18394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 19394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskiimport android.content.ContentValues; 20394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskiimport android.content.Context; 21394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskiimport android.database.Cursor; 22394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskiimport android.database.SQLException; 23394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskiimport android.database.sqlite.SQLiteDatabase; 24394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskiimport android.database.sqlite.SQLiteOpenHelper; 25394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 26394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskiimport java.util.HashSet; 27394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskiimport java.util.Set; 28394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 29394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski/** 30394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * A basic class that wraps database accesses inside itself and provides functionality to 31394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski * store and retrieve AbstractResults. 32394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski */ 33394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowskipublic class SummarizerDBHelper { 34394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static final String KEY_ID = "id"; 35394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static final String KEY_PATH = "path"; 36394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static final String KEY_BYTES = "bytes"; 37394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 38394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static final String DATABASE_NAME = "SummarizerDB"; 39394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static final int DATABASE_VERSION = 1; 40394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 41394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski static final String EXPECTED_FAILURES_TABLE = "expectedFailures"; 42394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski static final String UNEXPECTED_FAILURES_TABLE = "unexpectedFailures"; 43394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski static final String EXPECTED_PASSES_TABLE = "expextedPasses"; 44394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski static final String UNEXPECTED_PASSES_TABLE = "unexpextedPasses"; 45394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static final Set<String> TABLES_NAMES = new HashSet<String>(); 46394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski { 47394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski TABLES_NAMES.add(EXPECTED_FAILURES_TABLE); 48394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski TABLES_NAMES.add(EXPECTED_PASSES_TABLE); 49394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski TABLES_NAMES.add(UNEXPECTED_FAILURES_TABLE); 50394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski TABLES_NAMES.add(UNEXPECTED_PASSES_TABLE); 51394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 52394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 53394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static final void createTables(SQLiteDatabase db) { 54394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski String cmd; 55394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski for (String tableName : TABLES_NAMES) { 56394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski cmd = "create table " + tableName + " (" 57394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski + KEY_ID + " integer primary key autoincrement, " 58394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski + KEY_PATH + " text not null, " 59394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski + KEY_BYTES + " blob not null);"; 60394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski db.execSQL(cmd); 61394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 62394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 63394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 64394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static final void dropTables(SQLiteDatabase db) { 65394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski for (String tableName : TABLES_NAMES) { 66394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski db.execSQL("DROP TABLE IF EXISTS " + tableName); 67394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 68394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 69394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 70394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private static class DatabaseHelper extends SQLiteOpenHelper { 71394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski DatabaseHelper(Context context) { 72394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski super(context, DATABASE_NAME, null, DATABASE_VERSION); 73394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 74394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 75394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski @Override 76394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public void onCreate(SQLiteDatabase db) { 77394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski dropTables(db); 78394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski createTables(db); 79394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 80394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 81394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski @Override 82394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 83394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski /** NOOP for now, because we will never upgrade the db */ 84394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 85394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 86394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public void reset(SQLiteDatabase db) { 87394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski dropTables(db); 88394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski createTables(db); 89394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 90394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 91394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 92394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private DatabaseHelper mDbHelper; 93394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private SQLiteDatabase mDb; 94394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 95394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski private final Context mContext; 96394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 97394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public SummarizerDBHelper(Context ctx) { 98394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski mContext = ctx; 99394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski mDbHelper = new DatabaseHelper(mContext); 100394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 101394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 102394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public void reset() { 103394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski mDbHelper.reset(this.mDb); 104394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 105394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 106394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public void open() throws SQLException { 107394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski mDb = mDbHelper.getWritableDatabase(); 108394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 109394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 110394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public void close() { 111394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski mDbHelper.close(); 112394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 113394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 114394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public void insertAbstractResult(AbstractResult result, String table) { 115394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski ContentValues cv = new ContentValues(); 116394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski cv.put(KEY_PATH, result.getRelativePath()); 117394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski cv.put(KEY_BYTES, result.getBytes()); 118394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski mDb.insert(table, null, cv); 119394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 120394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 121394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public Cursor getAbstractResults(String table) throws SQLException { 122394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski return mDb.query(false, table, new String[] {KEY_BYTES}, null, null, null, null, 123394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski KEY_PATH + " ASC", null); 124394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 125394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski 126394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski public static AbstractResult getAbstractResult(Cursor cursor) { 127394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski return AbstractResult.create(cursor.getBlob(cursor.getColumnIndex(KEY_BYTES))); 128394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski } 129394e0fb84996f5f5ee9e33c9e2f0e11066e6f943Maksymilian Osowski}