package Ġbr . com . d ill mann . rest db . domain . data . get . page Ċ Ċ import Ġbr . com . d ill mann . rest db . core . filter Dsl . jdbc . Jdbc Predicate Ċ import Ġbr . com . d ill mann . rest db . core . jdbc . Connection Pool Ċ import Ġbr . com . d ill mann . rest db . domain . data . get . page . jdbc . Sql Builder Ċ import Ġbr . com . d ill mann . rest db . domain . data . get . page . jdbc . escape Sql Ċ import Ġbr . com . d ill mann . rest db . domain . data . get . page . sorting . Sort Column Ċ import Ġbr . com . d ill mann . rest db . domain . data . utils . auto Convert Array Ċ import Ġbr . com . d ill mann . rest db . domain . data . utils . set Raw Parameter Ċ import Ġbr . com . d ill mann . rest db . domain . data . validate Partition And TableName Ċ import Ġbr . com . d ill mann . rest db . domain . metadata . resolver . Metadata Resolver Factory Ċ import Ġjava . sql . Connection Ċ import Ġjava . sql . PreparedStatement Ċ import Ġjava . sql . ResultSet Ċ Ċ /** Ċ Ġ* ĠExec utes Ġa ĠSELECT Ġoperation Ġin Ġdatabase Ġprovided Ġ[ partition Name ] Ġand Ġ[ tableName ] Ġusing Ġa Ġpag inated Ġstrategy Ċ Ġ* Ċ Ġ* Ġ@ param Ġpartition Name ĠPartition Ġname Ċ Ġ* Ġ@ param ĠtableName ĠTable Ġname Ċ Ġ* Ġ@ param Ġpage Number ĠPage Ġnumber , Ġstarting Ġat Ġ 0 Ċ Ġ* Ġ@ param ĠpageSize ĠPage Ġsize Ġ( how Ġmuch Ġrows Ġper Ġpage ) Ċ Ġ* Ġ@ param Ġsorting ĠSort ing Ġinstructions Ċ Ġ* Ġ@ param Ġprojection ĠColumn Ġnames Ġto Ġbe Ġreturned Ġfrom Ġdatabase Ċ Ġ* Ġ@ param Ġfilter ĠRow Ġfiltering Ġinstructions Ċ Ġ* Ġ@ author ĠLuc as ĠD ill mann Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 , Ġ 2 0 2 0 - 0 3 - 2 7 Ċ Ġ*/ Ċ fun Ġfind Page ( ĊĠĠĠ Ġpartition Name : ĠString , ĊĠĠĠ ĠtableName : ĠString , ĊĠĠĠ Ġpage Number : ĠLong , ĊĠĠĠ ĠpageSize : ĠLong , ĊĠĠĠ Ġsorting : ĠSet < Sort Column > ?, ĊĠĠĠ Ġprojection : ĠSet < String > ?, ĊĠĠĠ Ġfilter : ĠJdbc Predicate ? Ċ ): ĠPage Ġ{ ĊĠĠĠ Ġreturn ĠConnection Pool . start Connection (). use Ġ{ Ġconnection Ġ-> ĊĠĠĠĠĠĠĠ Ġvalidate Partition And TableName ( connection , Ġpartition Name , ĠtableName ) ĊĠĠĠĠĠĠĠ Ġval Ġall Columns Ġ= ĠMetadata Resolver Factory . build (). find Table Columns ( connection , Ġpartition Name , ĠtableName ). keys ĊĠĠĠĠĠĠĠ Ġval Ġ( page Sql , Ġcount Sql , Ġparameters ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSql Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection , Ġpartition Name , ĠtableName , Ġall Columns , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpageSize , Ġpage Number , Ġprojection , Ġsorting , Ġfilter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġtotal Count Ġ= Ġconnection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepareStatement ( count Sql , Ġparameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. executeQuery () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getLong (" count ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġconnection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepareStatement ( page Sql , Ġparameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. executeQuery () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Results ( projection Ġ?: Ġall Columns ) ĊĊĠĠĠĠĠĠĠ ĠPage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpartition Name Ġ= Ġpartition Name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtableName Ġ= ĠtableName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Number Ġ= Ġpage Number , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpageSize Ġ= ĠpageSize , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Count Ġ= Ġtotal Count Ġ/ ĠpageSize Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Elements Count Ġ= Ġresults . size . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Elements Count Ġ= Ġtotal Count , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Page Ġ= Ġpage Number Ġ== Ġ 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Page Ġ= ĠpageSize Ġ* Ġ( pageNumber Ġ+ Ġ 1 ) Ġ>= Ġtotal Count , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Ġ= Ġsorting Ġ?: Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprojection Ġ= Ġprojection Ġ?: Ġall Columns , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements Ġ= Ġresults ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ PreparedStatement ] Ġusing Ġprovided Ġ[ sql ] Ġand Ġ[ parameters ] Ċ Ġ* Ċ Ġ* Ġ@ author ĠLuc as ĠD ill mann Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 , Ġ 2 0 2 0 - 0 3 - 2 7 Ċ Ġ*/ Ċ private Ġfun ĠConnection . prepareStatement ( sql : ĠString , Ġparameters : ĠMap < Int , ĠAny ?> ): ĠPreparedStatement Ġ= ĊĠĠĠ Ġprepare Statement ( sql ) ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġstatement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . forEach Ġ{ Ġ( position , Ġvalue ) Ġ-> Ġstatement . set Raw Parameter ( position , Ġvalue ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ private Ġfun Ġ< T > ĠCollection < T >. as Array Expression (): ĠString Ġ= ĊĠĠĠ Ġjoin ToString ( prefix Ġ= Ġ"[", Ġpostfix Ġ= Ġ" ]", Ġseparator Ġ= Ġ", ") Ġ{ Ġit . toString (). escape Sql () Ġ} Ċ Ċ /** Ċ Ġ* ĠReads Ġall Ġresults Ġfrom Ġa Ġ[ ResultSet ] Ġusing Ġprovided Ġcolumn Ġnames Ġand Ġreturns Ġit Ċ Ġ* Ċ Ġ* Ġ@ param Ġprojection ĠColumn Ġnames Ġto Ġbe Ġread Ċ Ġ* Ġ@ author ĠLuc as ĠD ill mann Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 , Ġ 2 0 2 0 - 0 3 - 2 7 Ċ Ġ*/ Ċ private Ġfun ĠResultSet . get Results ( projection : ĠSet < String >): ĠList < Map < String , ĠAny ? >> Ġ{ ĊĠĠĠ Ġreturn Ġuse Ġ{ ĠresultSet Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġmutable ListOf < Map < String , ĠAny ? >>() ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( resultSet . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġ+= ĠresultSet . read Columns ( projection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresults ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReads Ġa Ġsingle Ġresult Ġfrom Ġa Ġ[ ResultSet ] Ġusing Ġprovided Ġcolumn Ġnames Ċ Ġ* Ċ Ġ* Ġ@ param Ġcolumns ĠColumn Ġnames Ġto Ġbe Ġread Ċ Ġ* Ġ@ author ĠLuc as ĠD ill mann Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 , Ġ 2 0 2 0 - 0 3 - 2 7 Ċ Ġ*/ Ċ private Ġfun ĠResultSet . read Columns ( columns : ĠSet < String >): ĠMap < String , ĠAny ?> Ġ= ĊĠĠĠ Ġcolumns . map Ġ{ Ġit Ġto ĠgetObject ( it ). auto Convert Array () Ġ}. toMap () ĊĊĊĊ