package Ġai . plat on . pulsar . ql Ċ Ċ import Ġai . plat on . pulsar . common . sql . ResultSet Formatter Ċ import Ġai . plat on . pulsar . common . sql . SQL Template Ċ import Ġai . plat on . pulsar . ql . h 2 . addColumn Ċ import Ġai . plat on . pulsar . ql . h 2 . utils . ResultSet Utils Ċ import Ġorg . h 2 . value . Value String Ċ import Ġorg . junit . Test Ċ import Ġjava . sql . Types Ċ import Ġkotlin . test . assertEquals Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġvin cent Ġon Ġ 1 7 - 7 - 2 9 . Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 3 - 2 0 1 7 ĠPl aton ĠAI . ĠAll Ġrights Ġreserved Ċ Ġ*/ Ċ class ĠTest ResultSet Utils Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ResultSet Formatter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrs Ġ= ĠResult Sets . new Simple ResultSet () ĊĠĠĠĠĠĠĠ Ġrs . addColumn (" A ", ĠTypes . DOUBLE , Ġ 6 , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġrs . addColumn (" B ") ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠarrayOf ( 0 . 8 0 5 6 4 9 9 9 5 1 6 2 6 7 5 4 , Ġ 0 . 5 2 5 9 6 7 3 9 7 5 7 5 6 3 9 7 , Ġ 0 . 8 6 9 1 8 8 4 0 5 7 2 3 , Ġ 0 . 4 1 4 0 6 2 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠarrayOf (" a ", Ġ" b ", Ġ" c ", Ġ" d ") ĊĠĠĠĠĠĠĠ Ġa . zip ( b ). map Ġ{ ĠarrayOf ( it . first , Ġit . second ) Ġ}. forEach Ġ{ Ġrs . add Row (* it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfmt Ġ= ĠResultSet Formatter ( rs ) ĊĠĠĠĠĠĠĠ Ġprintln ( fmt . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Extract Url From From Clause () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurls Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// amazon . com / a / reviews / 1 2 3 ? pageNumber = 2 1 & a = b ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" https :// www . amazon . com / s ? k =" Bo ys ^ 2 7 + No vel ty + B elt + Bu ck les "& rh = n : 9 0 5 7 1 1 9 0 1 1 & page = 1 """, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" https :// www . amazon . com / s ? k =" Bo ys % 2 7 + No vel ty + B elt + Bu ck les "& rh = n : 9 0 5 7 1 1 9 0 1 1 & page = 1 """, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" https :// www . amazon . com / s ? k =" Bo ys % 2 7 + No vel ty + B elt + Bu ck les "& rh = n : 9 0 5 7 1 1 9 0 1 1 & page = 1 Ġ- i Ġ 1 h Ġ- retry """ ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsql Templates Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Ġdom _ first _ text ( dom , Ġ'# container '), Ġdom _ first _ text ( dom , Ġ'. price ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġload _ and _ select (@ url , Ġ': root Ġbody '); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Ġdom _ first _ text ( dom , Ġ'# container '), Ġdom _ first _ text ( dom , Ġ'. price ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġload _ and _ select ( ĠĠĠĠ Ġ@ url , Ġ': root Ġbody '); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Ġdom _ first _ text ( dom , Ġ'# container '), Ġdom _ first _ text ( dom , Ġ'. price ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġload _ and _ select ( ĠĠĠĠ Ġ@ url ĠĠĠĠ Ġ, Ġ': root Ġbody '); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Ġdom _ first _ text ( dom , Ġ' div : contains ( https :// www . amazon . com /) '), Ġdom _ first _ text ( dom , Ġ'. price ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĠLOAD _ AND _ SELECT ( ĠĠĠĠ Ġ@ url ĠĠĠĠ Ġ, Ġ': root Ġbody '); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġit . trim Indent () Ġ} ĊĊĠĠĠĠĠĠĠ Ġurls . forEach Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql Templates . map Ġ{ Ġtemplate Ġ-> ĠSQL Template ( template ). create SQL ( url ) Ġ}. forEach Ġ{ Ġsql Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Url Ġ= ĠResultSet Utils . extract Url From From Clause ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( url , Ġactual Url , Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Transpose () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrs Ġ= ĠResult Sets . new Simple ResultSet () ĊĠĠĠĠĠĠĠ Ġval Ġcolumn Count Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġval Ġtransp osed RowCount Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ ĠInt Range ( 1 , Ġcolumn Count ). map Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . addColumn (" C $ i ", ĠTypes . ARRAY , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrow Ġ= ĠInt Range ( 1 , Ġcolumn Count ). map Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Range ( 1 , Ġtransp osed RowCount ). map Ġ{ Ġj Ġ-> ĠValue String . get (" C ${ i } R $ j ") Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġrs . add Row (* row ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rs . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġ"' C 1 R 1 ', Ġ' C 1 R 2 ', Ġ' C 1 R 3 ', Ġ' C 1 R 4 ', Ġ' C 1 R 5 ', Ġ' C 1 R 6 ', Ġ' C 1 R 7 ', Ġ' C 1 R 8 ', Ġ' C 1 R 9 ', Ġ' C 1 R 1 0 '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġrs . get Array (" C 1 "). array Ġas ĠArray < Any > ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( c 1 , Ġarray . join ToString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrs . before First () ĊĠĠĠĠĠĠĠ Ġprintln ( ResultSet Formatter ( rs , Ġwith Header Ġ= Ġtrue ). toString ()) ĊĊĠĠĠĠĠĠĠ Ġrs . before First () ĊĠĠĠĠĠĠĠ Ġval Ġnew Rs Ġ= ĠResultSet Utils . transpose ( rs ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( rs . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ i ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" C ${ i } R ${ i }", Ġrs . getString (" C 1 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( ResultSet Formatter ( new Rs , Ġwith Header Ġ= Ġtrue ). toString ()) ĊĠĠĠ Ġ} Ċ } Ċ