package Ġcom . no z be . water me lon db Ċ Ċ import Ġandroid . database . SQLException Ċ import Ġcom . facebook . react . bridge . React ApplicationContext Ċ import Ġcom . facebook . react . bridge . React Context Base Java Module Ċ import Ġcom . facebook . react . bridge . React Method Ċ import Ġcom . facebook . react . bridge . Promise Ċ import Ġcom . facebook . react . bridge . Readable Array Ċ import Ġcom . facebook . react . bridge . Arguments Ċ import Ġcom . no z be . water me lon db . Database Driver . Operation Ċ Ċ class ĠDatabase Bridge ( private Ġval Ġreact Context : ĠReact ApplicationContext ) Ġ: ĊĠĠĠĠĠĠĠ ĠReact Context Base Java Module ( react Context ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġconnections : ĠMutable Map < Connection Tag , ĠConnection > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ= Ġ" Database Bridge " ĊĊĠĠĠ Ġsealed Ġclass ĠConnection Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠConnected ( val Ġdriver : ĠDatabase Driver ) Ġ: ĠConnection () ĊĠĠĠĠĠĠĠ Ġclass ĠWaiting ( val Ġqueue In Waiting : ĠArrayList < (() Ġ-> ĠUnit ) >) Ġ: ĠConnection () ĊĊĠĠĠĠĠĠĠ Ġval Ġqueue : ĠArrayList < (() Ġ-> ĠUnit )> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnection . Connected Ġ-> Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnection . Waiting Ġ-> Ġthis . queue In Waiting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġinitialize ( ĊĠĠĠĠĠĠĠ Ġtag : ĠConnection Tag , ĊĠĠĠĠĠĠĠ Ġdatabase Name : ĠString , ĊĠĠĠĠĠĠĠ Ġschema Version : ĠInt , ĊĠĠĠĠĠĠĠ Ġpromise : ĠPromise ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( connections [ tag ] Ġ== Ġnull ) Ġ{ Ġ" A Ġdriver Ġwith Ġtag Ġ$ tag Ġalready Ġset Ġup " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpromise Map Ġ= ĠArguments . create Map () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnections [ tag ] Ġ= ĠConnection . Connected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= ĠDatabase Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġreact Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Name Ġ= Ġdatabase Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Version Ġ= Ġschema Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise Map . putString (" code ", Ġ" ok ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . resolve ( promise Map ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠDatabase Driver . Schema Needed Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnections [ tag ] Ġ= ĠConnection . Waiting ( queue In Waiting Ġ= Ġarray ListOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise Map . putString (" code ", Ġ" schema _ needed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . resolve ( promise Map ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠDatabase Driver . Migration Needed Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnections [ tag ] Ġ= ĠConnection . Waiting ( queue In Waiting Ġ= Ġarray ListOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise Map . putString (" code ", Ġ" migrations _ needed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise Map . put Int (" database Version ", Ġe . database Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . resolve ( promise Map ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . reject ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun ĠsetUp With Schema ( ĊĠĠĠĠĠĠĠ Ġtag : ĠConnection Tag , ĊĠĠĠĠĠĠĠ Ġdatabase Name : ĠString , ĊĠĠĠĠĠĠĠ Ġschema : ĠSQL , ĊĠĠĠĠĠĠĠ Ġschema Version : ĠSchema Version , ĊĠĠĠĠĠĠĠ Ġpromise : ĠPromise ĊĠĠĠ Ġ) Ġ= Ġconnect Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Tag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= ĠDatabase Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġreact Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Name Ġ= Ġdatabase Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= ĠSchema ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġschema Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsql Ġ= Ġschema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise Ġ= Ġpromise ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun ĠsetUp With Migrations ( ĊĠĠĠĠĠĠĠ Ġtag : ĠConnection Tag , ĊĠĠĠĠĠĠĠ Ġdatabase Name : ĠString , ĊĠĠĠĠĠĠĠ Ġmigrations : ĠSQL , ĊĠĠĠĠĠĠĠ Ġfrom Version : ĠSchema Version , ĊĠĠĠĠĠĠĠ Ġto Version : ĠSchema Version , ĊĠĠĠĠĠĠĠ Ġpromise : ĠPromise ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Tag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= ĠDatabase Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġreact Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Name Ġ= Ġdatabase Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigrations Ġ= ĠMigration Set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= Ġfrom Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ= Ġto Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsql Ġ= Ġmigrations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpromise Ġ= Ġpromise ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisconnect Driver ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . reject ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġfind ( tag : ĠConnection Tag , Ġtable : ĠTable Name , Ġid : ĠRecord ID , Ġpromise : ĠPromise ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . find ( table , Ġid ) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġquery ( tag : ĠConnection Tag , Ġtable : ĠTable Name , Ġquery : ĠSQL , Ġpromise : ĠPromise ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . cached Query ( table , Ġquery ) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġcount ( tag : ĠConnection Tag , Ġquery : ĠSQL , Ġpromise : ĠPromise ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . count ( query ) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġbatch ( tag : ĠConnection Tag , Ġoperations : ĠRead able Array , Ġpromise : ĠPromise ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . batch ( operations . to Operations Array ()) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġget Deleted Records ( tag : ĠConnection Tag , Ġtable : ĠTable Name , Ġpromise : ĠPromise ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . get Deleted Records ( table ) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġdestroy Deleted Records ( ĊĠĠĠĠĠĠĠ Ġtag : ĠConnection Tag , ĊĠĠĠĠĠĠĠ Ġtable : ĠTable Name , ĊĠĠĠĠĠĠĠ Ġrecords : ĠRead able Array , ĊĠĠĠĠĠĠĠ Ġpromise : ĠPromise ĊĠĠĠ Ġ) Ġ= Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . destroy Deleted Records ( table , Ġrecords . to ArrayList ()) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġunsafe Reset Database ( ĊĠĠĠĠĠĠĠ Ġtag : ĠConnection Tag , ĊĠĠĠĠĠĠĠ Ġschema : ĠSQL , ĊĠĠĠĠĠĠĠ Ġschema Version : ĠSchema Version , ĊĠĠĠĠĠĠĠ Ġpromise : ĠPromise ĊĠĠĠ Ġ) Ġ= Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . unsafe Reset Database ( Schema ( schema Version , Ġschema )) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġget Local ( tag : ĠConnection Tag , Ġkey : ĠString , Ġpromise : ĠPromise ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . getLocal ( key ) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġset Local ( tag : ĠConnection Tag , Ġkey : ĠString , Ġvalue : ĠString , Ġpromise : ĠPromise ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . set Local ( key , Ġvalue ) Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġremove Local ( tag : ĠConnection Tag , Ġkey : ĠString , Ġpromise : ĠPromise ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Driver ( tag , Ġpromise ) Ġ{ Ġit . remove Local ( key ) Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġwith Driver ( ĊĠĠĠĠĠĠĠ Ġtag : ĠConnection Tag , ĊĠĠĠĠĠĠĠ Ġpromise : ĠPromise , ĊĠĠĠĠĠĠĠ Ġfunction : Ġ( Database Driver ) Ġ-> ĠAny ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections [ tag ] Ġ?: Ġpromise . reject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException (" No Ġdriver Ġwith Ġtag Ġ$ tag Ġavailable ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( connection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnection . Connected Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfunction ( connection . driver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . resolve ( if Ġ( result Ġ=== ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnection . Waiting Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtry Ġagain Ġwhen Ġdriver Ġis Ġready ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . queue . add Ġ{ Ġwith Driver ( tag , Ġpromise , Ġfunction ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections [ tag ] Ġ= ĠConnection . Waiting ( connection . queue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSQLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . reject ( function . java Class . enc lo sing Method ?. name , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠRead able Array . to Operations Array (): ĠArrayList < Operation > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprepared Operations Ġ= Ġarray ListOf < Operation >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġthis . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= Ġthis . get Array ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġoperation . getString ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execute " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġoperation . getString ( 1 ) Ġas ĠTable Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġoperation . getString ( 2 ) Ġas ĠSQL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġoperation . get Array ( 3 ). to ArrayList () Ġas ĠQuery Args ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepared Operations . add ( Operation . Execute ( table , Ġquery , Ġargs )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" create " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġoperation . getString ( 1 ) Ġas ĠTable Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġoperation . getString ( 2 ) Ġas ĠRecord ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġoperation . getString ( 3 ) Ġas ĠSQL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġoperation . get Array ( 4 ). to ArrayList () Ġas ĠQuery Args ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepared Operations . add ( Operation . Create ( table , Ġid , Ġquery , Ġargs )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mark As Deleted " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġoperation . getString ( 1 ) Ġas ĠTable Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġoperation . getString ( 2 ) Ġas ĠRecord ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepared Operations . add ( Operation . Mark As Deleted ( table , Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" destroy Per manently " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġoperation . getString ( 1 ) Ġas ĠTable Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġoperation . getString ( 2 ) Ġas ĠRecord ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepared Operations . add ( Operation . Destroy Per manently ( table , Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" set Local " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġval Ġkey Ġ= Ġoperation . getString ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġval Ġvalue Ġ= Ġoperation . getString ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġprepared Operations . add ( Operation . Set Local ( key , Ġvalue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" remove Local " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġval Ġkey Ġ= Ġoperation . getString ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġprepared Operations . add ( Operation . Remove Lo acl ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġ( Throwable (" Bad Ġoperation Ġname Ġin Ġbatch ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass CastException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ( Throwable (" Bad Ġ$ type Ġarguments ", Ġe )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ( Throwable (" Operations Ġshould Ġbe Ġin ĠArray ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprepared Operations ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconnect Driver ( ĊĠĠĠĠĠĠĠ Ġconnection Tag : ĠConnection Tag , ĊĠĠĠĠĠĠĠ Ġdriver : ĠDatabase Driver , ĊĠĠĠĠĠĠĠ Ġpromise : ĠPromise ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= Ġconnections [ connection Tag ]?. queue Ġ?: Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġconnections [ connection Tag ] Ġ= ĠConnection . Connected ( driver ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( operation Ġin Ġqueue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpromise . resolve ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisconnect Driver ( connection Tag : ĠConnection Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= Ġconnections [ connection Tag ]?. queue Ġ?: Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġconnections . remove ( connection Tag ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( operation Ġin Ġqueue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ