package Ġorg . ask chapter . simple jdbc Ċ Ċ import Ġcom . pal ant ir . con jure . java . under tow . lib . Binary ResponseBody Ċ import Ġorg . ask chapter . simple jdbc . api .* Ċ import Ġorg . ask chapter . simple jdbc . download . Av ro Download Writer Ċ import Ġorg . ask chapter . simple jdbc . download . Binary ResponseBody Wrapper Ċ import Ġorg . ask chapter . simple jdbc . download . Csv Download Writer Ċ import Ġorg . ask chapter . simple jdbc . query . Query Execution Ċ import Ġorg . ask chapter . simple jdbc . query . ResultSet Iterator Ċ import Ġjava . util .* Ċ Ċ class ĠSimple Jdbc Resource ( private Ġval Ġdriver Manager : ĠSimple Driver Manager ): ĠSimple Jdbc Service Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġready (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmetadata ( metadata Request : ĠMetadata Request ): ĠMetadata Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġdriver Manager . getConnection ( metadata Request . jdbc Url ) ĊĠĠĠĠĠĠĠ Ġconnection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġconnection . metaData ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMetadata Response . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. product Name ( metadata . database ProductName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. product Version ( metadata . database Product Version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcatalog s ( catalog sRequest : ĠCatalog sRequest ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġdriver Manager . getConnection ( catalog sRequest . jdbc Url ) ĊĠĠĠĠĠĠĠ Ġconnection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠresultSet Ġ= Ġconnection . metaData . catalog s ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResultSet Iterator ( resultSet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getString ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Sequence (). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtables ( tables Request : ĠTables Request ): ĠList < Table > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġdriver Manager . getConnection ( tables Request . jdbc Url ) ĊĠĠĠĠĠĠĠ Ġconnection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠresultSet Ġ= Ġconnection . metaData . get Tables ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtables Request . catalog . orElse ( null ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtables Request . schema Pattern . orElse ( null ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtables Request . table Pattern . orElse ( null ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtables Request . types . map Ġ{ Ġit . to Typed Array () Ġ}. orElse ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResultSet Iterator ( resultSet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= Ġit . getString (" TABLE _ CAT ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġit . getString (" TABLE _ SCH EM ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġit . getString (" TABLE _ NAME ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Locator Builder Ġ= ĠTable Locator . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! catalog . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Locator Builder . catalog ( catalog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! schema . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Locator Builder . schema ( schema ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Locator Ġ= Ġtable Locator Builder . table ( table ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTable . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. type ( it . getString (" TABLE _ TYPE ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. locator ( table Locator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Sequence (). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpreview ( preview Request : ĠPreview Request ): ĠPreview Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġdriver Manager . getConnection ( preview Request . jdbc Url ) ĊĠĠĠĠĠĠĠ Ġconnection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġpreview Request . limit . orElse ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠQuery Execution . executeQuery ( connection , Ġlimit , Ġlimit , Ġpreview Request . query ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPreview Response . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. columns ( result . columns ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addAll Rows ( result . rows . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Sequence (). toList (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Ġ-> Ġrow . map Ġ{ Ġvalue Ġ-> Ġif Ġ( value Ġ!= Ġnull ) ĠOptional . of ( value ) Ġelse ĠOptional . empty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstats ( stats Request : ĠStats Request ): ĠStats Response Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload ( download Request : ĠDownload Request ): ĠBinary ResponseBody Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġdriver Manager . getConnection ( download Request . jdbc Url ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠQuery Execution . executeQuery ( connection , Ġ 1 0 0 0 , Ġnull , Ġdownload Request . query ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġdownload Request . download Options . accept ( object : ĠDownload Options . Visitor < Binary ResponseBody > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Csv ( options : ĠCsv Download Options ): ĠBinary ResponseBody Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCsv Download Writer ( result , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Av ro ( options : ĠAv ro Download Options ): ĠBinary ResponseBody Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAv ro Download Writer ( result , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Unknown ( unknown Type : ĠString ): ĠBinary ResponseBody Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unknown Ġdownload Ġoptions Ġtype Ġ$ unknown Type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn ĠBinary ResponseBody Wrapper ( connection , Ġresponse ) ĊĠĠĠ Ġ} Ċ }