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

Commit 0431ae76 authored by Lee Shombert's avatar Lee Shombert
Browse files

Correct handling of journal mode changes

Bug: 287126569

The SQLite database configuration is updated in a three-step process:
 1. Identify the aspects that have changed by comparing the input
    configuration to the stored configuration.
 2. Update the stored configuration.
 3. Apply the stored configuration for every aspect that changed.

The journal mode and sync mode did not follow this process.  Both
tried to identify a change to the aspect after step 2, which means
that it always detected a "no change" case (after step 2, the stored
configuration is identical to the input configuration).

This change computes the "journal mode changed" flag and the "sync
mode changed" before step 2.

Test: atest
 * CtsDatabaseTestCases
 * FrameworksCoreTests:android.database.sqlite

Change-Id: I64fb7867c2572ba9dc527335f56b93497f047c09
parent 3bd2ba44
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -580,6 +580,10 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen
        final int oldSize = mConfiguration.perConnectionSql.size();
        final int newSize = configuration.perConnectionSql.size();
        boolean perConnectionSqlChanged = newSize > oldSize;
        boolean journalModeChanged = !configuration.resolveJournalMode().equalsIgnoreCase(
                mConfiguration.resolveJournalMode());
        boolean syncModeChanged =
                !configuration.resolveSyncMode().equalsIgnoreCase(mConfiguration.resolveSyncMode());

        // Update configuration parameters.
        mConfiguration.updateParametersFrom(configuration);
@@ -591,14 +595,10 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen
            setForeignKeyModeFromConfiguration();
        }

        boolean journalModeChanged = !configuration.resolveJournalMode().equalsIgnoreCase(
                mConfiguration.resolveJournalMode());
        if (journalModeChanged) {
            setJournalFromConfiguration();
        }

        boolean syncModeChanged =
                !configuration.resolveSyncMode().equalsIgnoreCase(mConfiguration.resolveSyncMode());
        if (syncModeChanged) {
            setSyncModeFromConfiguration();
        }