Revert SQLiteQueryBuilder for now.

We've encountered subtle bugs in how apps are using this public
API, so revert it back to exactly what shipped in the last
release, and move functionality to new SQLiteStatementBuilder
class, since we already have several customers using it.

Test: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*
Test: atest cts/tests/tests/database/src/android/database/sqlite/cts/SQLiteQueryBuilderTest.java
Bug: 111486645
Change-Id: I6536f5d841db8ec59457f458a8365ff41fb8278e
(cherry picked from commit bc091ae8c95ea280327a988c2775042dc792569c)
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index a85911d..212ddd8 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -44,7 +44,7 @@
 import android.database.SQLException;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
-import android.database.sqlite.SQLiteQueryBuilder;
+import android.database.sqlite.SQLiteStatementBuilder;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.ParcelFileDescriptor;
@@ -910,7 +910,7 @@
             getContext().enforceCallingOrSelfPermission(
                     Downloads.Impl.PERMISSION_ACCESS_ALL, Constants.TAG);
 
-            final SQLiteQueryBuilder qb = getQueryBuilder(uri, match);
+            final SQLiteStatementBuilder qb = getStatementBuilder(uri, match);
             projection = new String[] {
                     Downloads.Impl.RequestHeaders.COLUMN_HEADER,
                     Downloads.Impl.RequestHeaders.COLUMN_VALUE
@@ -944,7 +944,7 @@
             logVerboseQueryInfo(projection, selection, selectionArgs, sort, db);
         }
 
-        final SQLiteQueryBuilder qb = getQueryBuilder(uri, match);
+        final SQLiteStatementBuilder qb = getStatementBuilder(uri, match);
         final Cursor ret = qb.query(db, projection, selection, selectionArgs, null, null, sort);
 
         if (ret != null) {
@@ -1112,7 +1112,7 @@
                     break;
                 }
 
-                final SQLiteQueryBuilder qb = getQueryBuilder(uri, match);
+                final SQLiteStatementBuilder qb = getStatementBuilder(uri, match);
                 count = qb.update(db, filteredValues, where, whereArgs);
                 if (updateSchedule || isCompleting) {
                     final long token = Binder.clearCallingIdentity();
@@ -1166,8 +1166,8 @@
      * Create a query builder that filters access to the underlying database
      * based on both the requested {@link Uri} and permissions of the caller.
      */
-    private SQLiteQueryBuilder getQueryBuilder(final Uri uri, int match) {
-        final SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
+    private SQLiteStatementBuilder getStatementBuilder(final Uri uri, int match) {
+        final SQLiteStatementBuilder qb = new SQLiteStatementBuilder();
         qb.setStrict(true);
 
         switch (match) {
@@ -1232,7 +1232,7 @@
             case MY_DOWNLOADS_ID:
             case ALL_DOWNLOADS:
             case ALL_DOWNLOADS_ID:
-                final SQLiteQueryBuilder qb = getQueryBuilder(uri, match);
+                final SQLiteStatementBuilder qb = getStatementBuilder(uri, match);
                 try (Cursor cursor = qb.query(db, null, where, whereArgs, null, null, null)) {
                     final DownloadInfo.Reader reader = new DownloadInfo.Reader(resolver, cursor);
                     final DownloadInfo info = new DownloadInfo(context);