Skip to content
Success

Console Output

Skipping 3,846 KB.. Full Log
> Task :app-android:check
> Task :app-android:compileNonMinifiedReleaseArtProfile

> Task :core:jsBrowserTest
All files matched by "/tmp/_karma_webpack_911804/**/*" were excluded or matched by prior matchers.

> Task :core:jsTest
> Task :app-react:jsMainClasses
> Task :app-react:jsJar
> Task :app-react:compileTestKotlinJs
> Task :app-react:jsTestClasses
> Task :app-android:packageNonMinifiedRelease
> Task :app-android:createNonMinifiedReleaseApkListingFileRedirect
> Task :app-android:assembleNonMinifiedRelease
> Task :app-android:l8DexDesugarLibBenchmarkRelease
> Task :app-android:compileBenchmarkReleaseArtProfile
> Task :app-android:packageBenchmarkRelease
> Task :app-android:createBenchmarkReleaseApkListingFileRedirect
> Task :app-android:assembleBenchmarkRelease
> Task :app-android:minifyReleaseWithR8
> Task :app-react:compileProductionExecutableKotlinJs
> Task :app-react:compileTestDevelopmentExecutableKotlinJs
> Task :app-react:jsProductionExecutableCompileSync
> Task :app-android:l8DexDesugarLibRelease
> Task :app-react:jsBrowserProductionWebpack
asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
This can impact web performance.
Assets: 
  app-react.js (7.28 MiB)

entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.
Entrypoints:
  main (7.28 MiB)
      app-react.js

webpack performance recommendations: 
You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application.
For more info visit https://webpack.js.org/guides/code-splitting/


> Task :app-react:jsBrowserDistribution
> Task :app-react:assemble
> Task :app-android:compileReleaseArtProfile
> Task :app-react:jsTestTestDevelopmentExecutableCompileSync

> Task :app-react:jsBrowserTest
All files matched by "/tmp/_karma_webpack_896371/**/*" were excluded or matched by prior matchers.

> Task :app-react:jsTest
> Task :app-react:allTests
> Task :app-react:check
> Task :app-react:build
> Task :app-desktop:bundleWeb
> Task :app-desktop:build
> Task :app-ktor-server:processResources
> Task :app-ktor-server:classes
> Task :app-ktor-server:jar
> Task :app-ktor-server:startScripts
> Task :app-ktor-server:distTar
> Task :app-ktor-server:distZip
> Task :app-ktor-server:shadowJar
> Task :app-ktor-server:startShadowScripts
> Task :app-ktor-server:shadowDistTar
> Task :app-ktor-server:shadowDistZip
> Task :app-ktor-server:assemble
> Task :app-android:packageRelease
> Task :app-android:createReleaseApkListingFileRedirect
> Task :app-android:assembleRelease
> Task :app-android:assemble
> Task :app-android:build
> Task :sharedse:compileTestKotlinJvm
> Task :sharedse:jvmTestClasses

> Task :app-ktor-server:compileTestKotlin
w: Argument -Xopt-in is deprecated. Please use -opt-in instead
w: Opt-in requirement marker com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview is unresolved. Please make sure it's present in the module dependencies
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/app-ktor-server/src/test/kotlin/com/ustadmobile/lib/rest/PersonAuthRegisterRouteTest.kt:197:16 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/app-ktor-server/src/test/kotlin/com/ustadmobile/lib/rest/PersonAuthRegisterRouteTest.kt:240:16 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/app-ktor-server/src/test/kotlin/com/ustadmobile/lib/rest/PersonAuthRegisterRouteTest.kt:279:16 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead

> Task :sharedse:jvmTest
> Task :app-ktor-server:compileTestJava NO-SOURCE
> Task :app-ktor-server:testClasses
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, PersonGroup, PersonGroupMember, SyncNode, Site, ScopedGrant, PersonAuth2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT INTO PersonGroup (groupUid, groupMasterCsn, groupLocalCsn, groupLastChangedBy, groupLct, groupName, groupActive, personGroupFlag) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : SQLite Change Tracker: Changed tables=[PersonGroup]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : end transaction #1
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: PersonGroup
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT INTO Person (personUid, username, firstNames, lastName, emailAddr, phoneNum, gender, active, isPersonalAccount, dateOfBirth, personAddress, personOrgId, personGroupUid, personLct, personCountry, personType, personMasterChangeSeqNum, personLocalChangeSeqNum, personLastChangedBy, admin, personNotes, fatherName, fatherNumber, motherName, motherNum) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2 : SQLite Change Tracker: Changed tables=[Person]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2 : end transaction #2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT INTO PersonGroupMember (groupMemberUid, groupMemberActive, groupMemberPersonUid, groupMemberGroupUid, groupMemberMasterCsn, groupMemberLocalCsn, groupMemberLastChangedBy, groupMemberLct) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : SQLite Change Tracker: Changed tables=[PersonGroupMember]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : end transaction #3
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: PersonGroupMember
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT INTO ScopedGrant (sgUid, sgPcsn, sgLcsn, sgLcb, sgLct, sgTableId, sgEntityUid, sgPermissions, sgGroupUid, sgIndex, sgFlags) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : SQLite Change Tracker: Changed tables=[ScopedGrant]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : end transaction #4
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: ScopedGrant
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #5  - start readOnly=true
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "SELECT authSalt FROM Site LIMIT 1"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #5 : end transaction #5
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #6  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #6 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT OR REPLACE INTO PersonAuth2 (pauthUid, pauthMechanism, pauthAuth, pauthLcsn, pauthPcsn, pauthLcb, pauthLct) VALUES(?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #6 : SQLite Change Tracker: Changed tables=[PersonAuth2]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #6  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #6 : end transaction #6
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: PersonAuth2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #7  - start readOnly=true
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "SELECT authSalt FROM Site LIMIT 1"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #7 : end transaction #7
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #8  - start readOnly=true
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "
        SELECT PersonAuth2.*
          FROM PersonAuth2
               JOIN Person ON PersonAuth2.pauthUid = Person.personUid
         WHERE Person.username = ?
    "
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #8 : end transaction #8
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, PersonGroup, PersonGroupMember, SyncNode, Site, ScopedGrant, PersonAuth2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, PersonGroup, PersonGroupMember, SyncNode, Site, ScopedGrant, PersonAuth2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT INTO Person (personUid, username, firstNames, lastName, emailAddr, phoneNum, gender, active, isPersonalAccount, dateOfBirth, personAddress, personOrgId, personGroupUid, personLct, personCountry, personType, personMasterChangeSeqNum, personLocalChangeSeqNum, personLastChangedBy, admin, personNotes, fatherName, fatherNumber, motherName, motherNum) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT INTO Person (personUid, username, firstNames, lastName, emailAddr, phoneNum, gender, active, isPersonalAccount, dateOfBirth, personAddress, personOrgId, personGroupUid, personLct, personCountry, personType, personMasterChangeSeqNum, personLocalChangeSeqNum, personLastChangedBy, admin, personNotes, fatherName, fatherNumber, motherName, motherNum) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT OR REPLACE INTO SystemPermission (spUid, spToPersonUid, spToGroupUid, spPermissionsFlag, spLastModified, spIsDeleted) VALUES(?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT OR REPLACE INTO SystemPermission (spUid, spToPersonUid, spToGroupUid, spPermissionsFlag, spLastModified, spIsDeleted) VALUES(?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : SQLite Change Tracker: Changed tables=[Person, SystemPermission]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : SQLite Change Tracker: Changed tables=[Person, SystemPermission]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : end transaction #1
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #1 : end transaction #1
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, SystemPermission
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, SystemPermission
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2  - start readOnly=true
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2  - start readOnly=true
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "SELECT authSalt FROM Site LIMIT 1"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "SELECT authSalt FROM Site LIMIT 1"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2 : end transaction #2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #2 : end transaction #2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3  - start readOnly=false
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : creating SQLite change triggers 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] creating SQLite triggers
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT OR REPLACE INTO PersonAuth2 (pauthUid, pauthMechanism, pauthAuth, pauthLcsn, pauthPcsn, pauthLcb, pauthLct) VALUES(?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "INSERT OR REPLACE INTO PersonAuth2 (pauthUid, pauthMechanism, pauthAuth, pauthLcsn, pauthPcsn, pauthLcb, pauthLct) VALUES(?, ?, ?, ?, ?, ?, ?)"
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : SQLite Change Tracker: Changed tables=[PersonAuth2]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : SQLite Change Tracker: Changed tables=[PersonAuth2]
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [NodeEventJdbcImplListenerSqlite - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] found 0 new events = 
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3  committed changes
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : end transaction #3
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #3 : end transaction #3
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: PersonAuth2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: PersonAuth2
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4  - start readOnly=true
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4  - start readOnly=true
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "
        SELECT PersonAuth2.*
          FROM PersonAuth2
         WHERE PersonAuth2.pauthUid = ? 
    "
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare "
        SELECT PersonAuth2.*
          FROM PersonAuth2
         WHERE PersonAuth2.pauthUid = ? 
    "
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : end transaction #4
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : end transaction #4
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: RequestedEntry
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: RequestedEntry
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, SyncNode, Site, PersonAuth2, SystemPermission
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, SyncNode, Site, PersonAuth2, SystemPermission
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site
Apr 02, 2025 10:30:10 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site
Verification result: AuthenticationData(userHandle=6FDF668AFC1B876CE2EE3DB2, collectedClientData=CollectedClientData(type=webauthn.get, challenge=8ED75EC77ADFEDD736CEB873, origin=android:apk-key-hash:FhOh2f8Wsm1hMaBCSV7CTSYUddVQLmzf82reTfJr4OY, crossOrigin=null, tokenBinding=null), clientExtensions=null)
Verification error: Assertion signature is not valid.
Verification error: The actual challenge does not match the expected challenge
> Task :app-ktor-server:test
> Task :app-ktor-server:check
> Task :app-ktor-server:build
> Task :sharedse:allTests
> Task :sharedse:check
> Task :sharedse:build

> Task :core:compileTestKotlinJvm
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/account/AuthManagerTest.kt:47:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/cachestoragepath/GetStoragePathForUrlUseCaseCommonJvmTest.kt:39:13 Variable 'getStoragePathUseCase' is never used
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/blob/saveandmanifest/SaveLocalUriAndManifestUploadIntegrationTest.kt:210:80 Parameter 'prev' is never used, could be renamed to _
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/blob/upload/BlobUploadServerUseCaseTest.kt:113:51 Parameter 'invocation' is never used, could be renamed to _
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/blob/upload/BlobUploadServerUseCaseTest.kt:161:51 Parameter 'invocation' is never used, could be renamed to _
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/clazzenrolment/pendingenrolment/RequestEnrolmentUseCaseJvmTest.kt:32:40 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:277:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:317:13 Variable 'savedAccount' is never used
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:319:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:328:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:445:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:453:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:560:16 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/test/clientservertest/ClientServerIntegrationTest.kt:73:5 Parameter 'baseTmpDir' is never used
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/test/clientservertest/ClientServerIntegrationTest.kt:197:37 Parameter 'call' is never used, could be renamed to _
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/test/clientservertest/ClientServerIntegrationTest.kt:206:47 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/test/viewmodeltest/ViewModelTestBuilder.kt:323:33 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/util/test/MainDispatcherRule.kt:17:31 This declaration needs opt-in. Its usage should be marked with '@kotlinx.coroutines.ExperimentalCoroutinesApi' or '@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)'
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/util/test/MainDispatcherRule.kt:18:21 This declaration needs opt-in. Its usage should be marked with '@kotlinx.coroutines.ExperimentalCoroutinesApi' or '@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)'
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/util/test/MainDispatcherRule.kt:22:21 This declaration needs opt-in. Its usage should be marked with '@kotlinx.coroutines.ExperimentalCoroutinesApi' or '@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)'
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/clazz/list/ClazzListViewModelTest.kt:66:36 'grantScopedPermission(Person, Long, Int, Long): ScopedGrantResult' is deprecated. This has been replaced with SystemPermission and CoursePermission
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/clazzlog/edit/ClazzLogEditAttendanceViewModelTest.kt:69:50 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/parentalconsentmanagement/ParentalConsentManagementViewModelTest.kt:60:40 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/person/PersonIntegrationTest.kt:29:40 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/person/detail/PersonDetailViewModelTest.kt:187:20 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead

> Task :core:jvmTestClasses
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest$TestUploadException
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest.stubToThrowException$lambda$11$lambda$10(BlobUploadClientUseCaseJvmTest.kt:209)
	at org.mockito.internal.stubbing.StubbedInvocationMatcher.answer(StubbedInvocationMatcher.java:42)
	at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:103)
	at org.mockito.internal.handler.NullResultGuardian.handle(NullResultGuardian.java:29)
	at org.mockito.internal.handler.InvocationNotifierHandler.handle(InvocationNotifierHandler.java:34)
	at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.doIntercept(MockMethodInterceptor.java:82)
	at org.mockito.internal.creation.bytebuddy.MockMethodAdvice.handle(MockMethodAdvice.java:134)
	at com.ustadmobile.core.domain.upload.ChunkedUploadClientUseCaseKtorImpl.invoke(ChunkedUploadClientUseCaseKtorImpl.kt:107)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm$asyncUploadItemsFromChannelProcessor$2$1.invokeSuspend(BlobUploadClientUseCaseJvm.kt:120)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm$invoke$2.invokeSuspend(BlobUploadClientUseCaseJvm.kt:244)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm$invoke$4.invokeSuspend(BlobUploadClientUseCaseJvm.kt:272)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm.invoke(BlobUploadClientUseCaseJvm.kt:269)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest$givenTransferJobInDatabase_whenErrorOccurs_thenAttemptCountIncrementAndExceptionThrown$1.invokeSuspend(BlobUploadClientUseCaseJvmTest.kt:384)
Caused by: com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest$TestUploadException
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest.stubToThrowException$lambda$11$lambda$10(BlobUploadClientUseCaseJvmTest.kt:209)
	at org.mockito.internal.stubbing.StubbedInvocationMatcher.answer(StubbedInvocationMatcher.java:42)
	at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:103)
	at org.mockito.internal.handler.NullResultGuardian.handle(NullResultGuardian.java:29)
	at org.mockito.internal.handler.InvocationNotifierHandler.handle(InvocationNotifierHandler.java:34)
	at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.doIntercept(MockMethodInterceptor.java:82)
	at org.mockito.internal.creation.bytebuddy.MockMethodAdvice.handle(MockMethodAdvice.java:134)
	at com.ustadmobile.core.domain.upload.ChunkedUploadClientUseCaseKtorImpl.invoke(ChunkedUploadClientUseCaseKtorImpl.kt:107)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm$asyncUploadItemsFromChannelProcessor$2$1.invokeSuspend(BlobUploadClientUseCaseJvm.kt:120)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest.givenTransferJobInDatabase_whenErrorOccurs_thenAttemptCountIncrementAndExceptionThrown(BlobUploadClientUseCaseJvmTest.kt:356)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:54)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:54)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
	at jdk.internal.reflect.GeneratedMethodAccessor65.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92)
	at jdk.proxy1/jdk.proxy1.$Proxy4.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:183)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
===SQLITE===
add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Ins_personPictureUri
                        AFTER INSERT ON PersonPicture
                        FOR EACH ROW WHEN NEW.personPictureUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(50, NEW.personPictureUid, NEW.personPictureUri, 0, 1, 1);
                        END
                    """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Ins_personPictureThumbnailUri
                        AFTER INSERT ON PersonPicture
                        FOR EACH ROW WHEN NEW.personPictureThumbnailUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(50, NEW.personPictureUid, NEW.personPictureThumbnailUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Upd_personPictureUri_New
                    AFTER UPDATE ON PersonPicture
                    FOR EACH ROW WHEN NEW.personPictureUri != OLD.personPictureUri AND NEW.personPictureUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(50, NEW.personPictureUid, NEW.personPictureUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Upd_personPictureUri_Old
AFTER UPDATE ON PersonPicture
FOR EACH ROW WHEN NEW.personPictureUri != OLD.personPictureUri AND OLD.personPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 50
       AND cljEntityUid = OLD.personPictureUid
       AND cljUrl = OLD.personPictureUri;
END        """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Upd_personPictureThumbnailUri_New
                    AFTER UPDATE ON PersonPicture
                    FOR EACH ROW WHEN NEW.personPictureThumbnailUri != OLD.personPictureThumbnailUri AND NEW.personPictureThumbnailUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(50, NEW.personPictureUid, NEW.personPictureThumbnailUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Upd_personPictureThumbnailUri_Old
AFTER UPDATE ON PersonPicture
FOR EACH ROW WHEN NEW.personPictureThumbnailUri != OLD.personPictureThumbnailUri AND OLD.personPictureThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 50
       AND cljEntityUid = OLD.personPictureUid
       AND cljUrl = OLD.personPictureThumbnailUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Del_personPictureUri
AFTER DELETE ON PersonPicture
FOR EACH ROW WHEN OLD.personPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 50
       AND cljEntityUid = OLD.personPictureUid
       AND cljUrl = OLD.personPictureUri;
END       """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Del_personPictureThumbnailUri
AFTER DELETE ON PersonPicture
FOR EACH ROW WHEN OLD.personPictureThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 50
       AND cljEntityUid = OLD.personPictureUid
       AND cljUrl = OLD.personPictureThumbnailUri;
END       """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Ins_coursePictureUri
                        AFTER INSERT ON CoursePicture
                        FOR EACH ROW WHEN NEW.coursePictureUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(125, NEW.coursePictureUid, NEW.coursePictureUri, 0, 1, 1);
                        END
                    """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Ins_coursePictureThumbnailUri
                        AFTER INSERT ON CoursePicture
                        FOR EACH ROW WHEN NEW.coursePictureThumbnailUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(125, NEW.coursePictureUid, NEW.coursePictureThumbnailUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Upd_coursePictureUri_New
                    AFTER UPDATE ON CoursePicture
                    FOR EACH ROW WHEN NEW.coursePictureUri != OLD.coursePictureUri AND NEW.coursePictureUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(125, NEW.coursePictureUid, NEW.coursePictureUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Upd_coursePictureUri_Old
AFTER UPDATE ON CoursePicture
FOR EACH ROW WHEN NEW.coursePictureUri != OLD.coursePictureUri AND OLD.coursePictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 125
       AND cljEntityUid = OLD.coursePictureUid
       AND cljUrl = OLD.coursePictureUri;
END        """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Upd_coursePictureThumbnailUri_New
                    AFTER UPDATE ON CoursePicture
                    FOR EACH ROW WHEN NEW.coursePictureThumbnailUri != OLD.coursePictureThumbnailUri AND NEW.coursePictureThumbnailUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(125, NEW.coursePictureUid, NEW.coursePictureThumbnailUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Upd_coursePictureThumbnailUri_Old
AFTER UPDATE ON CoursePicture
FOR EACH ROW WHEN NEW.coursePictureThumbnailUri != OLD.coursePictureThumbnailUri AND OLD.coursePictureThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 125
       AND cljEntityUid = OLD.coursePictureUid
       AND cljUrl = OLD.coursePictureThumbnailUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Del_coursePictureUri
AFTER DELETE ON CoursePicture
FOR EACH ROW WHEN OLD.coursePictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 125
       AND cljEntityUid = OLD.coursePictureUid
       AND cljUrl = OLD.coursePictureUri;
END       """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Del_coursePictureThumbnailUri
AFTER DELETE ON CoursePicture
FOR EACH ROW WHEN OLD.coursePictureThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 125
       AND cljEntityUid = OLD.coursePictureUid
       AND cljUrl = OLD.coursePictureThumbnailUri;
END       """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CourseAssignmentSubmissionFile_Ins_casaUri
                        AFTER INSERT ON CourseAssignmentSubmissionFile
                        FOR EACH ROW WHEN NEW.casaUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(90, NEW.casaUid, NEW.casaUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CourseAssignmentSubmissionFile_Upd_casaUri_New
                    AFTER UPDATE ON CourseAssignmentSubmissionFile
                    FOR EACH ROW WHEN NEW.casaUri != OLD.casaUri AND NEW.casaUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(90, NEW.casaUid, NEW.casaUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseAssignmentSubmissionFile_Upd_casaUri_Old
AFTER UPDATE ON CourseAssignmentSubmissionFile
FOR EACH ROW WHEN NEW.casaUri != OLD.casaUri AND OLD.casaUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 90
       AND cljEntityUid = OLD.casaUid
       AND cljUrl = OLD.casaUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseAssignmentSubmissionFile_Del_casaUri
AFTER DELETE ON CourseAssignmentSubmissionFile
FOR EACH ROW WHEN OLD.casaUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 90
       AND cljEntityUid = OLD.casaUid
       AND cljUrl = OLD.casaUri;
END       """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Ins_cbpPictureUri
                        AFTER INSERT ON CourseBlockPicture
                        FOR EACH ROW WHEN NEW.cbpPictureUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6677, NEW.cbpUid, NEW.cbpPictureUri, 0, 1, 1);
                        END
                    """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Ins_cbpThumbnailUri
                        AFTER INSERT ON CourseBlockPicture
                        FOR EACH ROW WHEN NEW.cbpThumbnailUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6677, NEW.cbpUid, NEW.cbpThumbnailUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Upd_cbpPictureUri_New
                    AFTER UPDATE ON CourseBlockPicture
                    FOR EACH ROW WHEN NEW.cbpPictureUri != OLD.cbpPictureUri AND NEW.cbpPictureUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6677, NEW.cbpUid, NEW.cbpPictureUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Upd_cbpPictureUri_Old
AFTER UPDATE ON CourseBlockPicture
FOR EACH ROW WHEN NEW.cbpPictureUri != OLD.cbpPictureUri AND OLD.cbpPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6677
       AND cljEntityUid = OLD.cbpUid
       AND cljUrl = OLD.cbpPictureUri;
END        """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Upd_cbpThumbnailUri_New
                    AFTER UPDATE ON CourseBlockPicture
                    FOR EACH ROW WHEN NEW.cbpThumbnailUri != OLD.cbpThumbnailUri AND NEW.cbpThumbnailUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6677, NEW.cbpUid, NEW.cbpThumbnailUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Upd_cbpThumbnailUri_Old
AFTER UPDATE ON CourseBlockPicture
FOR EACH ROW WHEN NEW.cbpThumbnailUri != OLD.cbpThumbnailUri AND OLD.cbpThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6677
       AND cljEntityUid = OLD.cbpUid
       AND cljUrl = OLD.cbpThumbnailUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Del_cbpPictureUri
AFTER DELETE ON CourseBlockPicture
FOR EACH ROW WHEN OLD.cbpPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6677
       AND cljEntityUid = OLD.cbpUid
       AND cljUrl = OLD.cbpPictureUri;
END       """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Del_cbpThumbnailUri
AFTER DELETE ON CourseBlockPicture
FOR EACH ROW WHEN OLD.cbpThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6677
       AND cljEntityUid = OLD.cbpUid
       AND cljUrl = OLD.cbpThumbnailUri;
END       """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Ins_cepPictureUri
                        AFTER INSERT ON ContentEntryPicture2
                        FOR EACH ROW WHEN NEW.cepPictureUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6678, NEW.cepUid, NEW.cepPictureUri, 0, 1, 1);
                        END
                    """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Ins_cepThumbnailUri
                        AFTER INSERT ON ContentEntryPicture2
                        FOR EACH ROW WHEN NEW.cepThumbnailUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6678, NEW.cepUid, NEW.cepThumbnailUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Upd_cepPictureUri_New
                    AFTER UPDATE ON ContentEntryPicture2
                    FOR EACH ROW WHEN NEW.cepPictureUri != OLD.cepPictureUri AND NEW.cepPictureUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6678, NEW.cepUid, NEW.cepPictureUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Upd_cepPictureUri_Old
AFTER UPDATE ON ContentEntryPicture2
FOR EACH ROW WHEN NEW.cepPictureUri != OLD.cepPictureUri AND OLD.cepPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6678
       AND cljEntityUid = OLD.cepUid
       AND cljUrl = OLD.cepPictureUri;
END        """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Upd_cepThumbnailUri_New
                    AFTER UPDATE ON ContentEntryPicture2
                    FOR EACH ROW WHEN NEW.cepThumbnailUri != OLD.cepThumbnailUri AND NEW.cepThumbnailUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6678, NEW.cepUid, NEW.cepThumbnailUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Upd_cepThumbnailUri_Old
AFTER UPDATE ON ContentEntryPicture2
FOR EACH ROW WHEN NEW.cepThumbnailUri != OLD.cepThumbnailUri AND OLD.cepThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6678
       AND cljEntityUid = OLD.cepUid
       AND cljUrl = OLD.cepThumbnailUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Del_cepPictureUri
AFTER DELETE ON ContentEntryPicture2
FOR EACH ROW WHEN OLD.cepPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6678
       AND cljEntityUid = OLD.cepUid
       AND cljUrl = OLD.cepPictureUri;
END       """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Del_cepThumbnailUri
AFTER DELETE ON ContentEntryPicture2
FOR EACH ROW WHEN OLD.cepThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6678
       AND cljEntityUid = OLD.cepUid
       AND cljUrl = OLD.cepThumbnailUri;
END       """)

===POSTGRES===
add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_50_personPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(50, NEW.personPictureUid, NEW.personPictureUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_50_personPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 50
                               AND cljEntityUid = OLD.personPictureUid
                               AND cljUrl = OLD.personPictureUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_50_personPictureUri_ins_t
                            AFTER INSERT ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_50_personPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_50_personPictureUri_upd_t
                            AFTER UPDATE ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureUri IS DISTINCT FROM OLD.personPictureUri AND OLD.personPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_50_personPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_50_personPictureUri_upd_t
                            AFTER UPDATE ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureUri IS DISTINCT FROM OLD.personPictureUri AND NEW.personPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_50_personPictureUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_50_personPictureThumbnailUr() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(50, NEW.personPictureUid, NEW.personPictureThumbnailUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_50_personPictureThumbnailUr() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 50
                               AND cljEntityUid = OLD.personPictureUid
                               AND cljUrl = OLD.personPictureThumbnailUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_50_personPictureThumbnailUr_ins_t
                            AFTER INSERT ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_50_personPictureThumbnailUr();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_50_personPictureThumbnailUr_upd_t
                            AFTER UPDATE ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureThumbnailUri IS DISTINCT FROM OLD.personPictureThumbnailUri AND OLD.personPictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_50_personPictureThumbnailUr();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_50_personPictureThumbnailUr_upd_t
                            AFTER UPDATE ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureThumbnailUri IS DISTINCT FROM OLD.personPictureThumbnailUri AND NEW.personPictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_50_personPictureThumbnailUr();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_125_coursePictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(125, NEW.coursePictureUid, NEW.coursePictureUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_125_coursePictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 125
                               AND cljEntityUid = OLD.coursePictureUid
                               AND cljUrl = OLD.coursePictureUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_125_coursePictureUri_ins_t
                            AFTER INSERT ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_125_coursePictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_125_coursePictureUri_upd_t
                            AFTER UPDATE ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureUri IS DISTINCT FROM OLD.coursePictureUri AND OLD.coursePictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_125_coursePictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_125_coursePictureUri_upd_t
                            AFTER UPDATE ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureUri IS DISTINCT FROM OLD.coursePictureUri AND NEW.coursePictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_125_coursePictureUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_125_coursePictureThumbnailUr() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(125, NEW.coursePictureUid, NEW.coursePictureThumbnailUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_125_coursePictureThumbnailUr() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 125
                               AND cljEntityUid = OLD.coursePictureUid
                               AND cljUrl = OLD.coursePictureThumbnailUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_125_coursePictureThumbnailUr_ins_t
                            AFTER INSERT ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_125_coursePictureThumbnailUr();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_125_coursePictureThumbnailUr_upd_t
                            AFTER UPDATE ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureThumbnailUri IS DISTINCT FROM OLD.coursePictureThumbnailUri AND OLD.coursePictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_125_coursePictureThumbnailUr();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_125_coursePictureThumbnailUr_upd_t
                            AFTER UPDATE ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureThumbnailUri IS DISTINCT FROM OLD.coursePictureThumbnailUri AND NEW.coursePictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_125_coursePictureThumbnailUr();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_90_casaUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(90, NEW.casaUid, NEW.casaUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_90_casaUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 90
                               AND cljEntityUid = OLD.casaUid
                               AND cljUrl = OLD.casaUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_90_casaUri_ins_t
                            AFTER INSERT ON CourseAssignmentSubmissionFile
                            FOR EACH ROW
                            WHEN (NEW.casaUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_90_casaUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_90_casaUri_upd_t
                            AFTER UPDATE ON CourseAssignmentSubmissionFile
                            FOR EACH ROW
                            WHEN (NEW.casaUri IS DISTINCT FROM OLD.casaUri AND OLD.casaUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_90_casaUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_90_casaUri_upd_t
                            AFTER UPDATE ON CourseAssignmentSubmissionFile
                            FOR EACH ROW
                            WHEN (NEW.casaUri IS DISTINCT FROM OLD.casaUri AND NEW.casaUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_90_casaUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_6677_cbpPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(6677, NEW.cbpUid, NEW.cbpPictureUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_6677_cbpPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 6677
                               AND cljEntityUid = OLD.cbpUid
                               AND cljUrl = OLD.cbpPictureUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6677_cbpPictureUri_ins_t
                            AFTER INSERT ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6677_cbpPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6677_cbpPictureUri_upd_t
                            AFTER UPDATE ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpPictureUri IS DISTINCT FROM OLD.cbpPictureUri AND OLD.cbpPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6677_cbpPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_6677_cbpPictureUri_upd_t
                            AFTER UPDATE ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpPictureUri IS DISTINCT FROM OLD.cbpPictureUri AND NEW.cbpPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_6677_cbpPictureUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_6677_cbpThumbnailUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(6677, NEW.cbpUid, NEW.cbpThumbnailUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_6677_cbpThumbnailUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 6677
                               AND cljEntityUid = OLD.cbpUid
                               AND cljUrl = OLD.cbpThumbnailUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6677_cbpThumbnailUri_ins_t
                            AFTER INSERT ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6677_cbpThumbnailUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6677_cbpThumbnailUri_upd_t
                            AFTER UPDATE ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpThumbnailUri IS DISTINCT FROM OLD.cbpThumbnailUri AND OLD.cbpThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6677_cbpThumbnailUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_6677_cbpThumbnailUri_upd_t
                            AFTER UPDATE ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpThumbnailUri IS DISTINCT FROM OLD.cbpThumbnailUri AND NEW.cbpThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_6677_cbpThumbnailUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_6678_cepPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(6678, NEW.cepUid, NEW.cepPictureUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_6678_cepPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 6678
                               AND cljEntityUid = OLD.cepUid
                               AND cljUrl = OLD.cepPictureUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6678_cepPictureUri_ins_t
                            AFTER INSERT ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6678_cepPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6678_cepPictureUri_upd_t
                            AFTER UPDATE ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepPictureUri IS DISTINCT FROM OLD.cepPictureUri AND OLD.cepPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6678_cepPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_6678_cepPictureUri_upd_t
                            AFTER UPDATE ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepPictureUri IS DISTINCT FROM OLD.cepPictureUri AND NEW.cepPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_6678_cepPictureUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_6678_cepThumbnailUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(6678, NEW.cepUid, NEW.cepThumbnailUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_6678_cepThumbnailUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 6678
                               AND cljEntityUid = OLD.cepUid
                               AND cljUrl = OLD.cepThumbnailUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6678_cepThumbnailUri_ins_t
                            AFTER INSERT ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6678_cepThumbnailUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6678_cepThumbnailUri_upd_t
                            AFTER UPDATE ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepThumbnailUri IS DISTINCT FROM OLD.cepThumbnailUri AND OLD.cepThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6678_cepThumbnailUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_6678_cepThumbnailUri_upd_t
                            AFTER UPDATE ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepThumbnailUri IS DISTINCT FROM OLD.cepThumbnailUri AND NEW.cepThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_6678_cepThumbnailUri();
                        """)

[00007cc6db0753d0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[00007cc6db0753d0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[00007cc6db0a47d0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[00007cc6db0a47d0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
com.ustadmobile.core.domain.interop.HttpApiException: State content too large: 262145 exceeds limit of 262144
	at com.ustadmobile.core.domain.xapi.state.StoreXapiStateUseCase.invoke(StoreXapiStateUseCase.kt:131)
	at com.ustadmobile.core.domain.xapi.state.XapiStateUseCaseIntegrationTest$givenTextBodyTooLarge_whenStored_thenShouldThrowException$1.invokeSuspend(XapiStateUseCaseIntegrationTest.kt:289)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at com.ustadmobile.core.domain.xapi.state.XapiStateUseCaseIntegrationTest.givenTextBodyTooLarge_whenStored_thenShouldThrowException(XapiStateUseCaseIntegrationTest.kt:280)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:54)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
	at jdk.internal.reflect.GeneratedMethodAccessor65.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92)
	at jdk.proxy1/jdk.proxy1.$Proxy4.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:183)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Delaying...
process.waitForAsync
canceling result
Canceled
Exception in thread "UI Thread @coroutine#2539" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2539), "coroutine#2539":StandaloneCoroutine{Cancelling}@7618a01f, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#2559" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2559), "coroutine#2559":StandaloneCoroutine{Cancelling}@65e98452, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#2576" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2576), "coroutine#2576":StandaloneCoroutine{Cancelling}@5201d165, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#2600" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2600), "coroutine#2600":StandaloneCoroutine{Cancelling}@24e58496, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#2636" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2636), "coroutine#2636":StandaloneCoroutine{Cancelling}@1ea2819, Dispatchers.Main]

Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findCourseCommentsByAssignmentUid$1@70321522
Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findPrivateCommentsForUserByAssignmentUid$1@58216c80
Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findPrivateCommentsForUserByAssignmentUid$1@5be58353
Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findPrivateCommentsForUserByAssignmentUid$1@8088c69
Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findPrivateCommentsForUserByAssignmentUid$1@4fa4ce6eException in thread "UI Thread @coroutine#4317" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4317), "coroutine#4317":StandaloneCoroutine{Cancelling}@767f5325, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4346" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4346), "coroutine#4346":StandaloneCoroutine{Cancelling}@49a3f522, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4382" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4382), "coroutine#4382":StandaloneCoroutine{Cancelling}@7ba8b6b0, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4419" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4419), "coroutine#4419":StandaloneCoroutine{Cancelling}@4d06163d, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4447" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4447), "coroutine#4447":StandaloneCoroutine{Cancelling}@1e70e6db, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5039" java.lang.IllegalStateException: com.ustadmobile.door.room.RoomDatabaseJdbcImplHelper@3619066b is closed!
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.assertNotClosed(RoomDatabaseJdbcImplHelperCommon.kt:96)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:103)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:237)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:235)
	at com.ustadmobile.door.ext.DoorDatabaseExtJvmJsKt.prepareAndUseStatementAsync(DoorDatabaseExtJvmJs.kt:24)
	at com.ustadmobile.core.db.dao.OfflineItemDao_JdbcImpl$findByContentEntryUid$1.invokeSuspend(OfflineItemDao_JdbcImpl.kt:64)
	at com.ustadmobile.door.flow.DoorFlowKt$doorFlow$1$1.invokeSuspend(DoorFlow.kt:40)
	at com.ustadmobile.core.viewmodel.contententry.detailoverviewtab.ContentEntryDetailOverviewViewModel$2$1$7.invokeSuspend(ContentEntryDetailOverviewViewModel.kt:235)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5030), "coroutine#5030":StandaloneCoroutine{Cancelling}@2108ad71, Dispatchers.Main]
Caused by: java.lang.IllegalStateException: com.ustadmobile.door.room.RoomDatabaseJdbcImplHelper@3619066b is closed!
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.assertNotClosed(RoomDatabaseJdbcImplHelperCommon.kt:96)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:103)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:237)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
Exception in thread "UI Thread @coroutine#5092" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5092), "coroutine#5092":StandaloneCoroutine{Cancelling}@3f4cd829, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5109" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5109), "coroutine#5109":StandaloneCoroutine{Cancelling}@69c6c7a7, Dispatchers.Main]
> Task :core:jvmTest

Exception in thread "UI Thread @coroutine#5473" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5473), "coroutine#5473":StandaloneCoroutine{Cancelling}@2c33094a, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5490" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5490), "coroutine#5490":StandaloneCoroutine{Cancelling}@9814602, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5511" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5511), "coroutine#5511":StandaloneCoroutine{Cancelling}@5e2e17d4, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5926" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5926), "coroutine#5926":StandaloneCoroutine{Cancelling}@722223cf, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6042" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6042), "coroutine#6042":StandaloneCoroutine{Cancelling}@43594050, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6069" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6069), "coroutine#6069":StandaloneCoroutine{Cancelling}@31c3f115, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6091" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6091), "coroutine#6091":StandaloneCoroutine{Cancelling}@816db0a, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6130" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6130), "coroutine#6130":StandaloneCoroutine{Cancelling}@6aab6a5e, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6148" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6148), "coroutine#6148":StandaloneCoroutine{Cancelling}@3bc16497, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6164" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6164), "coroutine#6164":StandaloneCoroutine{Cancelling}@3828be, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6184" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6184), "coroutine#6184":StandaloneCoroutine{Cancelling}@b7014a1, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6202" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6202), "coroutine#6202":StandaloneCoroutine{Cancelling}@25782c54, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6220" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6220), "coroutine#6220":StandaloneCoroutine{Cancelling}@11f78d89, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6238" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6238), "coroutine#6238":StandaloneCoroutine{Cancelling}@39470f3b, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6259" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6259), "coroutine#6259":StandaloneCoroutine{Cancelling}@36cf3c3a, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6279" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6279), "coroutine#6279":StandaloneCoroutine{Cancelling}@7383e2d6, Dispatchers.Main]

> Task :core:allTests
> Task :core:check
> Task :core:build
[Incubating] Problems report is available at: file:///home/jenkins/.jenkins/workspace/dev-simplified-onboarding/build/reports/problems/problems-report.html

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.11.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 7m 22s
1926 actionable tasks: 1750 executed, 176 up-to-date
Build step 'Invoke Gradle script' changed build result to SUCCESS
Archiving artifacts
Recording test results
[Checks API] No suitable checks publisher found.
Finished: SUCCESS