@ file : Suppress (" unused ", Ġ" RECE IVER _ NULL ABILITY _ MIS MATCH _ BASE D _ ON _ JAVA _ AN NOT ATIONS ") Ċ Ċ package Ġtk . mall um o . k db Ċ Ċ import Ġkotlinx . coroutines . sync . Mutex Ċ import Ġkotlinx . coroutines . sync . with Lock Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġtk . mall um o . k db . sqlite . Sqlite DB ĊĊ Ċ class ĠK db Ġinternal Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġdb : ĠSql ite DB , ĊĠĠĠ Ġprivate Ġval Ġdb Def Array : ĠArrayList < Impl K db Table Def >, ĊĠĠĠ Ġprivate Ġval Ġis Debug : ĠBoolean Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsqlite : ĠSql ite DB , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Debug : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Def Array : ĠArrayList < Impl K db Table Def > ĊĠĠĠĠĠĠĠ Ġ): ĠK db Ġ= ĠK db ( sqlite , Ġdb Def Array , Ġis Debug ) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġk db Lock Ġ= ĠMutex () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconnection : ĠImp l K db Connection ĊĠĠĠ Ġprivate Ġvar Ġis Init Complete Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġinsert Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠImp l K db Command . Insert ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdelete Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠImp l K db Command . Delete ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġupdate Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠImp l K db Command . Update ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġquery Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠImp l K db Command . Query ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġprepare Database (): ĠK db Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( coroutine K db Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk db Lock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Database () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġinit Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Init Complete ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġdb . open () ĊĠĠĠĠĠĠĠ ĠDb Re creating Functions . rebuild Database ( db , Ġdb Def Array , Ġis Debug ) ĊĠĠĠĠĠĠĠ Ġconnection Ġ= ĠImp l K db Connection ( db , Ġis Debug ) ĊĠĠĠĠĠĠĠ Ġis Init Complete Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T Ġ: ĠAny > Ġconnection ( conn : Ġsuspend ĠImp l K db Connection . () Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( coroutine K db Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk db Lock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Init Complete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Database () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . invoke ( connection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġexec ( sql : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec ( sql ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcall ( sql : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall ( sql ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }