Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f8dc074 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clear statement cache if schema changes." into udc-dev

parents ea79109b 48b72ed6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1392,6 +1392,10 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen
        return sql.replaceAll("[\\s]*\\n+[\\s]*", " ");
    }

    void clearPreparedStatementCache() {
        mPreparedStatementCache.evictAll();
    }

    /**
     * Holder type for a prepared statement.
     *
+10 −0
Original line number Diff line number Diff line
@@ -1126,6 +1126,16 @@ public final class SQLiteConnectionPool implements Closeable {
        mConnectionWaiterPool = waiter;
    }

    void clearAcquiredConnectionsPreparedStatementCache() {
        synchronized (mLock) {
            if (!mAcquiredConnections.isEmpty()) {
                for (SQLiteConnection connection : mAcquiredConnections.keySet()) {
                    connection.clearPreparedStatementCache();
                }
            }
        }
    }

    /**
     * Dumps debugging information about this connection pool.
     *
+4 −2
Original line number Diff line number Diff line
@@ -2088,10 +2088,12 @@ public final class SQLiteDatabase extends SQLiteClosable {
            try (SQLiteStatement statement = new SQLiteStatement(this, sql, bindArgs)) {
                return statement.executeUpdateDelete();
            } finally {
                // If schema was updated, close non-primary connections, otherwise they might
                // have outdated schema information
                // If schema was updated, close non-primary connections and clear prepared
                // statement caches of active connections, otherwise they might have outdated
                // schema information.
                if (statementType == DatabaseUtils.STATEMENT_DDL) {
                    mConnectionPoolLocked.closeAvailableNonPrimaryConnectionsAndLogExceptions();
                    mConnectionPoolLocked.clearAcquiredConnectionsPreparedStatementCache();
                }
            }
        } finally {