package Ġorg . db tools . android . room . jdbc Ċ Ċ import Ġandroidx . sqlite . db . Simple SQLite Query Ċ import Ġandroidx . sqlite . db . Support SQLite Database Ċ import Ġandroidx . sqlite . db . Support SQLite Query Ċ import Ġandroidx . sqlite . db . Support SQLite Statement Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Transaction Listener Ċ import Ġandroid . os . Cancellation Signal Ċ import Ġandroid . util . Pair Ċ import Ġorg . sqlite . JDBC Ċ import Ġjava . sql . Connection Ċ import Ġjava . sql . Driver Manager Ċ import Ġjava . util . Locale Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ class ĠJdbc Sqlite Database ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb Path : ĠString Ċ ) Ġ: ĠSupport SQLite Database Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdb Url Ġ= Ġ" jdbc : sqlite :$ db Path " ĊĠĠĠ Ġprivate Ġval Ġconn : ĠConnection ĊĠĠĠ Ġprivate Ġvar Ġcommit Transaction Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġtransaction Listener : ĠSQLite Transaction Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġtransaction Counter Ġ= ĠAtomicInteger ( 0 ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDriver Manager . register Driver ( JDBC ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Could Ġload Ġsqlite - jdbc Ġdriver ... Ġis Ġthe Ġsqlite - jdbc Ġdriver Ġincluded Ġin Ġthe Ġdependencies ?", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconn Ġ= ĠDriver Manager . getConnection ( db Url ) ĊĠĠĠĠĠĠĠ Ġconn ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Connected Ġto Ġthe Ġdatabase ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdm Ġ= Ġit . metaData ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Driver Ġname : Ġ" Ġ+ Ġdm . driver Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Driver Ġversion : Ġ" Ġ+ Ġdm . driver Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Product Ġname : Ġ" Ġ+ Ġdm . database ProductName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Product Ġversion : Ġ" Ġ+ Ġdm . database Product Version ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Database Integr ity Ok (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrs Ġ= Ġconn . prepare Call (" PR AG MA Ġintegrity _ check ( 1 ) "). executeQuery () ĊĠĠĠĠĠĠĠ Ġreturn Ġrs . getString ( 1 ). equals (" ok ", Ġignore Case Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Db Locked By Current Thread (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġconn . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisOpen (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! conn . is Closed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Transaction () Ġ{ ĊĠĠĠĠĠĠĠ Ġbegin Transaction With Listener Non Exclusive ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Transaction Non Exclusive () Ġ{ ĊĠĠĠĠĠĠĠ Ġbegin Transaction With Listener Non Exclusive ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Transaction With Listener ( transaction Listener : ĠSQLite Transaction Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbegin Transaction With Listener Non Exclusive ( transaction Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Transaction With Listener Non Exclusive ( transaction Listener : ĠSQLite Transaction Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( conn . auto Commit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . transaction Listener Ġ= Ġtransaction Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Transaction Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . auto Commit Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . transaction Listener ?. on Begin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Counter . set ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtransaction Counter . increment AndGet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġin Transaction (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! conn . auto Commit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Transaction () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction Counter . decrement AndGet () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Transaction Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Listener ?. on Commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . rollback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Listener ?. on Commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . auto Commit Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Transaction Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Transaction Successful () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction Counter . get () Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Transaction Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġyield If Cont ended S af ely (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġyield If Cont ended S af ely ( sleep After Yield Delay : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompile Statement ( sql : ĠString ?): ĠSupport SQLite Statement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompile Jdbc Statement ( sql ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( table : ĠString ?, Ġconflict Algorithm : ĠInt , Ġvalues : ĠContent Values ?): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial Values Ġ= ĠcheckNotNull ( values ) Ġ{ Ġ" values Ġmust Ġnot Ġbe Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġcheck ( initial Values . size () Ġ> Ġ 0 ) Ġ{ Ġ" values Ġmust Ġnot Ġbe Ġempty " Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= ĠcheckNotNull ( table ) Ġ{ Ġ" table Ġmust Ġnot Ġbe Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġinitial Values . size () ĊĠĠĠĠĠĠĠ Ġval Ġbind Args Ġ= ĠarrayOf Null s < Any ? >( size ) ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" INSERT ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( CONF LI CT _ VALUES [ conflict Algorithm ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠINTO Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( tableName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (' (' ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Values . keySet (). forEach Indexed Ġ{ Ġi , Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Args [ i ] Ġ= Ġinitial Values . get ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (' )') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠVALUES Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( when Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ" ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ", ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (' )') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠJdbc SQLite Statement ( conn , Ġsql ). use Ġ{ statement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . bind Arguments ( bind Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute Insert () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( query : ĠString ?): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery ( Simple SQLite Query ( query )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( query : ĠString ?, Ġbind Args : ĠArray < out ĠAny ?> ?): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery ( Simple SQLite Query ( query , Ġbind Args )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( query : ĠSupport SQLite Query ?): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Query Ġ= ĠcheckNotNull ( query ) Ġ{ Ġ" Query Ġmust Ġnot Ġbe Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠcheckNotNull ( sql Query . sql ) Ġ{ Ġ" Query ĠSQL Ġmust Ġbe Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstatement Ġ= Ġcompile Jdbc Statement ( sql ) ĊĠĠĠĠĠĠĠ Ġsql Query . bind To ( statement ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstatement . executeQuery () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( query : ĠSupport SQLite Query ?, Ġcancellation Signal : ĠC ancellation Signal ?): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery ( query ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( table : ĠString ?, Ġconflict Algorithm : ĠInt , Ġvalues : ĠContent Values ?, Ġwhere Clause : ĠString ?, Ġwhere Args : ĠArray < out ĠAny ?> ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial Values Ġ= ĠcheckNotNull ( values ) Ġ{ Ġ" Values Ġmust Ġnot Ġbe Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġcheck ( initial Values . size () Ġ> Ġ 0 ) Ġ{ Ġ" Values Ġmust Ġnot Ġbe Ġempty " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġset Values Size Ġ= Ġinitial Values . size () ĊĠĠĠĠĠĠĠ Ġval Ġbind Arg Size Ġ= Ġwhen ( where Args ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġset Values Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġset Values Size Ġ+ Ġwhere Args . size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbind Args Ġ= ĠarrayOf Null s < Any >( bind Arg Size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" UPDATE Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( CONF LI CT _ VALUES [ conflict Algorithm ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠSET Ġ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Values . keySet (). forEach Indexed Ġ{ Ġi , Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Args [ i ] Ġ= Ġinitial Values . get ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( where Args Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġset Values Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġbind Arg Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Args [ i ] Ġ= Ġwhere Args [ i Ġ- Ġset Values Size ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! where Clause . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠWHERE Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( where Clause ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstmt Ġ= Ġcompile Statement ( sql ) ĊĠĠĠĠĠĠĠ ĠSimple SQLite Query . bind ( stmt , Ġbind Args ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstmt . executeUpdate Delete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( table : ĠString ?, Ġwhere Clause : ĠString ?, Ġwhere Args : ĠArray < out ĠAny ?> ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" DELETE ĠFROM Ġ$ table Ġ${ when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Clause . isNull Or Blank () Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" WHERE Ġ$ where Clause " ĊĠĠĠĠĠĠĠ Ġ}}" ĊĠĠĠĠĠĠĠ Ġval Ġstatement Ġ= Ġcompile Statement ( query ) ĊĠĠĠĠĠĠĠ ĠSimple SQLite Query . bind ( statement , Ġwhere Args ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstatement . executeUpdate Delete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexec SQL ( sql : ĠString ?) Ġ= Ġcompile Statement ( sql ). execute () ĊĊĠĠĠ Ġoverride Ġfun Ġexec SQL ( sql : ĠString ?, Ġbind Args : ĠArray < out ĠAny > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstmt Ġ= Ġcompile Statement ( sql ) ĊĠĠĠĠĠĠĠ ĠSimple SQLite Query . bind ( stmt , Ġbind Args ) ĊĠĠĠĠĠĠĠ Ġstmt . execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Locale ( locale : ĠLocale ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNO ĠOP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Attached D bs (): ĠList < Pair < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Max Sql Cache Size ( cache Size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNO ĠOP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ForeignKey Constraints Enabled ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconn . createStatement (). execute ( when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Ġ-> Ġ" PR AG MA Ġforeign _ keys Ġ= ĠON " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" PR AG MA Ġforeign _ keys Ġ= ĠOFF " ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Version (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconn . prepareStatement (" PR AG MA Ġuser _ version "). executeQuery (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getInt ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Version ( version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexec SQL (" PR AG MA Ġuser _ version Ġ= Ġ$ version ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġneed Upgrade ( new Version : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Version Ġ> Ġversion ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis ReadOnly (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconn . is ReadOnly ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetPath (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdb Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Maximum Size (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Maximum Size ( num Bytes : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset PageSize ( num Bytes : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNo ĠOp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget PageSize (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġenable Write A head Logging (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Write A head Logging Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisable Write A head Logging () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNO ĠOP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompile Jdbc Statement ( sql : ĠString ?): ĠJdbc SQLite Statement Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsafe Sql Ġ= ĠcheckNotNull ( sql ) Ġ{ Ġ" sql Ġmust Ġnot Ġbe Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠJdbc SQLite Statement ( conn , Ġsafe Sql ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< T Ġ: ĠAuto Closeable ?, ĠR > ĠT . use ( block : Ġ( T ) Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġexception : ĠThrowable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġblock ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ== Ġnull Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ== Ġnull Ġ-> Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( close Exception : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcause . add Sup pressed ( close Exception ) Ġ// Ġignored Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCON FLI CT _ VALUES Ġ= ĠarrayOf ("", Ġ" ĠOR ĠR OL L BACK Ġ", Ġ" ĠOR ĠAB ORT Ġ", Ġ" ĠOR ĠFAIL Ġ", Ġ" ĠOR ĠIG NORE Ġ", Ġ" ĠOR ĠREPLACE Ġ") ĊĠĠĠ Ġ} Ċ }