package Ġio . ze ko . db . sql Ċ Ċ import Ġio . ze ko . db . sql . dsl .* Ċ import Ġio . ze ko . db . sql . operators .* Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠQuery Fun Call Spec Ġ: ĠSpe k ({ ĊĊĠĠĠ Ġfun Ġdebug ( msg : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( false ) Ġprintln ( msg . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" Query ĠBuilder ĠFunction ĠCall Ġtest ") Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" Given Ġone Ġtable Ġselect Ġstatement ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġfields Ġand Ġwhere Ġcondition ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( eq (" name "," B at ĠMan ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġuser ĠWHERE Ġname Ġ= Ġ?", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġwhere Ġcondition Ġfield Ġvalue ĠIN Ġa Ġlist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ids Ġ= ĠlistOf ( 1 , Ġ 1 2 , Ġ 1 8 , Ġ 2 5 , Ġ 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( in List (" id ", Ġ Ġuser Ids )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġuser ĠWHERE Ġid ĠIN Ġ( ?,?, ?,?, ? )", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġwhere Ġcondition Ġfield Ġvalue ĠIN Ġa Ġstring Ġlist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Ġ= ĠlistOf (" L eng ", Ġ" B at 's ĠMan ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( in List (" name ", Ġ Ġnames )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġuser ĠWHERE Ġname ĠIN Ġ( ?, ? )", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġwhere Ġcondition Ġfield Ġvalue ĠIN Ġa Ġlist ( non - parameter ized )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( in List (" id ", ĠlistOf ( 1 , Ġ 1 2 , Ġ 1 8 , Ġ 2 5 , Ġ 5 5 ), Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġuser ĠWHERE Ġid ĠIN Ġ( 1 , 1 2 , 1 8 , 2 5 , 5 5 )", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġwhere Ġcondition Ġfield Ġvalue ĠIN Ġa Ġstring Ġlist Ġ( non - parameter ized )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( in List (" name ", Ġ ĠlistOf (" L eng ", Ġ" B at 's ĠMan "), Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġuser ĠWHERE Ġname ĠIN Ġ(' L eng ',' B at '' s ĠMan ') ", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġfields Ġand Ġmultiple Ġwhere Ġconditions ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" name ", Ġ" B at ĠMan "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgreater (" id ", Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub ( like (" name ", Ġ Ġ"% bat ") Ġor Ġlike (" name ", Ġ Ġ" man % ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis NotNull (" nickname ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġuser ĠWHERE Ġname Ġ= Ġ? ĠAND Ġid Ġ> Ġ 1 ĠAND Ġ( Ġname ĠLIKE Ġ? ĠOR Ġname ĠLIKE Ġ? Ġ) ĠAND Ġnickname ĠIS ĠNOT ĠNULL ", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġmultiple Ġwhere Ġconditions Ġwith Ġraw Ġstring Ġvalues ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ", Ġ" nickname ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" name ", Ġ" nickname ", Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgreater (" id ", ĠĠ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlike (" name ", Ġ"% bat ", Ġtrue ) Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlike (" name ", Ġ" man %", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage , Ġnickname ĠFROM Ġuser ĠWHERE Ġname Ġ= Ġnickname ĠAND Ġid Ġ> Ġ 1 ĠAND Ġ( Ġname ĠLIKE Ġ'% bat ' ĠOR Ġname ĠLIKE Ġ' man %' Ġ) ", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġsub Ġquery ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery (). fields ("* "). from (" user "). where ( less (" age ", Ġ 5 0 )). limit ( 1 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( like (" name ", Ġ Ġ" B at ĠMan ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġ( SELECT Ġ* ĠFROM Ġuser ĠWHERE Ġage Ġ< Ġ 5 0 ĠLIMIT Ġ 1 0 ĠOFFSET Ġ 0 ) ĠWHERE Ġname ĠLIKE Ġ?", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġbetween Ġwhere Ġconditions Ġof Ġnumbers ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" name ", Ġ" B at ĠMan "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbetween (" age ", Ġ 1 0 , Ġ 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġuser ĠWHERE Ġname Ġ= Ġ? ĠAND Ġage ĠBETWEEN Ġ 1 0 ĠAND Ġ 5 0 ", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġbetween Ġwhere Ġconditions Ġof Ġstrings ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields (" id ", Ġ" name ", Ġ" age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbetween (" name ", Ġ" a ", Ġ" z ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġid , Ġname , Ġage ĠFROM Ġuser ĠWHERE Ġname ĠBETWEEN Ġ? ĠAND Ġ?", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġfull text Ġsearch ( MySQL )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields ("* "). from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( match (" name ", Ġ Ġ" s mit ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġ* ĠFROM Ġuser ĠWHERE ĠMATCH ( Ġname Ġ) ĠA GA INST Ġ( Ġ? ĠIN ĠN ATUR AL ĠLANGUAGE ĠMODE Ġ) ", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġsql Ġwith Ġfull text Ġsearch ( MySQL ) Ġtwo Ġcolumns ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠQuery (). fields ("* "). from (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( match ( listOf (" name ", Ġ" nickname "), Ġ Ġ" s mit ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SELECT Ġ* ĠFROM Ġuser ĠWHERE ĠMATCH ( Ġname , nickname Ġ) ĠA GA INST Ġ( Ġ? ĠIN ĠN ATUR AL ĠLANGUAGE ĠMODE Ġ) ", Ġsql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ