package Ġde . fl ap do od le . sq lex tract . jdbc Ċ Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . sql . JDBC Type Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . util .* Ċ import Ġkotlin . reflect . K Class Ċ Ċ object ĠColumn Type Converters Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmap Ġ= ĠMap Builder () ĊĠĠĠĠĠĠĠ Ġ. add ( JDBC Type . INTEGER , ĠInt :: class , ĠResultSet :: getInt ) ĊĠĠĠĠĠĠĠ Ġ. add ( JDBC Type . NUMERIC , ĠInt :: class , ĠResultSet :: getInt ) ĊĠĠĠĠĠĠĠ Ġ. add ( JDBC Type . INTEGER , ĠBigDecimal :: class , ĠResultSet :: get BigDecimal ) ĊĠĠĠĠĠĠĠ Ġ. add ( JDBC Type . VARCHAR , ĠString :: class , ĠResultSet :: getString ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġfun Ġ< T : ĠAny > Ġconverter ( jdbc Type : ĠJDBC Type , Ġtype : ĠK Class < T >): Ġ( ResultSet , ĠString ) Ġ-> T ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( type == Object :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ{ ĠresultSet , Ġcolumn Ġ-> ĠresultSet . getObject ( column ) Ġas ĠT ? Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġconverter Ġ= Ġmap [ jdbc Type Ġto Ġtype ] ĊĠĠĠĠĠĠĠ Ġrequire ( converter != null ) Ġ{" could Ġnot Ġfind Ġconverter Ġfor Ġ$ jdbc Type Ġ-> Ġ$ type "} ĊĠĠĠĠĠĠĠ Ġreturn Ġconverter . converter Ġas Ġ( ResultSet , ĠString ) Ġ-> ĠT ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠMap Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġmap = Ġempty Map < Pair < JDBC Type , ĠK Class <* >>, ĠColumn Type Converter <* >>() ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T : ĠAny > Ġadd ( jdbc Type : ĠJDBC Type , Ġtype : ĠK Class < T >, Ġconverter : Ġ( ResultSet , ĠString ) Ġ-> ĠT ?): ĠMap Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ= Ġmap Ġ+ Ġ(( jdbc Type Ġto Ġtype ) Ġto ĠColumn Type Converter ( jdbc Type , type , converter )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠMap < Pair < JDBC Type , ĠK Class <* >>, ĠColumn Type Converter <* >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }