@@ -9,13 +9,15 @@ import kotlinx.coroutines.sync.Mutex
99import  kotlinx.coroutines.sync.withLock 
1010
1111public  interface  ConnectionPool  : AutoCloseable  {
12+   public  val  configuration:  AndroidxSqliteConfiguration 
13+ 
1214  public  fun  acquireWriterConnection (): SQLiteConnection 
1315  public  fun  releaseWriterConnection ()
1416  public  fun  acquireReaderConnection (): SQLiteConnection 
1517  public  fun  releaseReaderConnection (connection :  SQLiteConnection )
16-   public  fun  setForeignKeyConstraintsEnabled (isForeignKeyConstraintsEnabled :  Boolean )
1718  public  fun  setJournalMode (journalMode :  SqliteJournalMode )
18-   public  fun  setSync (sync :  SqliteSync )
19+   public  fun  updateForeignKeyConstraintsEnabled (isForeignKeyConstraintsEnabled :  Boolean )
20+   public  fun  updateSync (sync :  SqliteSync )
1921}
2022
2123internal  class  AndroidxDriverConnectionPool (
@@ -29,14 +31,14 @@ internal class AndroidxDriverConnectionPool(
2931    val  connection :  Lazy <SQLiteConnection >,
3032  )
3133
32-   private  var  configuration by atomic(configuration)
34+   override  var  configuration by atomic(configuration)
3335
3436  private  val  name by lazy { nameProvider() }
3537
3638  private  val  writerConnection:  SQLiteConnection  by lazy {
3739    connectionFactory
3840      .createConnection(name)
39-       .withConfiguration (configuration)
41+       .withWriterConfiguration (configuration)
4042  }
4143
4244  private  val  writerMutex =  Mutex ()
@@ -56,7 +58,7 @@ internal class AndroidxDriverConnectionPool(
5658          lazy {
5759            connectionFactory
5860              .createConnection(name)
59-               .withConfiguration (configuration)
61+               .withReaderConfiguration (configuration)
6062          },
6163        ),
6264      )
@@ -108,32 +110,27 @@ internal class AndroidxDriverConnectionPool(
108110    }
109111  }
110112
111-   override  fun  setForeignKeyConstraintsEnabled ( isForeignKeyConstraintsEnabled :   Boolean ) {
113+   override  fun  setJournalMode ( journalMode :   SqliteJournalMode ) {
112114    configuration =  configuration.copy(
113-       isForeignKeyConstraintsEnabled  =  isForeignKeyConstraintsEnabled ,
115+       journalMode  =  journalMode ,
114116    )
115117
116-     val  foreignKeys =  if (isForeignKeyConstraintsEnabled) " ON" else  " OFF" 
117-     runPragmaOnAllConnections(" PRAGMA foreign_keys = $foreignKeys ;" 
118+     runPragmaOnAllCreatedConnections(" PRAGMA journal_mode = ${configuration.journalMode.value} ;" 
118119  }
119120
120-   override  fun  setJournalMode ( journalMode :   SqliteJournalMode ) {
121+   override  fun  updateForeignKeyConstraintsEnabled ( isForeignKeyConstraintsEnabled :   Boolean ) {
121122    configuration =  configuration.copy(
122-       journalMode  =  journalMode ,
123+       isForeignKeyConstraintsEnabled  =  isForeignKeyConstraintsEnabled ,
123124    )
124- 
125-     runPragmaOnAllConnections(" PRAGMA journal_mode = ${configuration.journalMode.value} ;" 
126125  }
127126
128-   override  fun  setSync (sync :  SqliteSync ) {
127+   override  fun  updateSync (sync :  SqliteSync ) {
129128    configuration =  configuration.copy(
130129      sync =  sync,
131130    )
132- 
133-     runPragmaOnAllConnections(" PRAGMA synchronous = ${configuration.sync.value} ;" 
134131  }
135132
136-   private  fun  runPragmaOnAllConnections (sql :  String ) {
133+   private  fun  runPragmaOnAllCreatedConnections (sql :  String ) {
137134    val  writer =  acquireWriterConnection()
138135    try  {
139136      writer.execSQL(sql)
@@ -180,12 +177,12 @@ internal class PassthroughConnectionPool(
180177  nameProvider :  () ->  String ,
181178  configuration :  AndroidxSqliteConfiguration ,
182179) : ConnectionPool {
183-   private  var  configuration by atomic(configuration)
180+   override  var  configuration by atomic(configuration)
184181
185182  private  val  name by lazy { nameProvider() }
186183
187184  private  val  delegatedConnection:  SQLiteConnection  by lazy {
188-     connectionFactory.createConnection(name).withConfiguration (configuration)
185+     connectionFactory.createConnection(name).withWriterConfiguration (configuration)
189186  }
190187
191188  override  fun  acquireWriterConnection () =  delegatedConnection
@@ -196,15 +193,6 @@ internal class PassthroughConnectionPool(
196193
197194  override  fun  releaseReaderConnection (connection :  SQLiteConnection ) {}
198195
199-   override  fun  setForeignKeyConstraintsEnabled (isForeignKeyConstraintsEnabled :  Boolean ) {
200-     configuration =  configuration.copy(
201-       isForeignKeyConstraintsEnabled =  isForeignKeyConstraintsEnabled,
202-     )
203- 
204-     val  foreignKeys =  if (isForeignKeyConstraintsEnabled) " ON" else  " OFF" 
205-     delegatedConnection.execSQL(" PRAGMA foreign_keys = $foreignKeys ;" 
206-   }
207- 
208196  override  fun  setJournalMode (journalMode :  SqliteJournalMode ) {
209197    configuration =  configuration.copy(
210198      journalMode =  journalMode,
@@ -217,20 +205,24 @@ internal class PassthroughConnectionPool(
217205    delegatedConnection.execSQL(" PRAGMA foreign_keys = $foreignKeys ;" 
218206  }
219207
220-   override  fun  setSync ( sync :   SqliteSync ) {
208+   override  fun  updateForeignKeyConstraintsEnabled ( isForeignKeyConstraintsEnabled :   Boolean ) {
221209    configuration =  configuration.copy(
222-       sync  =  sync ,
210+       isForeignKeyConstraintsEnabled  =  isForeignKeyConstraintsEnabled ,
223211    )
212+   }
224213
225-     delegatedConnection.execSQL(" PRAGMA synchronous = ${configuration.sync.value} ;" 
214+   override  fun  updateSync (sync :  SqliteSync ) {
215+     configuration =  configuration.copy(
216+       sync =  sync,
217+     )
226218  }
227219
228220  override  fun  close () {
229221    delegatedConnection.close()
230222  }
231223}
232224
233- private  fun  SQLiteConnection.withConfiguration (
225+ private  fun  SQLiteConnection.withWriterConfiguration (
234226  configuration :  AndroidxSqliteConfiguration ,
235227): SQLiteConnection  =  this .apply  {
236228  //  copy the configuration for thread safety
@@ -243,3 +235,10 @@ private fun SQLiteConnection.withConfiguration(
243235    execSQL(" PRAGMA foreign_keys = $foreignKeys ;" 
244236  }
245237}
238+ 
239+ private  fun  SQLiteConnection.withReaderConfiguration (
240+   configuration :  AndroidxSqliteConfiguration ,
241+ ): SQLiteConnection  =  this .apply  {
242+   //  copy the configuration for thread safety
243+   execSQL(" PRAGMA journal_mode = ${configuration.copy().journalMode.value} ;" 
244+ }
0 commit comments