diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2020-05-19 17:22:25 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-05-19 17:22:25 +0000 |
| commit | f6f2273cb03f5cf3ebaa0eca75354cb8a433b050 (patch) | |
| tree | 50e5d2602cf7e5c7b2dbc31c951317b67ebfdbf5 /core/java/android | |
| parent | 470910085bf81db1edf260c2a884b11dfb54fba2 (diff) | |
| parent | 0fd3e397601d5d4deb32fb132e6307410c8626f0 (diff) | |
Merge "Carry over bugfixes from MediaProvider." into rvc-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/database/DatabaseUtils.java | 52 | ||||
| -rw-r--r-- | core/java/android/database/sqlite/SQLiteQueryBuilder.java | 6 |
2 files changed, 55 insertions, 3 deletions
diff --git a/core/java/android/database/DatabaseUtils.java b/core/java/android/database/DatabaseUtils.java index 9b809b86eae9..b978ae559390 100644 --- a/core/java/android/database/DatabaseUtils.java +++ b/core/java/android/database/DatabaseUtils.java @@ -191,6 +191,58 @@ public class DatabaseUtils { } } + /** {@hide} */ + public static long executeInsert(@NonNull SQLiteDatabase db, @NonNull String sql, + @Nullable Object[] bindArgs) throws SQLException { + try (SQLiteStatement st = db.compileStatement(sql)) { + bindArgs(st, bindArgs); + return st.executeInsert(); + } + } + + /** {@hide} */ + public static int executeUpdateDelete(@NonNull SQLiteDatabase db, @NonNull String sql, + @Nullable Object[] bindArgs) throws SQLException { + try (SQLiteStatement st = db.compileStatement(sql)) { + bindArgs(st, bindArgs); + return st.executeUpdateDelete(); + } + } + + /** {@hide} */ + private static void bindArgs(@NonNull SQLiteStatement st, @Nullable Object[] bindArgs) { + if (bindArgs == null) return; + + for (int i = 0; i < bindArgs.length; i++) { + final Object bindArg = bindArgs[i]; + switch (getTypeOfObject(bindArg)) { + case Cursor.FIELD_TYPE_NULL: + st.bindNull(i + 1); + break; + case Cursor.FIELD_TYPE_INTEGER: + st.bindLong(i + 1, ((Number) bindArg).longValue()); + break; + case Cursor.FIELD_TYPE_FLOAT: + st.bindDouble(i + 1, ((Number) bindArg).doubleValue()); + break; + case Cursor.FIELD_TYPE_BLOB: + st.bindBlob(i + 1, (byte[]) bindArg); + break; + case Cursor.FIELD_TYPE_STRING: + default: + if (bindArg instanceof Boolean) { + // Provide compatibility with legacy + // applications which may pass Boolean values in + // bind args. + st.bindLong(i + 1, ((Boolean) bindArg).booleanValue() ? 1 : 0); + } else { + st.bindString(i + 1, bindArg.toString()); + } + break; + } + } + } + /** * Binds the given Object to the given SQLiteProgram using the proper * typing. For example, bind numbers as longs/doubles, and everything else diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java index 36ec67ee1471..669d0466fdf2 100644 --- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java +++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java @@ -626,7 +626,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } - return db.executeSql(sql, sqlArgs); + return DatabaseUtils.executeInsert(db, sql, sqlArgs); } /** @@ -702,7 +702,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } - return db.executeSql(sql, sqlArgs); + return DatabaseUtils.executeUpdateDelete(db, sql, sqlArgs); } /** @@ -762,7 +762,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } - return db.executeSql(sql, sqlArgs); + return DatabaseUtils.executeUpdateDelete(db, sql, sqlArgs); } private void enforceStrictColumns(@Nullable String[] projection) { |
