package com.raizlabs.android.dbflow.sqlcipher;
import android.content.ContentValues;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.raizlabs.android.dbflow.structure.database.DatabaseStatement;
import com.raizlabs.android.dbflow.structure.database.DatabaseWrapper;
import com.raizlabs.android.dbflow.structure.database.FlowCursor;
import net.sqlcipher.database.SQLiteDatabase;
/**
* Description: Implements the code necessary to use a {@link SQLiteDatabase} in dbflow.
*/
public class SQLCipherDatabase implements DatabaseWrapper {
private final SQLiteDatabase database;
public static SQLCipherDatabase from(SQLiteDatabase database) {
return new SQLCipherDatabase(database);
}
SQLCipherDatabase(SQLiteDatabase database) {
this.database = database;
}
@Override
public void execSQL(String query) {
database.execSQL(query);
}
@Override
public void beginTransaction() {
database.beginTransaction();
}
@Override
public void setTransactionSuccessful() {
database.setTransactionSuccessful();
}
@Override
public void endTransaction() {
database.endTransaction();
}
@Override
public int getVersion() {
return database.getVersion();
}
@Override
public DatabaseStatement compileStatement(String rawQuery) {
return SQLCipherStatement.from(database.compileStatement(rawQuery));
}
public SQLiteDatabase getDatabase() {
return database;
}
@Override
public FlowCursor rawQuery(String query, String[] selectionArgs) {
return FlowCursor.from(database.rawQuery(query, selectionArgs));
}
@Override
public long updateWithOnConflict(String tableName, ContentValues contentValues, String where, String[] whereArgs, int conflictAlgorithm) {
return database.updateWithOnConflict(tableName, contentValues, where, whereArgs, conflictAlgorithm);
}
@Override
public long insertWithOnConflict(String tableName, String nullColumnHack, ContentValues values, int sqLiteDatabaseAlgorithmInt) {
return database.insertWithOnConflict(tableName, nullColumnHack, values, sqLiteDatabaseAlgorithmInt);
}
@Override
public FlowCursor query(@NonNull String tableName,
@Nullable String[] columns,
@Nullable String selection,
@Nullable String[] selectionArgs,
@Nullable String groupBy,
@Nullable String having,
@Nullable String orderBy) {
return FlowCursor.from(database.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy));
}
@Override
public int delete(@NonNull String tableName, @Nullable String whereClause, @Nullable String[] whereArgs) {
return database.delete(tableName, whereClause, whereArgs);
}
}