1- import { AbstractPowerSyncDatabase , QueryResult } from '@powersync/common' ;
1+ import { LockContext , QueryResult } from '@powersync/common' ;
22import { entityKind } from 'drizzle-orm/entity' ;
33import type { Logger } from 'drizzle-orm/logger' ;
44import { NoopLogger } from 'drizzle-orm/logger' ;
55import type { RelationalSchemaConfig , TablesRelationalConfig } from 'drizzle-orm/relations' ;
6- import { type Query , sql } from 'drizzle-orm/sql/sql' ;
6+ import { type Query } from 'drizzle-orm/sql/sql' ;
77import type { SQLiteAsyncDialect } from 'drizzle-orm/sqlite-core/dialect' ;
88import type { SelectedFieldsOrdered } from 'drizzle-orm/sqlite-core/query-builders/select.types' ;
99import {
@@ -13,7 +13,7 @@ import {
1313 SQLiteTransaction ,
1414 type SQLiteTransactionConfig
1515} from 'drizzle-orm/sqlite-core/session' ;
16- import { PowerSyncSQLitePreparedQuery } from './sqlite-query ' ;
16+ import { PowerSyncSQLitePreparedQuery } from './PowerSyncSQLitePreparedQuery ' ;
1717
1818export interface PowerSyncSQLiteSessionOptions {
1919 logger ?: Logger ;
@@ -30,19 +30,19 @@ export class PowerSyncSQLiteTransaction<
3030 static readonly [ entityKind ] : string = 'PowerSyncSQLiteTransaction' ;
3131}
3232
33- export class PowerSyncSQLiteSession <
33+ export class PowerSyncSQLiteBaseSession <
3434 TFullSchema extends Record < string , unknown > ,
3535 TSchema extends TablesRelationalConfig
3636> extends SQLiteSession < 'async' , QueryResult , TFullSchema , TSchema > {
37- static readonly [ entityKind ] : string = 'PowerSyncSQLiteSession ' ;
37+ static readonly [ entityKind ] : string = 'PowerSyncSQLiteBaseSession ' ;
3838
39- private logger : Logger ;
39+ protected logger : Logger ;
4040
4141 constructor (
42- private db : AbstractPowerSyncDatabase ,
43- dialect : SQLiteAsyncDialect ,
44- private schema : RelationalSchemaConfig < TSchema > | undefined ,
45- options : PowerSyncSQLiteSessionOptions = { }
42+ protected db : LockContext ,
43+ protected dialect : SQLiteAsyncDialect ,
44+ protected schema : RelationalSchemaConfig < TSchema > | undefined ,
45+ protected options : PowerSyncSQLiteSessionOptions = { }
4646 ) {
4747 super ( dialect ) ;
4848 this . logger = options . logger ?? new NoopLogger ( ) ;
@@ -66,33 +66,10 @@ export class PowerSyncSQLiteSession<
6666 ) ;
6767 }
6868
69- override transaction < T > (
70- transaction : ( tx : PowerSyncSQLiteTransaction < TFullSchema , TSchema > ) => T ,
71- config : PowerSyncSQLiteTransactionConfig = { }
69+ transaction < T > (
70+ _transaction : ( tx : PowerSyncSQLiteTransaction < TFullSchema , TSchema > ) => T ,
71+ _config : PowerSyncSQLiteTransactionConfig = { }
7272 ) : T {
73- const { accessMode = 'read write' } = config ;
74-
75- if ( accessMode === 'read only' ) {
76- return this . db . readLock ( async ( ) => this . internalTransaction ( transaction , config ) ) as T ;
77- }
78-
79- return this . db . writeLock ( async ( ) => this . internalTransaction ( transaction , config ) ) as T ;
80- }
81-
82- async internalTransaction < T > (
83- transaction : ( tx : PowerSyncSQLiteTransaction < TFullSchema , TSchema > ) => T ,
84- config : PowerSyncSQLiteTransactionConfig = { }
85- ) : Promise < T > {
86- const tx = new PowerSyncSQLiteTransaction ( 'async' , ( this as any ) . dialect , this , this . schema ) ;
87-
88- await this . run ( sql . raw ( `begin${ config ?. behavior ? ' ' + config . behavior : '' } ` ) ) ;
89- try {
90- const result = await transaction ( tx ) ;
91- await this . run ( sql `commit` ) ;
92- return result ;
93- } catch ( err ) {
94- await this . run ( sql `rollback` ) ;
95- throw err ;
96- }
73+ throw new Error ( 'Nested transactions are not supported' ) ;
9774 }
9875}
0 commit comments