package Ġio . pro venance . digital currency . con sort ium . domain Ċ Ċ import Ġcom . zaxxer . hikari . HikariConfig Ċ import Ġcom . zaxxer . hikari . Hikari DataSource Ċ import Ġio . pro venance . digital currency . con sort ium . config . logger Ċ import Ġorg . jetbrains . ex posed . sql . Column Ċ import Ġorg . jetbrains . ex posed . sql . ColumnType Ċ import Ġorg . jetbrains . ex posed . sql . Table Ċ import Ġjava . sql . Connection Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . time . Zone Id Ċ import Ġjavax . sql . DataSource Ċ Ċ class ĠH ikari DataSource Builder Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġprefix : ĠString Ġ= Ġ" jdbc " ĊĠĠĠ Ġprivate Ġvar Ġhostname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġport : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġschema : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġusername : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpassword : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġconnection PoolSize : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġproperties : ĠMutable Map < String , ĠString > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġval Ġshutdown Hooks : ĠMutable List < Runnable > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfun Ġprefix ( prefix : ĠString ): ĠH ikari DataSource Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . prefix Ġ= Ġprefix ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhostname ( hostname : ĠString ): ĠH ikari DataSource Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . hostname Ġ= Ġhostname ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġport ( port : ĠInt ): ĠH ikari DataSource Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . port Ġ= Ġport ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġname ( name : ĠString ): ĠH ikari DataSource Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġschema ( schema : ĠString ): ĠH ikari DataSource Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . schema Ġ= Ġschema ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġusername ( username : ĠString ): ĠH ikari DataSource Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . username Ġ= Ġusername ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpassword ( password : ĠString ): ĠH ikari DataSource Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . password Ġ= Ġpassword ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnection PoolSize ( connection PoolSize : ĠInt ): ĠH ikari DataSource Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . connection PoolSize Ġ= Ġconnection PoolSize ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠDataSource Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠH ikariConfig () ĊĊĠĠĠĠĠĠĠ Ġconfig . jdbc Url Ġ= Ġ"${ this . prefix }: postgresql ://${ this . hostname }:${ this . port }/${ this . name }? prepare Threshold = 0 " ĊĠĠĠĠĠĠĠ Ġconfig . username Ġ= Ġthis . username ĊĠĠĠĠĠĠĠ Ġconfig . password Ġ= Ġthis . password ĊĠĠĠĠĠĠĠ Ġif Ġ( this . schema Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . schema Ġ= Ġthis . schema ĊĠĠĠĠĠĠĠ Ġthis . properties . forEach Ġ{ Ġconfig . add DataSource Property ( it . key , Ġit . value ) Ġ} ĊĠĠĠĠĠĠĠ Ġconnection PoolSize ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminimum Idle Ġ= Ġthis . div ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . minimum Idle Ġ= Ġif Ġ( minimum Idle Ġ> Ġ 0 ) Ġminimum Idle Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . maximum PoolSize Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠShutdown Hook Hikari DataSource ( shutdown Hooks , Ġconfig ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠShutdown Hook Hikari DataSource ( private Ġval Ġshutdown Hooks : ĠList < Runnable >, Ġconfig : ĠH ikariConfig ) Ġ: ĊĠĠĠ ĠH ikari DataSource ( config ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġshutdown Hooks . forEach ( Runnable :: run ) ĊĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Connection (): ĠConnection Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger (). debug (" Fetching Ġdb Ġconnection Ġfrom Ġthread Ġ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . getConnection () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠTable > ĠT . offset Datetime ( name : ĠString ): ĠColumn < Offset DateTime > Ġ= ĊĠĠĠ Ġregister Column ( name , ĠOffset DateTime ColumnType ()) Ċ Ċ class ĠOffset DateTime ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġ" TIMESTAMP TZ " ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠAny Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Ġjava . sql . Date Ġ-> ĠOffset DateTime . of Instant ( value . to Instant (), ĠZone Id . system Default ()) ĊĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> ĠOffset DateTime . of Instant ( value . to Instant (), ĠZone Id . system Default ()) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠ Ġ} Ċ } Ċ