package Ġbenchmark Ċ Ċ import Ġcom . github . j async . sql . db . Connection Ċ import Ġcom . github . j async . sql . db . ResultSet Ċ import Ġcom . github . j async _ sql _ extensions . map To Ċ import Ġcom . github . j async _ sql _ extensions . mapper . reflection . Reflection Mapper Ċ import Ġcom . github . j async _ sql _ extensions . send PreparedStatement Ċ import Ġextension . Postgres Extension Ċ import Ġorg . apache . commons . lang 3 . Random StringUtils Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Tag Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġjava . util . stream . Long Stream Ċ import Ġkotlin . streams . toList Ċ Ċ @ Tag (" benchmark ") Ċ @ Extend With ( Postgres Extension :: class ) Ċ class ĠMapping Benchmark Ġ{ ĊĠĠĠ Ġdata Ġclass ĠUser ( val Ġid : ĠLong , Ġval Ġname : ĠString , Ġval Ġshort Name : ĠString ?) ĊĊĠĠĠ Ġvar Ġusers : ĠList < User > Ġ= ĠlistOf () ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġprepare ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . send Query (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE Ġ" user " Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ĠBIG SERIAL ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname ĠVARCHAR ( 1 2 8 ) ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshort _ name ĠVARCHAR ( 1 2 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY Ġ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ""" ). get () ĊĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 5 0 0 0 0 0 L ĊĠĠĠĠĠĠĠ Ġusers Ġ= ĠLong Stream . range ( 1 , Ġamount ). map To Obj Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ( it , ĠRandom StringUtils . random Alphabet ic ( 6 4 ), ĠRandom StringUtils . random Alphabet ic ( 6 4 )) ĊĠĠĠĠĠĠĠ Ġ}. toList () ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġusers . chunk ed ( 4 0 9 6 ). map Ġ{ Ġuser Chunk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . append (" INSERT ĠINTO Ġ\" user \" Ġ( id , Ġname , Ġshort _ name ) ĠVALUES Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . append ( user Chunk . map Indexed Ġ{ Ġindex , Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" (: user $ index . id , Ġ: user $ index . name , Ġ: user $ index . short Name )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join ToString ("," )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . append ("; ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . send PreparedStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Chunk . map Indexed Ġ{ Ġindex , Ġuser Ġ-> Ġ" user $ index " Ġto Ġuser Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġit . get () Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" Insert Ġof Ġ$ amount Ġusers Ġtook : Ġ${ System . currentTimeMillis () Ġ- Ġtime Millis }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Map ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠresultSet Ġ= Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġ" user " ĠORDER ĠBY Ġid ĊĠĠĠĠĠĠĠ Ġ""" ). get (). rows ĊĊĠĠĠĠĠĠĠ Ġusers . zip ( map Manual ( resultSet )). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( it . first , Ġit . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġusers . zip ( map Reflection ( resultSet )). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( it . first , Ġit . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġusers . zip ( map ASM Col d ( resultSet )). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( it . first , Ġit . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġusers . zip ( map ASM Hot ( resultSet )). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( it . first , Ġit . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmap Manual ( resultSet : ĠResultSet ): ĠList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= ĠresultSet . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ( it . getLong ( 0 ) !! , Ġit . getString ( 1 ) !! , Ġit . getString ( 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" Manual Ġmapping Ġof Ġthe Ġselect Ġtook : Ġ${ System . currentTimeMillis () Ġ- Ġtime Millis }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġusers ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmap Reflection ( resultSet : ĠResultSet ): ĠList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= ĠReflection Mapper ( User :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġmapper . map ( resultSet ) ĊĠĠĠĠĠĠĠ Ġprintln (" Reflection Ġmapping Ġof Ġthe Ġselect Ġtook : Ġ${ System . currentTimeMillis () Ġ- Ġtime Millis }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġusers . as Sequence (). toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmap ASM Col d ( resultSet : ĠResultSet ): ĠList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= ĠresultSet . map To < User >() ĊĠĠĠĠĠĠĠ Ġprintln (" Col d ĠAS M Ġmapping Ġof Ġthe Ġselect Ġtook : Ġ${ System . currentTimeMillis () Ġ- Ġtime Millis }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġusers ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmap ASM Hot ( resultSet : ĠResultSet ): ĠList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= ĠresultSet . map To < User >() ĊĠĠĠĠĠĠĠ Ġprintln (" Hot ĠAS M Ġmapping Ġof Ġthe Ġselect Ġtook : Ġ${ System . currentTimeMillis () Ġ- Ġtime Millis }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġusers ĊĠĠĠ Ġ} Ċ }