@ file : Jvm Name (" Jdbc Drivers ") Ċ package Ġcom . squareup . sql de light . sqlite . driver Ċ Ċ import Ġcom . squareup . sql de light . Trans acter Ċ import Ġcom . squareup . sql de light . db . Sql Cursor Ċ import Ġcom . squareup . sql de light . db . Sql Driver Ċ import Ġcom . squareup . sql de light . db . Sql PreparedStatement Ċ import Ġjava . sql . Connection Ċ import Ġjava . sql . PreparedStatement Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . sql . Types Ċ import Ġjavax . sql . DataSource Ċ Ċ @ Jvm Name (" from DataSource ") Ċ fun ĠDataSource . as Jdbc Driver () Ġ= Ġobject Ġ: ĠJdbc Driver () Ġ{ ĊĠ Ġoverride Ġfun Ġget Connection (): ĠConnection Ġ{ ĊĠĠĠ Ġreturn Ġconnection ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclose Connection ( connection : ĠConnection ) Ġ{ ĊĠĠĠ Ġif Ġ(! connection . is Closed ) Ġ{ ĊĠĠĠĠĠ Ġconnection . close () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠJdbc Driver Ġ: ĠSql Driver Ġ{ ĊĠ Ġabstract Ġfun Ġget Connection (): ĠConnection ĊĊĠ Ġabstract Ġfun Ġclose Connection ( connection : ĠConnection ) ĊĊĠ Ġprivate Ġval Ġtransactions Ġ= ĠThread Local < Transaction >() ĊĊĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġconnection And Close (): ĠPair < Connection , Ġ() Ġ-> ĠUnit > Ġ{ ĊĠĠĠ Ġval Ġen closing Ġ= Ġtransactions . get () ĊĠĠĠ Ġreturn Ġif Ġ( enc lo sing Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġen closing . connection Ġto Ġ{} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġconnection Ġ= Ġget Connection () ĊĠĠĠĠĠ Ġreturn Ġconnection Ġto Ġ{ Ġclose Connection ( connection ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġexecute ( ĊĠĠĠ Ġidentifier : ĠInt ?, ĊĠĠĠ Ġsql : ĠString , ĊĠĠĠ Ġparameters : ĠInt , ĊĠĠĠ Ġbind ers : Ġ( Sql PreparedStatement . () Ġ-> ĠUnit )? ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġ( connection , ĠonClose ) Ġ= Ġconnection And Close () ĊĠĠĠ Ġconnection . prepareStatement ( sql ). use Ġ{ Ġjdbc Statement Ġ-> ĊĠĠĠĠĠ ĠSql ite Jdbc PreparedStatement ( jdbc Statement ) ĊĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġif Ġ( bind ers Ġ!= Ġnull ) Ġthis . bind ers () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠ Ġ} ĊĠĠĠ ĠonClose () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġexecute Query ( ĊĠĠĠ Ġidentifier : ĠInt ?, ĊĠĠĠ Ġsql : ĠString , ĊĠĠĠ Ġparameters : ĠInt , ĊĠĠĠ Ġbind ers : Ġ( Sql PreparedStatement . () Ġ-> ĠUnit )? ĊĠ Ġ): ĠSql Cursor Ġ{ ĊĠĠĠ Ġval Ġ( connection , ĠonClose ) Ġ= Ġconnection And Close () ĊĠĠĠ Ġreturn ĠSql ite Jdbc PreparedStatement ( connection . prepareStatement ( sql )) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġif Ġ( bind ers Ġ!= Ġnull ) Ġthis . bind ers () Ġ} ĊĠĠĠĠĠĠĠ Ġ. executeQuery ( onClose ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġnew Transaction (): ĠTrans acter . Transaction Ġ{ ĊĠĠĠ Ġval Ġen closing Ġ= Ġtransactions . get () ĊĠĠĠ Ġval Ġconnection Ġ= Ġen closing ?. connection Ġ?: Ġget Connection () ĊĠĠĠ Ġval Ġtransaction Ġ= ĠTransaction ( enc lo sing , Ġconnection ) ĊĠĠĠ Ġtransactions . set ( transaction ) ĊĊĠĠĠ Ġif Ġ( enc lo sing Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġconnection . auto Commit Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtransaction ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcurrent Transaction (): ĠTrans acter . Transaction ? Ġ= Ġtransactions . get () ĊĊĠ Ġprivate Ġinner Ġclass ĠTransaction ( ĊĠĠĠ Ġoverride Ġval Ġen closing Transaction : ĠTransaction ?, ĊĠĠĠ Ġinternal Ġval Ġconnection : ĠConnection ĊĠ Ġ) Ġ: ĠTrans acter . Transaction () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġend Transaction ( successful : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( enc lo sing Transaction Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġconnection . commit () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġconnection . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconnection . auto Commit Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġclose Connection ( connection ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtransactions . set ( enc lo sing Transaction ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠSql ite Jdbc PreparedStatement ( ĊĠ Ġprivate Ġval Ġprepared Statement : ĠPreparedStatement Ċ ) Ġ: ĠSql PreparedStatement Ġ{ ĊĠ Ġoverride Ġfun Ġbind Bytes ( index : ĠInt , Ġvalue : ĠByteArray ?) Ġ{ ĊĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġprepared Statement . set Null ( index , ĠTypes . BLOB ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġprepared Statement . set Bytes ( index , Ġvalue ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġbind Long ( index : ĠInt , Ġvalue : ĠLong ?) Ġ{ ĊĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġprepared Statement . set Null ( index , ĠTypes . INTEGER ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġprepared Statement . set Long ( index , Ġvalue ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġbind Double ( index : ĠInt , Ġvalue : ĠDouble ?) Ġ{ ĊĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġprepared Statement . set Null ( index , ĠTypes . REAL ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġprepared Statement . set Double ( index , Ġvalue ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġbind String ( index : ĠInt , Ġvalue : ĠString ?) Ġ{ ĊĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġprepared Statement . set Null ( index , ĠTypes . VARCHAR ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġprepared Statement . setString ( index , Ġvalue ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġexecute Query ( onClose : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠ ĠSql ite Jdbc Cursor ( prepared Statement , Ġprepared Statement . executeQuery (), ĠonClose ) ĊĊĠ Ġinternal Ġfun Ġexecute () Ġ{ ĊĠĠĠ Ġprepared Statement . execute () ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠSql ite Jdbc Cursor ( ĊĠ Ġprivate Ġval Ġprepared Statement : ĠPreparedStatement , ĊĠ Ġprivate Ġval ĠresultSet : ĠResultSet , ĊĠ Ġprivate Ġval ĠonClose : Ġ() Ġ-> ĠUnit Ċ ) Ġ: ĠSql Cursor Ġ{ ĊĠ Ġoverride Ġfun ĠgetString ( index : ĠInt ) Ġ= ĠresultSet . getString ( index Ġ+ Ġ 1 ) ĊĠ Ġoverride Ġfun Ġget Bytes ( index : ĠInt ) Ġ= ĠresultSet . getBytes ( index Ġ+ Ġ 1 ) ĊĠ Ġoverride Ġfun Ġget Long ( index : ĠInt ): ĠLong ? Ġ{ ĊĠĠĠ Ġreturn ĠresultSet . getLong ( index Ġ+ Ġ 1 ). take Unless Ġ{ ĠresultSet . was Null () Ġ} ĊĠ Ġ} ĊĠ Ġoverride Ġfun Ġget Double ( index : ĠInt ): ĠDouble ? Ġ{ ĊĠĠĠ Ġreturn ĠresultSet . getDouble ( index Ġ+ Ġ 1 ). take Unless Ġ{ ĠresultSet . was Null () Ġ} ĊĠ Ġ} ĊĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠ ĠresultSet . close () ĊĠĠĠ Ġprepared Statement . close () ĊĠĠĠ ĠonClose () ĊĠ Ġ} ĊĠ Ġoverride Ġfun Ġnext () Ġ= ĠresultSet . next () Ċ } Ċ