agrosner / agrosner/DBFlow

Duplicate Column check in AlterTableMigration doesn't always work.

Offen
#1,689 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Kotlin
Sterne
4.8k
Forks
593
Ø Merge
1 Min.
Gemergte PRs (30 T.)
1

Beschreibung

DBFlow Version: 4.2.4

Bug or Feature Request: Bug

Description:
I am getting reports of one of my migrations failing for a very small amount of users with an `SQLiteException` with the message `duplicate column name`. I know this is caused by a previous migration that was done wrong by me, so this in itself isn't the problem.

However, as far as I know the `AlterTableMigration` is meant to only add new columns if they don't exist yet, but apparently that isn't the case, since this exception is raised. So my assumption here is that the check for existing columns doesn't quite work. This is quite a problem for me because I wanted to eliminate these crashes by detecting the column existing before the migration is run using the same logic as the one in `AlterTableMigration` and resetting the app in that case. But since the check not working is the cause of this exception I can't work around it by using the check.

2/3 of the devices impacted by this issue are Android 4, but I also get reports from Android 5-9, so it isn't an exclusive 4 issue.

Stacktrace from one report:
```
Caused by android.database.sqlite.SQLiteException: duplicate column name: [column_name] (code 1): , while compiling: ALTER TABLE `[table_name]` ADD COLUMN `[column_name]` INTEGER
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(SQLiteConnection.java)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement + 1113(SQLiteConnection.java:1113)
at android.database.sqlite.SQLiteConnection.prepare + 686(SQLiteConnection.java:686)
at android.database.sqlite.SQLiteSession.prepare + 588(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram. + 58(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement. + 31(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.executeSql + 1769(SQLiteDatabase.java:1769)
at android.database.sqlite.SQLiteDatabase.execSQL + 1700(SQLiteDatabase.java:1700)
at com.raizlabs.android.dbflow.structure.database.AndroidDatabase.execSQL + 26(AndroidDatabase.java:26)
at com.raizlabs.android.dbflow.sql.migration.AlterTableMigration.migrate + 80(AlterTableMigration.java:80)
at com.raizlabs.android.dbflow.structure.database.BaseDatabaseHelper.executeMigrations + 171(BaseDatabaseHelper.java:171)
at com.raizlabs.android.dbflow.structure.database.BaseDatabaseHelper.onUpgrade + 56(BaseDatabaseHelper.java:56)
at com.raizlabs.android.dbflow.structure.database.DatabaseHelperDelegate.onUpgrade + 79(DatabaseHelperDelegate.java:79)
at com.raizlabs.android.dbflow.structure.database.FlowSQLiteOpenHelper.onUpgrade + 84(FlowSQLiteOpenHelper.java:84)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked + 257(SQLiteOpenHelper.java:257)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase + 164(SQLiteOpenHelper.java:164)
at com.raizlabs.android.dbflow.structure.database.FlowSQLiteOpenHelper.getDatabase + 62(FlowSQLiteOpenHelper.java:62)
at com.raizlabs.android.dbflow.config.DatabaseDefinition.getWritableDatabase + 257(DatabaseDefinition.java:257)
at com.raizlabs.android.dbflow.config.DatabaseDefinition.executeTransaction + 280(DatabaseDefinition.java:280)
at com.raizlabs.android.dbflow.structure.database.transaction.Transaction.executeSync + 121(Transaction.java:121)
at com.raizlabs.android.dbflow.structure.database.transaction.DefaultTransactionQueue.run + 54(DefaultTransactionQueue.java:54)
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.