Skip to content

pragma_table_info Failed to initialize the local storage adapter for the DataStore plugin #3043

Open
@atomicalsoftwares

Description

@atomicalsoftwares

Before opening, please confirm:

Language and Async Model

Java

Amplify Categories

DataStore

Gradle script dependencies

dependencies {
    implementation 'androidx.appcompat:appcompat:1.7.0'
    implementation 'com.google.android.material:material:1.12.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
    implementation 'com.google.firebase:firebase-crashlytics:19.4.3'
    implementation 'androidx.navigation:navigation-fragment:2.8.9'
    implementation 'androidx.navigation:navigation-ui:2.8.9'
    androidTestImplementation 'androidx.test.ext:junit:1.2.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
    implementation "androidx.viewpager2:viewpager2:1.1.0"
    testImplementation 'junit:junit:4.13.2'
    //implementation "org.mozilla.geckoview:geckoview-beta-armeabi-v7a:96.0.20211228195952"
    implementation "androidx.security:security-crypto:1.1.0-alpha07"
    implementation('com.amazonaws:aws-android-sdk-mobile-client:2.79.0@aar') {
        transitive = true
    }
    implementation 'com.amplifyframework:aws-auth-cognito:2.27.3'
    implementation 'com.amplifyframework:core:2.27.3'
    implementation 'com.amplifyframework:aws-api:2.27.3'
    implementation 'com.amplifyframework:aws-datastore:2.27.3'

    implementation 'com.clover.sdk:clover-android-sdk:323'
    implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.14'
    implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.14'
    implementation 'me.pushy:sdk:1.0.121'

    implementation platform('com.google.firebase:firebase-bom:33.13.0')
    implementation 'com.google.firebase:firebase-analytics-ktx:22.4.0'
    implementation('com.google.firebase:firebase-firestore:25.1.4')

    implementation 'com.google.zxing:core:3.5.3'
    // Support for Java 8 features
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

Environment information

Android Gradle Plugin Version 8.9.2

Gradle Version 8.11.1 or 8.14



Please include any relevant guides or documentation you're referencing

No response

Describe the bug

Hello,

When I use DataStore on Android version com.amplifyframework:aws-datastore:2.25.0 it works fine, as soon as I update to com.amplifyframework:aws-datastore:2.27.0 (or 2.27.3) i get the attached crash log.

All other libraries are updated to latest.

Android Emulator version: 7.1.1 Nougat x86

Reproduction steps (if applicable)

No response

Code Snippet

    private void configureAmplify(Context temporaryContext) {
        if (GlobalState.isAwsMobileClientInitialized && !GlobalState.isAmplifyConfigured) {
            try {
                Amplify.addPlugin(new AWSCognitoAuthPlugin());
                Amplify.addPlugin(new AWSDataStorePlugin());
                Amplify.addPlugin(new AWSApiPlugin());
                Amplify.configure(temporaryContext);
                DataStoreCategory dataStorePlugin = Amplify.DataStore;
                dataStorePlugin.start(()->{
                    Log.d("Amplify", "DataStore started");
                }, error -> {
                    Log.e("Amplify", "Error starting DataStore: " + error.getMessage());
                });
                Log.d("Amplify", "Configured");

            } catch (Exception e) {
                Log.e("Amplify", "Message", e);
            }

        }
        GlobalState.isAmplifyConfigured = true;
        GlobalState.isLoading = false;
        GlobalState.isAuthenticated = true;
        notifyObservers();
    }

Log output

Amplify       D  Configured
SQLiteLog     E  (1) no such table: pragma_table_info
art           I  Do full code cache collection, code=124KB, data=117KB
              I  Starting a blocking GC JitCodeCache
              I  After code cache collection, code=90KB, data=72KB
QueryConfig   E  Error querying configuration
                 java.lang.IllegalStateException: Failed to get plugin because initialization previously failed.  See attached exception for details.
                 	at com.amplifyframework.core.category.Category.getPluginIfConfiguredOrThrow(Category.java:272)
                 	at com.amplifyframework.core.category.Category.getSelectedPlugin(Category.java:252)
                 	at com.amplifyframework.datastore.DataStoreCategory.query(DataStoreCategory.java:128)
                 	at com.atomicalsoftwares.integracionathmovil.fragments.ConfigurationFragment.lambda$querySavedConfiguration$29$com-atomicalsoftwares-integracionathmovil-fragments-ConfigurationFragment(ConfigurationFragment.java:346)
                 	at com.atomicalsoftwares.integracionathmovil.fragments.ConfigurationFragment$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0)
                 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
                 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                 	at java.lang.Thread.run(Thread.java:761)
                 Caused by: AmplifyException{message=Failed to initialize the local storage adapter for the DataStore plugin., cause=java.lang.RuntimeException: DataStoreException{message=Error in initializing the SQLiteStorageAdapter, cause=android.database.sqlite.SQLiteException: no such table: pragma_table_info (code 1): , while compiling: SELECT COUNT(*) FROM pragma_table_info('LastSyncMetadata') WHERE name='syncExpression', recoverySuggestion=Sorry, we don’t have a recovery suggestion for this error.}, recoverySuggestion=Sorry, we don’t have a recovery suggestion for this error.}
                 	at com.amplifyframework.datastore.AWSDataStorePlugin.initialize(AWSDataStorePlugin.java:313)
                 	at com.amplifyframework.core.category.Category.initialize(Category.java:162)
                 	at com.amplifyframework.core.Amplify.lambda$beginInitialization$0(Amplify.java:224)
                 	at com.amplifyframework.core.Amplify$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0)
                 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                 	at java.lang.Thread.run(Thread.java:761) 
                 Caused by: java.lang.RuntimeException: DataStoreException{message=Error in initializing the SQLiteStorageAdapter, cause=android.database.sqlite.SQLiteException: no such table: pragma_table_info (code 1): , while compiling: SELECT COUNT(*) FROM pragma_table_info('LastSyncMetadata') WHERE name='syncExpression', recoverySuggestion=Sorry, we don’t have a recovery suggestion for this error.}
                 	at io.reactivex.rxjava3.internal.util.ExceptionHelper.wrapOrThrow(ExceptionHelper.java:46)
                 	at io.reactivex.rxjava3.internal.observers.BlockingMultiObserver.blockingAwait(BlockingMultiObserver.java:145)
                 	at io.reactivex.rxjava3.core.Completable.blockingAwait(Completable.java:1490)
                 	at com.amplifyframework.datastore.AWSDataStorePlugin.initialize(AWSDataStorePlugin.java:311)
                 	at com.amplifyframework.core.category.Category.initialize(Category.java:162) 
                 	at com.amplifyframework.core.Amplify.lambda$beginInitialization$0(Amplify.java:224) 
                 	at com.amplifyframework.core.Amplify$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) 
                 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                 	at java.lang.Thread.run(Thread.java:761) 
                 Caused by: DataStoreException{message=Error in initializing the SQLiteStorageAdapter, cause=android.database.sqlite.SQLiteException: no such table: pragma_table_info (code 1): , while compiling: SELECT COUNT(*) FROM pragma_table_info('LastSyncMetadata') WHERE name='syncExpression', recoverySuggestion=Sorry, we don’t have a recovery suggestion for this error.}
                 	at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.lambda$initialize$1(SQLiteStorageAdapter.java:308)
                 	at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter$$ExternalSyntheticLambda8.accept(D8$$SyntheticClass:0)
                 	at io.reactivex.rxjava3.internal.observers.CallbackCompletableObserver.onError(CallbackCompletableObserver.java:64)
                 	at io.reactivex.rxjava3.internal.operators.completable.CompletableFromSingle$CompletableFromSingleObserver.onError(CompletableFromSingle.java:41)
                 	at io.reactivex.rxjava3.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onSuccess(SingleFlatMap.java:80)
                 	at io.reactivex.rxjava3.internal.operators.single.SingleCreate$Emitter.onSuccess(SingleCreate.java:68)
              E  	at com.amplifyframework.datastore.storage.sqlite.PersistentModelVersion$$ExternalSyntheticLambda4.accept(D8$$SyntheticClass:0)
                 	at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.lambda$query$6(SQLiteStorageAdapter.java:516)
                 	at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.$r8$lambda$tT7iwGvdjd78JB0nHqIUXEJjseg(SQLiteStorageAdapter.java)
                 	at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter$$ExternalSyntheticLambda12.run(D8$$SyntheticClass:0)
                 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
                 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                 	... 3 more
                 Caused by: android.database.sqlite.SQLiteException: no such table: pragma_table_info (code 1): , while compiling: SELECT COUNT(*) FROM pragma_table_info('LastSyncMetadata') WHERE name='syncExpression'
                 	at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                 	at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
                 	at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
                 	at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                 	at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
                 	at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
                 	at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
                 	at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
                 	at com.amplifyframework.datastore.storage.sqlite.migrations.AddSyncExpressionToLastSyncMetadata.needsMigration(AddSyncExpressionToLastSyncMetadata.java:74)
                 	at com.amplifyframework.datastore.storage.sqlite.migrations.AddSyncExpressionToLastSyncMetadata.apply(AddSyncExpressionToLastSyncMetadata.java:44)
                 	at com.amplifyframework.datastore.storage.sqlite.migrations.ModelMigrations.apply(ModelMigrations.java:49)
                 	at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.lambda$updateModels$13(SQLiteStorageAdapter.java:941)
                 	at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.$r8$lambda$i0pMwTy2cZsn6DITBpHZriTxIiY(SQLiteStorageAdapter.java)
                 	at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter$$ExternalSyntheticLambda2.apply(D8$$SyntheticClass:0)
                 	at io.reactivex.rxjava3.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onSuccess(SingleFlatMap.java:77)
                 	... 10 more
art           I  Do partial code cache collection, code=108KB, data=101KB
              I  After code cache collection, code=107KB, data=101KB
              I  Increasing code cache capacity to 512KB
Profi...ller  D  Installing profile for com.atomicalsoftwares.integracionathmovil
ampli...tore  E  DataStore initialization timed out.
                 java.util.concurrent.TimeoutException: The source did not signal an event for 5000 milliseconds and has been terminated.
                 	at io.reactivex.rxjava3.internal.operators.completable.CompletableTimeout$DisposeTask.run(CompletableTimeout.java:109)
                 	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:41)
                 	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:28)
                 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
                 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                 	at java.lang.Thread.run(Thread.java:761)
System.err    W  io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.util.concurrent.TimeoutException: The source did not signal an event for 5000 milliseconds and has been terminated.
              W  	at io.reactivex.rxjava3.internal.observers.CallbackCompletableObserver.accept(CallbackCompletableObserver.java:47)
              W  	at io.reactivex.rxjava3.internal.observers.CallbackCompletableObserver.accept(CallbackCompletableObserver.java:26)
              W  	at io.reactivex.rxjava3.internal.observers.CallbackCompletableObserver.onError(CallbackCompletableObserver.java:64)
              W  	at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek$CompletableObserverImplementation.onError(CompletablePeek.java:95)
              W  	at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek$CompletableObserverImplementation.onError(CompletablePeek.java:95)
              W  	at io.reactivex.rxjava3.internal.operators.completable.CompletableSubscribeOn$SubscribeOnObserver.onError(CompletableSubscribeOn.java:74)
              W  	at io.reactivex.rxjava3.internal.operators.completable.CompletableTimeout$DisposeTask.run(CompletableTimeout.java:109)
              W  	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:41)
              W  	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:28)
              W  	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
              W  	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
              W  	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
              W  	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
              W  	at java.lang.Thread.run(Thread.java:761)
              W  Caused by: java.util.concurrent.TimeoutException: The source did not signal an event for 5000 milliseconds and has been terminated.
              W  	... 8 more
ampli...tore  E  DataStore initialization timed out.
                 java.util.concurrent.TimeoutException: The source did not signal an event for 5000 milliseconds and has been terminated.
                 	at io.reactivex.rxjava3.internal.operators.completable.CompletableTimeout$DisposeTask.run(CompletableTimeout.java:109)
                 	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:41)
                 	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:28)
                 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
                 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                 	at java.lang.Thread.run(Thread.java:761)
Amplify       E  Error starting DataStore: Failed to start DataStore.
Andro...time  E  FATAL EXCEPTION: RxComputationThreadPool-2
                 Process: com.atomicalsoftwares.integracionathmovil, PID: 4544
                 io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.util.concurrent.TimeoutException: The source did not signal an event for 5000 milliseconds and has been terminated.
                 	at io.reactivex.rxjava3.internal.observers.CallbackCompletableObserver.accept(CallbackCompletableObserver.java:47)
                 	at io.reactivex.rxjava3.internal.observers.CallbackCompletableObserver.accept(CallbackCompletableObserver.java:26)
                 	at io.reactivex.rxjava3.internal.observers.CallbackCompletableObserver.onError(CallbackCompletableObserver.java:64)
                 	at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek$CompletableObserverImplementation.onError(CompletablePeek.java:95)
                 	at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek$CompletableObserverImplementation.onError(CompletablePeek.java:95)
                 	at io.reactivex.rxjava3.internal.operators.completable.CompletableSubscribeOn$SubscribeOnObserver.onError(CompletableSubscribeOn.java:74)
                 	at io.reactivex.rxjava3.internal.operators.completable.CompletableTimeout$DisposeTask.run(CompletableTimeout.java:109)
                 	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:41)
                 	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:28)
                 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
                 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                 	at java.lang.Thread.run(Thread.java:761)
                 Caused by: java.util.concurrent.TimeoutException: The source did not signal an event for 5000 milliseconds and has been terminated.
                 	at io.reactivex.rxjava3.internal.operators.completable.CompletableTimeout$DisposeTask.run(CompletableTimeout.java:109) 
                 	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:41) 
                 	at io.reactivex.rxjava3.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:28) 
                 	at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 
                 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                 	at java.lang.Thread.run(Thread.java:761) 


amplifyconfiguration.json

No response

GraphQL Schema

Additional information and screenshots

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions