package Ġcom . b oly art ech . db 2 source Ċ Ċ import Ġorg . apache . commons . lang . Word Utils Ċ import Ġjava . sql . Connection Ċ import Ġjava . sql . SQLException Ċ Ċ class ĠField Extractor ( private Ġval Ġtype Mapper : ĠType Mapper ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠSQL Ġ= ĊĠĠĠĠĠĠĠ Ġ" SELECT Ġcolumn _ name , Ġdata _ type , Ġcharacter _ maximum _ length , Ġnumeric _ precision , Ġis _ nullable ĠFROM ĠINFORMATION _ SCHEMA . columns Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" WHERE Ġtable _ schema Ġ= Ġ? ĠAND Ġtable _ name Ġ= Ġ? " ĊĊĠĠĠ Ġfun Ġextract ( dbc : ĠConnection , Ġschema : ĠString , ĠtableName : ĠString ): ĠField Extract Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= ĠArrayList < Field >() ĊĊĠĠĠĠĠĠĠ Ġval Ġps Load Ġ= Ġdb c . prepareStatement ( SQL ) ĊĠĠĠĠĠĠĠ Ġvar Ġhas Id Column Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġid ColumnType : ĠFieldType ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġps Load . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġps Load . setString ( 1 , Ġschema ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġps Load . setString ( 2 , ĠtableName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps Load . executeQuery (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( it . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . getString ( 1 ) Ġ== Ġ" id ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Id Column Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ColumnType Ġ= Ġtype Mapper . map ( it . getString ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen : ĠLong Ġ= Ġif Ġ( it . getLong ( 3 ) Ġ!= Ġ 0 L ) Ġit . getLong ( 3 ) Ġelse Ġit . getLong ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠField ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getString ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWord Utils . unc ap ital ize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWord Utils . capitalize ( it . getString ( 1 ), Ġchar ArrayOf ('_ ')). replace ("_ ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Mapper . map ( it . getString ( 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getString ( 5 ) Ġ== Ġ" YES " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠField Extract Result Error (" Cannot Ġmap Ġ'${ it . getString ( 2 )} '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSQLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠField Extract Result Error ( e . message Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠField Extract Result Ok ( fields , Ġhas Id Column , Ġid ColumnType ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠField Extract Result Ċ data Ġclass ĠField Extract Result Ok ( val Ġfields : ĠList < Field >, Ġval Ġhas Id : ĠBoolean , Ġval Ġid Type : ĠFieldType ?) Ġ: ĊĠĠĠ ĠField Extract Result () Ċ Ċ class ĠField Extract Result Error ( val Ġreason : ĠString ) Ġ: ĠField Extract Result ()