package Ġpw . bin om . db . sqlite čĊč Ċ import Ġc names . structs . sqlite 3 č Ċ import Ġc names . structs . sqlite 3 _ stmt č Ċ import Ġkotlinx . c interop .* č Ċ import Ġplatform . internal _ sqlite .* č Ċ import Ġpw . bin om . atomic . Atomic Boolean č Ċ import Ġpw . bin om . db .* č Ċ import Ġpw . bin om . db . async . Database Info č Ċ import Ġpw . bin om . db . sync . Sync Connection č Ċ import Ġpw . bin om . db . sync . Sync PreparedStatement č Ċ import Ġpw . bin om . do Freeze č Ċ import Ġpw . bin om . io . Closed Exception č Ċ import Ġpw . bin om . io . file . File č Ċ import Ġpw . bin om . io . IOException čĊč Ċ actual Ġclass ĠSQLite Connector Ġprivate Ġconstructor ( val Ġctx : ĠC Pointer < CP o inter Var < sqlite 3 >>) Ġ: ĠSync Connection Ġ{ čĊĠĠĠ Ġactual Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġactual Ġfun Ġopen File ( file : ĠFile ): ĠSQLite Connector Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġfile . parent Ġ?: Ġthrow ĠFileNotFoundException (" File Ġ${ file . path } Ġnot Ġfound ") č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! parent . is Exist ) Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFileNotFoundException (" Direction Ġ${ file . path } Ġis Ġnot Ġfound ") č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! parent . isDirectory ) Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFileNotFoundException (" Path Ġ${ file . path } Ġis Ġnot Ġdirection ") č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġopen ( file . path ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġopen ( path : ĠString ): ĠSQLite Connector Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctx Ġ= Ġnative Heap . alloc Array < CP o inter Var < sqlite 3 >>( 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Num Ġ= Ġsqlite 3 _ open _ v 2 ( path , Ġctx , ĠSQL ITE _ OPEN _ READ WRITE Ġor ĠSQL ITE _ OPEN _ CREATE , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Num Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġsqlite 3 _ err msg ( ctx . point ed . value )?. to K String () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsqlite 3 _ close ( ctx . point ed . value ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnative Heap . free ( ctx ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Can 't Ġopen ĠData ĠBase Ġ\"$ path \": Ġ$ msg ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSQLite Connector ( ctx ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġactual Ġfun Ġmemory ( name : ĠString ?): ĠSQLite Connector Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġif Ġ( name Ġ== Ġnull Ġ|| Ġname . isBlank ()) Ġ" file :: memory :" Ġelse Ġ" file :$ name ? mode = memory " čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġopen ( path ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġactual Ġval ĠTYPE : ĠString čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" SQLite " čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġval Ġclosed Ġ= ĠAtomic Boolean ( false ) čĊĠĠĠ Ġprivate Ġval Ġbegin St Ġ= Ġprepare Statement (" BEGIN ") čĊĠĠĠ Ġprivate Ġval Ġcommit St Ġ= Ġprepare Statement (" COMMIT ") čĊĠĠĠ Ġprivate Ġval Ġrollback St Ġ= Ġprepare Statement (" ROLL BACK ") čĊčĊĠĠĠ Ġinit Ġ{ č Ċ // ĠĠĠĠĠĠĠ Ġbegin St . executeUpdate () čĊĠĠĠĠĠĠĠ Ġdo Freeze () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġcheck Closed () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( closed . value ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠClosed Exception () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġcreate Statement (): ĠSQLite Statement Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġreturn ĠSQLite Statement ( this ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġprepare Statement ( query : ĠString ): ĠSync PreparedStatement Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġval Ġstmt Ġ= Ġnative Heap . alloc Array < CP o inter Var < sqlite 3 _ stmt >>( 1 ) čĊĠĠĠĠĠĠĠ Ġsqlite 3 _ prepare _ v 3 ( ctx . point ed . value , Ġquery , Ġ- 1 , Ġ 0 u , Ġstmt , Ġnull ) čĊĠĠĠĠĠĠĠ Ġreturn ĠSQLite Prepare Statement ( this , Ġstmt ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġcommit () Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġcommit St . executeUpdate () č Ċ // ĠĠĠĠĠĠĠ Ġbegin St . executeUpdate () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġrollback () Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġrollback St . executeUpdate () č Ċ // ĠĠĠĠĠĠĠ Ġbegin St . executeUpdate () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġval Ġtype : ĠString čĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠTYPE čĊčĊĠĠĠ Ġoverride Ġval Ġis Connected : ĠBoolean čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! closed . value čĊčĊĠĠĠ Ġoverride Ġval Ġdb Info : ĠDatabase Info čĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSQLite SQL Database Info čĊčĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sqlite 3 _ get _ auto commit ( ctx . point ed . value ) Ġ== Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrollback St . executeUpdate () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit St . close () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrollback St . close () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin St . close () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġsqlite 3 _ close ( ctx . point ed . value ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r Ġ!= ĠSQL ITE _ OK ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Sql Code ( r ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () čĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġclosed . value Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative Heap . free ( ctx ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊč Ċ internal Ġfun ĠSQLite Connector . check Sql Code ( code : ĠInt ) Ġ{ čĊĠĠĠ Ġfun Ġmsg () Ġ= Ġsqlite 3 _ err msg ( this . ctx . point ed !!. value )?. to K String From Utf 8 () Ġ?: Ġ" Unknown ĠError " čĊĠĠĠ Ġwhen Ġ( code ) Ġ{ čĊĠĠĠĠĠĠĠ ĠSQL ITE _ OK , ĠSQL ITE _ DONE , ĠSQL ITE _ ROW Ġ-> Ġreturn čĊĠĠĠĠĠĠĠ ĠSQL ITE _ BUSY Ġ-> Ġthrow ĠSQLException (" Database Ġis ĠBus y ") čĊĠĠĠĠĠĠĠ ĠSQL ITE _ ERROR Ġ-> Ġthrow ĠSQLException ( msg ()) čĊĠĠĠĠĠĠĠ ĠSQL ITE _ MIS USE Ġ-> Ġthrow ĠSQLException (" Database Ġis ĠMis use ") čĊĠĠĠĠĠĠĠ ĠSQL ITE _ CONSTRAINT Ġ-> Ġthrow ĠSQLException (" Constraint : Ġ${ msg () }") čĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSQLException (" SQL ĠCode : Ġ$ code ") čĊĠĠĠ Ġ} č Ċ }