package Ġno . ank soft . p gin mem Ċ Ċ import Ġjava . sql . SQLException Ċ import Ġjava . util . concurrent . Concurrent HashMap ĊĊ Ċ fun Ġstrip Se ach Name ( search Name : String ): String Ġ{ ĊĠĠĠ Ġvar Ġactual Name : String Ġ= Ġsearch Name ĊĠĠĠ Ġactual Name Ġ= Ġactual Name . indexOf (". "). let Ġ{ Ġif Ġ( it Ġ== Ġ- 1 ) Ġactual Name Ġelse Ġactual Name . substring ( it + 1 ) Ġ} ĊĠĠĠ Ġif Ġ( actual Name . startsWith ("\ "" )) Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Name Ġ= Ġactual Name . substring ( 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( actual Name . endsWith ("\ "" )) Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Name Ġ= Ġactual Name . substring ( 0 , actual Name . length - 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġactual Name Ċ } Ċ Ċ class ĠDb Store Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtables : Mutable Map < String , Table > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġval Ġsequences : Mutable Map < String , Sequence > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġval Ġlocked Tables : Concurrent HashMap < String , String > Ġ= ĠConcurrent HashMap () ĊĊĠĠĠ Ġfun Ġcreate Alter Table Setup ( table : ĠTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtables [ table . name ] Ġ= Ġtable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Table ( table : ĠTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocked Tables . remove ( table . name ) ĊĠĠĠĠĠĠĠ Ġtables . remove ( table . name ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġfind Table ( tablename : String ): Table ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtables [ strip Se ach Name ( tablename )] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtable For Update ( name : String ): Table ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġfind Table ( name ) ?: return Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( locked Tables [ table . name ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError (" Wait Ġfor Ġlock Ġnot Ġimplemented Ġfor Ġtable Ġ${ table . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlocked Tables [ table . name ] Ġ= Ġtable . name ĊĠĠĠĠĠĠĠ Ġreturn Ġtable . clone () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġtable For Read ( name : String ): Table Ġ= Ġfind Table ( name ) ?: throw ĠSQLException (" Unknown Ġtable Ġ$ name ") ĊĊĠĠĠ Ġfun Ġcreate Connection (): Db Connection Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDb Connection ( Db Transaction ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Table Content ( table : ĠTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtables [ table . name ] Ġ= Ġtable ĊĠĠĠĠĠĠĠ Ġlocked Tables . remove ( table . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease Lock ( tablename : String ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocked Tables . remove ( tablename ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsequence ( name : ĠString ): Sequence Ġ= Ġsequences [ name ] ?: throw ĠSQLException (" Unknown Ġsequence Ġ$ name ") ĊĊĠĠĠ Ġfun Ġadd Sequence ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sequences [ name ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Sequence Ġ$ name Ġalready Ġex s ists ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsequences [ name ] Ġ= ĠSequence ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Sequence ( sequence : ĠSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsequences [ sequence . name ] Ġ= ĠSequence ( sequence . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdoes Table Ex s ist ( tablename : ĠString ): ĠBoolean Ġ= Ġ( tables [ tablename ] Ġ!= Ġnull ) ĊĊ Ċ }