package Ġutils Ċ Ċ import ĠColumn Ċ import ĠEntity Ċ import ĠTable Ċ import Ġjava . sql . ResultSet Ċ import Ġkotlin . reflect . full . create Instance Ċ Ċ internal Ġfun Ġ< E Ġ: ĠEntity > ĠResultSet . getEntity ( table : ĠTable < E >, Ġlazy : ĠBoolean ): ĠE Ġ{ ĊĠĠĠ Ġval Ġentity : ĠE Ġ= Ġtable . entity Class . create Instance () ĊĠĠĠ Ġval Ġcolumn Names Ġ= Ġtable . columns . map Ġ{ Ġit . name Ġ}. to HashSet () ĊĠĠĠ Ġwith ( metaData ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( 1 .. column Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġget TableName ( it ) Ġ== Ġtable . tableName Ġ&& Ġget ColumnName ( it ) Ġin Ġcolumn Names Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġcol Index Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Prop ( entity , Ġtable . columns . first Ġ{ Ġit . name Ġ== Ġget ColumnName ( col Index ) Ġ}, Ġcol Index , Ġlazy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġentity Ċ } Ċ Ċ private Ġfun Ġ< E Ġ: ĠEntity , ĠT > ĠResultSet . set Prop ( entity : ĠE , Ġcolumn : ĠColumn < E , ĠT >, ĠcolumnIndex : ĠInt , Ġlazy : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġprop Ġ= Ġcolumn . property ĊĊĠĠĠ Ġif Ġ( column . ref Table Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcolumn . getValue ( this , ĠcolumnIndex ) Ġas ? ĠInt Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġif Ġ( lazy ) Ġcolumn . ref Table !!. entity Class . create Instance (). apply Ġ{ Ġid Ġ= Ġindex Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġget Entity ( column . ref Table !! , Ġfalse ). also Ġ{ Ġcolumn . ref Table !!. cache . add ( it , Ġtrue ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġprop . set ( entity , Ġobj Ġas ĠT ) ĊĠĠĠ Ġ} Ġelse Ġprop . set ( entity , Ġcolumn . getValue ( this , ĠcolumnIndex )) Ċ } ĊĊ Ċ inline Ġfun Ġ< T > ĠResultSet . map ( func : ĠResultSet . () Ġ-> ĠT ?): ĠList < T > Ġ{ ĊĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < T ?> () ĊĠĠĠ Ġwhile Ġ( next ()) Ġlist . add ( func ( this )) ĊĠĠĠ Ġreturn Ġlist . map NotNull Ġ{ Ġit Ġ} Ċ } Ċ