@@ -56,7 +56,6 @@ internal class PowerSyncDatabaseImpl(
5656 private val dbFilename : String ,
5757 private val dbDirectory : String? = null ,
5858 val logger : Logger = Logger ,
59- driver : PsSqlDriver = factory.createDriver(scope, dbFilename),
6059) : PowerSyncDatabase {
6160 companion object {
6261 internal val streamConflictMessage =
@@ -104,9 +103,11 @@ internal class PowerSyncDatabaseImpl(
104103 clearResourceWhenDisposed = res.second
105104
106105 runBlocking {
107- val sqliteVersion = internalDb.queries.sqliteVersion().executeAsOne()
106+ val sqliteVersion = internalDb.get( " SELECT sqlite_version() " ) { it.getString( 0 ) !! }
108107 logger.d { " SQLiteVersion: $sqliteVersion " }
109- checkVersion()
108+ powerSyncVersion =
109+ internalDb.get(" SELECT powersync_rs_version()" ) { it.getString(0 )!! }
110+ checkVersion(powerSyncVersion!! )
110111 logger.d { " PowerSyncVersion: ${getPowerSyncVersion()} " }
111112
112113 internalDb.writeTransaction { tx ->
@@ -322,14 +323,23 @@ internal class PowerSyncDatabaseImpl(
322323
323324 override suspend fun <R > readTransaction (callback : ThrowableTransactionCallback <R >): R = internalDb.writeTransaction(callback)
324325
325- override suspend fun <R > writeLock (callback : ThrowableLockCallback <R >): R = internalDb.writeLock(callback)
326+ override suspend fun <R > writeLock (callback : ThrowableLockCallback <R >): R =
327+ resource.group.writeLockMutex.withLock {
328+ internalDb.writeLock(callback)
329+ }
326330
327- override suspend fun <R > writeTransaction (callback : ThrowableTransactionCallback <R >): R = internalDb.writeTransaction(callback)
331+ override suspend fun <R > writeTransaction (callback : ThrowableTransactionCallback <R >): R =
332+ resource.group.writeLockMutex.withLock {
333+ internalDb.writeTransaction(callback)
334+ }
328335
329336 override suspend fun execute (
330337 sql : String ,
331338 parameters : List <Any ?>? ,
332- ): Long = internalDb.execute(sql, parameters)
339+ ): Long =
340+ resource.group.writeLockMutex.withLock {
341+ internalDb.execute(sql, parameters)
342+ }
333343
334344 private suspend fun handleWriteCheckpoint (
335345 lastTransactionId : Int ,
@@ -464,28 +474,21 @@ internal class PowerSyncDatabaseImpl(
464474 /* *
465475 * Check that a supported version of the powersync extension is loaded.
466476 */
467- private suspend fun checkVersion () {
468- val version: String =
469- try {
470- getPowerSyncVersion()
471- } catch (e: Exception ) {
472- throw Exception (" The powersync extension is not loaded correctly. Details: $e " )
473- }
474-
477+ private suspend fun checkVersion (powerSyncVersion : String ) {
475478 // Parse version
476479 val versionInts: List <Int > =
477480 try {
478- version
481+ powerSyncVersion
479482 .split(Regex (" [./]" ))
480483 .take(3 )
481484 .map { it.toInt() }
482485 } catch (e: Exception ) {
483- throw Exception (" Unsupported powersync extension version. Need ^0.2.0, got: $version . Details: $e " )
486+ throw Exception (" Unsupported powersync extension version. Need ^0.2.0, got: $powerSyncVersion . Details: $e " )
484487 }
485488
486489 // Validate ^0.2.0
487490 if (versionInts[0 ] != 0 || versionInts[1 ] < 2 || versionInts[2 ] < 0 ) {
488- throw Exception (" Unsupported powersync extension version. Need ^0.2.0, got: $version " )
491+ throw Exception (" Unsupported powersync extension version. Need ^0.2.0, got: $powerSyncVersion " )
489492 }
490493 }
491494}
0 commit comments