/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġkotlin sql . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġlic enced Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe Ġlicense Ġwith Ġthe Ġsource Ġdistribution . Ċ Ġ* ĠAlternatively , Ġyou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . github . pd v rie ze . jdbc . recorder Ċ Ċ import Ġio . github . pd v rie ze . jdbc . recorder . actions .* Ċ import Ġio . github . pd v rie ze . kotlin sql . ddl . Database Ċ import Ġjava . sql .* Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executor Ċ Ċ class ĠRecord ing Connection ( delegate : ĠConnection , Ġval Ġdb : ĠDatabase ? Ġ= Ġnull ) Ġ: ĠWr apping Action Recorder < Connection >( delegate ), ĠConnection Ġ{ ĊĠĠĠ Ġval Ġactions Ġ= Ġmutable ListOf < Action >() Ċ Ċ /* ĊĠĠĠ Ġvar Ġtables : ĠList < Table > Ġ= Ġdb ?. run Ġ{ Ġ_ tables . toList () Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis Closed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġauto Commit Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġnext Save Point Ġ= Ġ 1 Ċ */ ĊĊĠĠĠ Ġoverride Ġfun Ġrecord Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactions . add ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Statement ( sql : ĠString ): ĠPreparedStatement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRecord ing PreparedStatement ( delegate . prepareStatement ( sql ), Ġsql ). also Ġ{ Ġactions . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Statement ( sql : ĠString , ĠresultSet Type : ĠInt , ĠresultSet Concurrency : ĠInt ): ĠPreparedStatement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRecord ing PreparedStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . prepareStatement ( sql , ĠresultSet Type , ĠresultSet Concurrency ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġactions . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Statement ( ĊĠĠĠĠĠĠĠ Ġsql : ĠString , ĊĠĠĠĠĠĠĠ ĠresultSet Type : ĠInt , ĊĠĠĠĠĠĠĠ ĠresultSet Concurrency : ĠInt , ĊĠĠĠĠĠĠĠ ĠresultSet Hold ability : ĠInt ĊĠĠĠ Ġ): ĠPreparedStatement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRecord ing PreparedStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . prepareStatement ( sql , ĠresultSet Type , ĠresultSet Concurrency , ĠresultSet Hold ability ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġactions . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Statement ( sql : ĠString , Ġauto Generated Keys : ĠInt ): ĠPreparedStatement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRecord ing PreparedStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . prepareStatement ( sql , Ġauto Generated Keys ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġactions . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Statement ( sql : ĠString , Ġcolumn Indexes : ĠInt Array ): ĠPreparedStatement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRecord ing PreparedStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . prepareStatement ( sql , Ġcolumn Indexes ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġactions . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Statement ( sql : ĠString , Ġcolumn Names : ĠArray < out ĠString >): ĠPreparedStatement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRecord ing PreparedStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . prepareStatement ( sql , Ġcolumn Names ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġactions . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrollback () Ġ{ ĊĠĠĠĠĠĠĠ Ġactions . add ( Rollback ) ĊĠĠĠĠĠĠĠ Ġdelegate . rollback () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrollback ( save point : ĠSave point ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactions . add ( Rollback ( save point )) ĊĠĠĠĠĠĠĠ Ġdelegate . rollback ( save point ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Hold ability (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord () ĊĠĠĠĠĠĠĠ Ġreturn Ġdelegate . hold ability ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Network Timeout ( executor : ĠExecutor ?, Ġmilliseconds : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( executor , Ġmilliseconds ) ĊĠĠĠĠĠĠĠ Ġdelegate . set Network Timeout ( executor , Ġmilliseconds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcommit () Ġ{ ĊĠĠĠĠĠĠĠ Ġactions . add ( Commit ) ĊĠĠĠĠĠĠĠ Ġdelegate . commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Transaction Isolation ( level : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( level ) ĊĠĠĠĠĠĠĠ Ġdelegate . transaction Isolation Ġ= Ġlevel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Auto Commit ( auto Commit : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactions . add ( Set Auto Commit ( auto Commit )) ĊĠĠĠĠĠĠĠ Ġdelegate . auto Commit Ġ= Ġauto Commit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġabort ( executor : ĠExecutor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( executor ) ĊĠĠĠĠĠĠĠ Ġdelegate . abort ( executor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Call ( sql : ĠString ): ĠCallable Statement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrecord ( sql ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecord ing Callable Statement ( delegate . prepare Call ( sql ), Ġsql ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Call ( sql : ĠString , ĠresultSet Type : ĠInt , ĠresultSet Concurrency : ĠInt ): ĠCallable Statement Ġ= Ġrecord ( sql , ĠresultSet Type , ĠresultSet Concurrency ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRecord ing Callable Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . prepare Call ( sql , ĠresultSet Type , ĠresultSet Concurrency ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Call ( sql : ĠString , ĠresultSet Type : ĠInt , ĠresultSet Concurrency : ĠInt , ĠresultSet Hold ability : ĠInt ): ĠCallable Statement Ġ= ĊĠĠĠĠĠĠĠ Ġrecord ( sql , ĠresultSet Type , ĠresultSet Concurrency , ĠresultSet Hold ability ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecord ing Callable Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . prepare Call ( sql , ĠresultSet Type , ĠresultSet Concurrency , ĠresultSet Hold ability ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsql ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetClient Info ( name : ĠString ?): ĠString Ġ= Ġrecord ( name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . getClient Info ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetClient Info (): ĠProperties Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . client Info ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Auto Commit (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdelegate . auto Commit . also Ġ{ Ġactions . add ( String Action (" get Auto Commit () Ġ-> Ġ$ it ")) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Catalog ( catalog : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( catalog ) ĊĠĠĠĠĠĠĠ Ġdelegate . catalog Ġ= Ġcatalog ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Warnings (): ĠSQL Warning Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . warnings ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Catalog (): ĠString Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . catalog ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Hold ability ( hold ability : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( hold ability ) ĊĠĠĠĠĠĠĠ Ġdelegate . hold ability Ġ= Ġhold ability ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Schema (): ĠString Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . schema ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisValid ( timeout : ĠInt ): ĠBoolean Ġ= Ġrecord ( timeout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . isValid ( timeout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord Action ( Connection Close ) ĊĠĠĠĠĠĠĠ Ġdelegate . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Closed (): ĠBoolean Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . is Closed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate NC lob (): ĠNC lob Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . create NC lob () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Blob (): ĠBlob Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . create Blob () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ArrayOf ( typeName : ĠString ?, Ġelements : ĠArray < out ĠAny >? ): Ġjava . sql . Array Ġ= Ġrecord ( typeName , Ġelements ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . create ArrayOf ( typeName , Ġelements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ReadOnly ( readOnly : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( readOnly ) ĊĠĠĠĠĠĠĠ Ġdelegate . is ReadOnly Ġ= ĠreadOnly ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnative SQL ( sql : ĠString ?): ĠString Ġ= Ġrecord ( sql ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . native SQL ( sql ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Struct ( typeName : ĠString ?, Ġattributes : ĠArray < out ĠAny >? ): ĠStruct Ġ= Ġrecord ( typeName , Ġattributes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . create Struct ( typeName , Ġattributes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Client Info ( name : ĠString ?, Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( name , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġdelegate . set Client Info ( name , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Client Info ( properties : ĠProperties ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( properties ) ĊĠĠĠĠĠĠĠ Ġdelegate . client Info Ġ= Ġproperties ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease Save point ( save point : ĠSave point ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactions . add ( Release Save point ( save point )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate C lob (): ĠC lob Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . create C lob () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis ReadOnly (): ĠBoolean Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . is ReadOnly ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Statement (): ĠStatement Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . createStatement () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Statement ( resultSet Type : ĠInt , ĠresultSet Concurrency : ĠInt ): ĠStatement Ġ= Ġrecord ( resultSet Type , ĠresultSet Concurrency ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . createStatement ( resultSet Type , ĠresultSet Concurrency ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Statement ( resultSet Type : ĠInt , ĠresultSet Concurrency : ĠInt , ĠresultSet Hold ability : ĠInt ): ĠStatement Ġ= Ġrecord ( resultSet Type , ĠresultSet Concurrency , ĠresultSet Hold ability ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . createStatement ( resultSet Type , ĠresultSet Concurrency , ĠresultSet Hold ability ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Save point (): ĠSave point Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . set Save point () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Save point ( name : ĠString ?): ĠSave point Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . set Save point ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType Map (): ĠMutable Map < String , ĠClass <* >> Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . type Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Warnings () Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord () ĊĠĠĠĠĠĠĠ Ġdelegate . clear Warnings () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget MetaData (): ĠDatabase MetaData Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ ĠRecord ing MetaData ( delegate . metaData ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Transaction Isolation (): ĠInt Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . transaction Isolation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Schema ( schema : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( schema ) ĊĠĠĠĠĠĠĠ Ġdelegate . schema Ġ= Ġschema ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Network Timeout (): ĠInt Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . network Timeout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset TypeMap ( map : ĠMutable Map < String , ĠClass <* >> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( map ) ĊĠĠĠĠĠĠĠ Ġdelegate . type Map Ġ= Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate SQL XML (): ĠSQL XML Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . create SQL XML () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Recording Connection (${ db ?. java Class ?. simple Name })" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠRecord ing Callable Statement ( delegate : ĠCallable Statement , Ġsql : ĠString ) Ġ: ĊĠĠĠĠĠĠĠ ĠAbstract Recording Callable Statement ( this , Ġdelegate , Ġsql ), ĠAction Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecord Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . add ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠRecord ing Callable Statement ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjava Class . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Recording Callable Statement (\" $ sql \") " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠRecord ing PreparedStatement ( ĊĠĠĠĠĠĠĠ Ġdelegate : ĠPreparedStatement , ĊĠĠĠĠĠĠĠ Ġsql : ĠString ĊĠĠĠ Ġ) Ġ: ĠAbstract Recording PreparedStatement < PreparedStatement >( this , Ġdelegate , Ġsql ), ĊĠĠĠĠĠĠĠ ĠAction Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecord Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . add ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠRecord ing PreparedStatement ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjava Class . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Recording PreparedStatement (\" $ sql \") " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠRecord ing ResultSet ( ĊĠĠĠĠĠĠĠ Ġdelegate : ĠResultSet , ĊĠĠĠĠĠĠĠ Ġquery : ĠString , ĊĠĠĠĠĠĠĠ Ġcolumns : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġdata : ĠList < Array < out ĠAny ? >> ĊĠĠĠ Ġ) Ġ: ĠAbstract Recording ResultSet ( delegate , Ġquery ), ĠAction Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( delegate : ĠResultSet , Ġquery : ĠString Ġ= Ġ"") Ġ: Ġthis ( delegate , Ġquery , Ġempty Array (), Ġempty List ()) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecord Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . add ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget MetaData (): ĠAbstract Recording Result set MetaData Ġ= Ġrecord Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecord ing Result set Metadata ( delegate . metaData ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠRecord ing Result set Metadata ( delegate : ĠResultSet MetaData ): ĠAbstract Recording Result set MetaData ( delegate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecord Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . add ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠRecord ing MetaData ( delegate : ĠDatabase MetaData ) Ġ: ĠAbstract Recording Database MetaData ( delegate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecord Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . add ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Connection (): ĠRecord ing Connection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Recording Connection ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ