@@ -679,6 +679,42 @@ class DatabaseMigratorTests : GRDBTestCase {
679679 try migrator. migrate ( dbQueue)
680680 }
681681
682+ func testHasSchemaChangesWorksWithReadonlyConfig( ) throws {
683+ // 1st version of the migrator
684+ var migrator1 = DatabaseMigrator ( )
685+ migrator1. registerMigration ( " 1 " ) { db in
686+ try db. create ( table: " player " ) { t in
687+ t. autoIncrementedPrimaryKey ( " id " )
688+ t. column ( " name " , . text)
689+ }
690+ }
691+
692+ // 2nd version of the migrator
693+ var migrator2 = DatabaseMigrator ( )
694+ migrator2. registerMigration ( " 1 " ) { db in
695+ try db. create ( table: " player " ) { t in
696+ t. autoIncrementedPrimaryKey ( " id " )
697+ t. column ( " name " , . text)
698+ t. column ( " score " , . integer) // <- schema change, because reasons (development)
699+ }
700+ }
701+
702+ let dbName = ProcessInfo . processInfo. globallyUniqueString
703+ let dbQueue = try makeDatabaseQueue ( filename: dbName)
704+
705+ try XCTAssertFalse ( dbQueue. read ( migrator1. hasSchemaChanges) )
706+ try migrator1. migrate ( dbQueue)
707+ try XCTAssertFalse ( dbQueue. read ( migrator1. hasSchemaChanges) )
708+ try dbQueue. close ( )
709+
710+ // check that the migrator doesn't fail for a readonly connection
711+ dbConfiguration. readonly = true
712+ let readonlyQueue = try makeDatabaseQueue ( filename: dbName)
713+
714+ try XCTAssertFalse ( readonlyQueue. read ( migrator1. hasSchemaChanges) )
715+ try XCTAssertTrue ( readonlyQueue. read ( migrator2. hasSchemaChanges) )
716+ }
717+
682718 func testEraseDatabaseOnSchemaChange( ) throws {
683719 // 1st version of the migrator
684720 var migrator1 = DatabaseMigrator ( )
0 commit comments