From bb176577e9e07d6a3966ed5c60782ddbd0ddff68 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Tue, 15 Sep 2020 17:04:08 -0700 Subject: [PATCH] Back out "Use interface SupportSQLiteDatabase in Android Databases Plugin" Summary: This broke DB opening in FB apps. Will try to fix and reland this, but need to unblock people first. Reviewed By: cekkaewnumchai Differential Revision: D23705962 fbshipit-source-id: 3c9ff3a74e5a6d34e6cb2c75e7e2cec749b5a60e --- android/build.gradle | 1 - ...faultSqliteDatabaseConnectionProvider.java | 24 ---- .../impl/DefaultSqliteDatabaseProvider.java | 31 ----- .../impl/FrameworkSQLiteDatabaseWrapping.java | 35 ------ .../SqliteDatabaseConnectionProvider.java | 4 +- .../databases/impl/SqliteDatabaseDriver.java | 112 ++++++++---------- build.gradle | 1 - 7 files changed, 54 insertions(+), 154 deletions(-) delete mode 100644 android/src/main/java/com/facebook/flipper/plugins/databases/impl/DefaultSqliteDatabaseConnectionProvider.java delete mode 100644 android/src/main/java/com/facebook/flipper/plugins/databases/impl/DefaultSqliteDatabaseProvider.java delete mode 100644 android/src/main/java/com/facebook/flipper/plugins/databases/impl/FrameworkSQLiteDatabaseWrapping.java diff --git a/android/build.gradle b/android/build.gradle index 8aef1f987..9af5922fb 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -65,7 +65,6 @@ android { implementation deps.soloader implementation deps.jsr305 implementation deps.supportAppCompat - implementation deps.supportSqlite testImplementation deps.mockito testImplementation deps.robolectric diff --git a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/DefaultSqliteDatabaseConnectionProvider.java b/android/src/main/java/com/facebook/flipper/plugins/databases/impl/DefaultSqliteDatabaseConnectionProvider.java deleted file mode 100644 index e0b449ff9..000000000 --- a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/DefaultSqliteDatabaseConnectionProvider.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.flipper.plugins.databases.impl; - -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import androidx.sqlite.db.SupportSQLiteDatabase; -import java.io.File; - -public class DefaultSqliteDatabaseConnectionProvider implements SqliteDatabaseConnectionProvider { - - @Override - public SupportSQLiteDatabase openDatabase(File databaseFile) throws SQLiteException { - int flags = SQLiteDatabase.OPEN_READWRITE; - SQLiteDatabase database = - SQLiteDatabase.openDatabase(databaseFile.getAbsolutePath(), null, flags); - return FrameworkSQLiteDatabaseWrapping.wrap(database); - } -} diff --git a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/DefaultSqliteDatabaseProvider.java b/android/src/main/java/com/facebook/flipper/plugins/databases/impl/DefaultSqliteDatabaseProvider.java deleted file mode 100644 index 0c835cfc7..000000000 --- a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/DefaultSqliteDatabaseProvider.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.flipper.plugins.databases.impl; - -import android.content.Context; -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class DefaultSqliteDatabaseProvider implements SqliteDatabaseProvider { - - private Context context; - - public DefaultSqliteDatabaseProvider(Context context) { - this.context = context; - } - - @Override - public List getDatabaseFiles() { - List databaseFiles = new ArrayList<>(); - for (String databaseName : context.databaseList()) { - databaseFiles.add(context.getDatabasePath(databaseName)); - } - return databaseFiles; - } -} diff --git a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/FrameworkSQLiteDatabaseWrapping.java b/android/src/main/java/com/facebook/flipper/plugins/databases/impl/FrameworkSQLiteDatabaseWrapping.java deleted file mode 100644 index 74d6d2830..000000000 --- a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/FrameworkSQLiteDatabaseWrapping.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.flipper.plugins.databases.impl; - -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import android.os.Build; -import androidx.sqlite.db.SupportSQLiteDatabase; -import java.lang.reflect.Constructor; - -/** Gives access to package-private class FrameworkSQLiteDatabase */ -public class FrameworkSQLiteDatabaseWrapping { - - public static SupportSQLiteDatabase wrap(SQLiteDatabase database) throws SQLiteException { - try { - Class clazz = Class.forName("androidx.sqlite.db.framework.FrameworkSQLiteDatabase"); - Constructor constructor = clazz.getDeclaredConstructor(SQLiteDatabase.class); - constructor.setAccessible(true); - return (SupportSQLiteDatabase) constructor.newInstance(database); - } catch (Exception e) { - String errorMessage = - "Failed to instantiate androidx.sqlite.db.framework.FrameworkSQLiteDatabase"; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - throw new SQLiteException(errorMessage, e); - } else { - throw new SQLiteException(errorMessage); - } - } - } -} diff --git a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/SqliteDatabaseConnectionProvider.java b/android/src/main/java/com/facebook/flipper/plugins/databases/impl/SqliteDatabaseConnectionProvider.java index 7f7ec41d8..cf860aa6c 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/SqliteDatabaseConnectionProvider.java +++ b/android/src/main/java/com/facebook/flipper/plugins/databases/impl/SqliteDatabaseConnectionProvider.java @@ -7,11 +7,11 @@ package com.facebook.flipper.plugins.databases.impl; +import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; -import androidx.sqlite.db.SupportSQLiteDatabase; import java.io.File; public interface SqliteDatabaseConnectionProvider { - SupportSQLiteDatabase openDatabase(File databaseFile) throws SQLiteException; + SQLiteDatabase openDatabase(File databaseFile) throws SQLiteException; } diff --git a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/SqliteDatabaseDriver.java b/android/src/main/java/com/facebook/flipper/plugins/databases/impl/SqliteDatabaseDriver.java index 0890fad4e..dc83737f0 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/databases/impl/SqliteDatabaseDriver.java +++ b/android/src/main/java/com/facebook/flipper/plugins/databases/impl/SqliteDatabaseDriver.java @@ -9,17 +9,16 @@ package com.facebook.flipper.plugins.databases.impl; import android.content.Context; import android.database.Cursor; +import android.database.DatabaseUtils; +import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; +import android.database.sqlite.SQLiteStatement; import android.text.TextUtils; -import android.util.Log; import androidx.annotation.Nullable; -import androidx.sqlite.db.SupportSQLiteDatabase; -import androidx.sqlite.db.SupportSQLiteStatement; import com.facebook.flipper.plugins.databases.DatabaseDescriptor; import com.facebook.flipper.plugins.databases.DatabaseDriver; import com.facebook.flipper.plugins.databases.impl.SqliteDatabaseDriver.SqliteDatabaseDescriptor; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -34,18 +33,37 @@ public class SqliteDatabaseDriver extends DatabaseDriver getDatabaseFiles() { + List databaseFiles = new ArrayList<>(); + for (String databaseName : context.databaseList()) { + databaseFiles.add(context.getDatabasePath(databaseName)); + } + return databaseFiles; + } + }); } public SqliteDatabaseDriver( final Context context, final SqliteDatabaseProvider sqliteDatabaseProvider) { - this(context, sqliteDatabaseProvider, new DefaultSqliteDatabaseConnectionProvider()); + this( + context, + sqliteDatabaseProvider, + new SqliteDatabaseConnectionProvider() { + @Override + public SQLiteDatabase openDatabase(File databaseFile) throws SQLiteException { + int flags = SQLiteDatabase.OPEN_READWRITE; + return SQLiteDatabase.openDatabase(databaseFile.getAbsolutePath(), null, flags); + } + }); } public SqliteDatabaseDriver( @@ -72,11 +90,11 @@ public class SqliteDatabaseDriver extends DatabaseDriver getTableNames(SqliteDatabaseDescriptor databaseDescriptor) { try { - SupportSQLiteDatabase database = + SQLiteDatabase database = sqliteDatabaseConnectionProvider.openDatabase(databaseDescriptor.file); try { Cursor cursor = - database.query( + database.rawQuery( "SELECT name FROM " + SCHEMA_TABLE + " WHERE type IN (?, ?)", new String[] {"table", "view"}); try { @@ -89,7 +107,7 @@ public class SqliteDatabaseDriver extends DatabaseDriver> rows = cursorToList(cursor); @@ -151,19 +163,19 @@ public class SqliteDatabaseDriver extends DatabaseDriver indexedColumnNames = new ArrayList<>(); String indexName = indexesCursor.getString(indexesCursor.getColumnIndex("name")); - Cursor indexInfoCursor = database.query("PRAGMA index_info(" + indexName + ")", null); + Cursor indexInfoCursor = database.rawQuery("PRAGMA index_info(" + indexName + ")", null); try { while (indexInfoCursor.moveToNext()) { indexedColumnNames.add( @@ -234,19 +246,20 @@ public class SqliteDatabaseDriver extends DatabaseDriver> rows = cursorToList(cursor); @@ -316,8 +327,7 @@ public class SqliteDatabaseDriver extends DatabaseDriver