package Ġdev . kom u . ah wen . metadata Ċ Ċ import Ġdev . kom u . ah wen . metadata . Table Manager . Companion . COL _ TABLE _ NAME Ċ import Ġdev . kom u . ah wen . metadata . Table Manager . Companion . TBL _ TABLE _ CAT Ċ import Ġdev . kom u . ah wen . record . Table Info Ċ import Ġdev . kom u . ah wen . record . forEach Ċ import Ġdev . kom u . ah wen . record . getString Ċ import Ġdev . kom u . ah wen . tx . Transaction Ċ import Ġdev . kom u . ah wen . types . TableName Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ import Ġkotlin . concurrent . with Lock Ċ Ċ /** Ċ Ġ* ĠMaint ains Ġstatistics Ġabout Ġtables . Ċ Ġ*/ Ċ class ĠStat Manager ( private Ġval Ġtable Manager : ĠTable Manager , Ġtx : ĠTransaction ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtable Stats Ġ= Ġmutable Map Of < TableName , ĠStat Info >() ĊĠĠĠ Ġprivate Ġvar Ġnum Calls Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠRe entrant Lock () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Statistics ( tx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Stat Info ( tableName : ĠTable Name , Ġti : ĠTable Info , Ġtx : ĠTransaction ): ĠStat Info Ġ{ ĊĠĠĠĠĠĠĠ Ġlock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum Calls ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Calls Ġ> Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Statistics ( tx ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtable Stats . get Or Put ( tableName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc Table Stats ( ti , Ġtx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Statistics ( tx : ĠTransaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable Stats . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum Calls Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt cat Info Ġ= Ġtable Manager . getTable Info ( TBL _ TABLE _ CAT , Ġtx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt cat Info . open ( tx ). use Ġ{ Ġt cat File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt cat File . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= ĠTable Name ( t cat File . getString ( COL _ TABLE _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġti Ġ= Ġtable Manager . getTable Info ( tableName , Ġtx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Stats [ tableName ] Ġ= Ġcalc Table Stats ( ti , Ġtx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalc Table Stats ( ti : ĠTable Info , Ġtx : ĠTransaction ): ĠStat Info Ġ{ ĊĠĠĠĠĠĠĠ Ġlock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum Records Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum Blocks Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġti . open ( tx ). use Ġ{ Ġrf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrf . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Records ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Blocks Ġ= Ġrf . current R id . block Number Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStat Info ( num Blocks , Ġnum Records ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ