/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 0 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġco . touch lab . kn arch . db . sqlite Ċ Ċ import Ġkotlin . test .* Ċ import Ġco . touch lab . kn arch .* Ċ import Ġco . touch lab . kn arch . db .* Ċ import Ġco . touch lab . kn arch . io .* Ċ import Ġco . touch lab . kn arch . db . sqlite .* Ċ Ċ class ĠSQLite QueryBuilder Test Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Database : SQLite Database ĊĠĠĠ Ġprivate Ġval Ġsystem Context Ġ= ĠDefault System Context () ĊĠĠĠ Ġprivate Ġfun ĠgetContext (): System Context Ġ= Ġsystem Context ĊĊĠĠĠ Ġprivate Ġval ĠTEST _ TABLE _ NAME Ġ= Ġ" test " ĊĠĠĠ Ġprivate Ġval ĠEMP LOY EE _ TABLE _ NAME Ġ= Ġ" employee " ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġprotected Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠgetContext (). delete Database ( DATABASE _ FILE ) ĊĠĠĠĠĠĠĠ Ġm Database Ġ= ĠgetContext (). open OrCreate Database ( DATABASE _ FILE , ĠSystem Context . MODE _ PRIVATE , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( m Database ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġprotected Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Database . close () ĊĠĠĠĠĠĠĠ ĠgetContext (). delete Database ( DATABASE _ FILE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Constructor () Ġ{ ĊĠĠĠĠĠĠĠ ĠSQLite QueryBuilder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set Distinct () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsqlite QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Tables ( TEST _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Distinct ( false ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . append Where (" age = 2 0 ") ĊĠĠĠĠĠĠĠ Ġvar Ġsql Ġ= Ġsqlite QueryBuilder . build Query ( array Of < String >(" age ", Ġ" address "), Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( TEST _ TABLE _ NAME , Ġsqlite QueryBuilder . get Tables ()) ĊĠĠĠĠĠĠĠ Ġvar Ġexpected Ġ= Ġ" SELECT Ġage , Ġaddress ĠFROM Ġ" Ġ+ ĠTEST _ TABLE _ NAME Ġ+ Ġ" ĠWHERE Ġ( age = 2 0 )" ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsql ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Tables ( EMP LOY EE _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Distinct ( true ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . append Where (" age > 3 2 ") ĊĠĠĠĠĠĠĠ Ġsql Ġ= Ġsqlite QueryBuilder . build Query ( array Of < String >(" age ", Ġ" address "), Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( EMP LOY EE _ TABLE _ NAME , Ġsqlite QueryBuilder . get Tables ()) ĊĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ" SELECT ĠDISTINCT Ġage , Ġaddress ĠFROM Ġ" Ġ+ ĠEMP LOY EE _ TABLE _ NAME Ġ+ Ġ" ĠWHERE Ġ( age > 3 2 )" ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsql ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Tables ( EMP LOY EE _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Distinct ( true ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . append Where Escape String (" age > 3 2 ") ĊĠĠĠĠĠĠĠ Ġsql Ġ= Ġsqlite QueryBuilder . build Query ( array Of < String >(" age ", Ġ" address "), Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( EMP LOY EE _ TABLE _ NAME , Ġsqlite QueryBuilder . get Tables ()) ĊĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ(" SELECT ĠDISTINCT Ġage , Ġaddress ĠFROM Ġ" Ġ+ ĠEMP LOY EE _ TABLE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠWHERE Ġ(' age > 3 2 ') ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsql ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set Projection Map () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġproject Map Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġproject Map . put (" Employee Name ", Ġ" name ") ĊĠĠĠĠĠĠĠ Ġproject Map . put (" Employee Age ", Ġ" age ") ĊĠĠĠĠĠĠĠ Ġproject Map . put (" Employee Address ", Ġ" address ") ĊĠĠĠĠĠĠĠ Ġvar Ġsqlite QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Tables ( TEST _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Distinct ( false ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Projection Map ( project Map ) ĊĠĠĠĠĠĠĠ Ġvar Ġsql Ġ= Ġsqlite QueryBuilder . build Query ( array Of < String >(" Employee Name ", Ġ" Employee Age "), Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġvar Ġexpected Ġ= Ġ" SELECT Ġname , Ġage ĠFROM Ġ" Ġ+ ĠTEST _ TABLE _ NAME ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsql ) ĊĠĠĠĠĠĠĠ Ġsql Ġ= Ġsqlite QueryBuilder . build Query ( null , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull )// Ġprojection In Ġis Ġnull ĊĠĠĠĠĠĠĠ ĠassertTrue ( sql . matches (( (" SELECT Ġ( age | name | address ), Ġ( age | name | address ), Ġ( age | name | address ) Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" FROM Ġ" Ġ+ ĠTEST _ TABLE _ NAME )). to Regex ())) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sql . contains (" age ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sql . contains (" name ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sql . contains (" address ")) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Projection Map ( null ) ĊĠĠĠĠĠĠĠ Ġsql Ġ= Ġsqlite QueryBuilder . build Query ( array Of < String >(" name ", Ġ" address "), Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sql . matches (( (" SELECT Ġ( name | address ), Ġ( name | address ) Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" FROM Ġ" Ġ+ ĠTEST _ TABLE _ NAME )). to Regex ())) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sql . contains (" name ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sql . contains (" address ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set Cursor Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL ((" CREATE ĠTABLE Ġtest Ġ(_ id ĠINTEGER ĠPRIMARY ĠKEY , Ġ" Ġ+ Ġ" name ĠTEXT , Ġage ĠINTEGER , Ġaddress ĠTEXT ); ")) ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL (" INSERT ĠINTO Ġtest Ġ( name , Ġage , Ġaddress ) ĠVALUES Ġ(' Mi ke ', Ġ' 2 0 ', Ġ' LA '); ") ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL (" INSERT ĠINTO Ġtest Ġ( name , Ġage , Ġaddress ) ĠVALUES Ġ(' jack ', Ġ' 4 0 ', Ġ' LA '); ") ĊĠĠĠĠĠĠĠ Ġvar Ġsqlite QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Tables ( TEST _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠ Ġvar Ġcursor Ġ= Ġsqlite QueryBuilder . query ( m Database , ĠarrayOf < String >(" name ", Ġ" age "), Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( cursor ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( cursor Ġis ĠSQLite Cursor ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġfactory Ġ= Ġobject : SQLite Database . Cursor Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Cursor ( db : SQLite Database , Ġmaster Query : SQLite Cursor Driver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Table : String ?, Ġquery : SQLite Query ): Cursor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMock Cursor ( db , Ġmaster Query , Ġedit Table , Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Cursor Factory ( factory ) ĊĠĠĠĠĠĠĠ Ġcursor Ġ= Ġsqlite QueryBuilder . query ( m Database , ĠarrayOf < String >(" name ", Ġ" age "), Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( cursor ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( cursor Ġis ĠMock Cursor ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġclass ĠMock Cursor ( db : SQLite Database , Ġdriver : SQLite Cursor Driver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Table : String ?, Ġquery : SQLite Query ): SQLite Cursor ( driver , Ġquery ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Build QueryString () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ TEST _ PRO JECTION Ġ= ĠarrayOf < String >(" name ", Ġ" age ", Ġ" sum ( salary )") ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ TEST _ WHERE Ġ= Ġ" age Ġ> Ġ 2 5 " ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ HAV ING Ġ= Ġ" sum ( salary ) Ġ> Ġ 3 0 0 0 " ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= ĠSQLite QueryBuilder . build QueryString ( false , Ġ" Employee ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TEST _ PRO JECTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TEST _ WHERE , Ġ" name ", ĠDEFAULT _ HAV ING , Ġ" name ", Ġ" 1 0 0 ") ĊĠĠĠĠĠĠĠ Ġvar Ġexpected Ġ= Ġ(" SELECT Ġname , Ġage , Ġsum ( salary ) ĠFROM ĠEmployee ĠWHERE Ġ" Ġ+ ĠDEFAULT _ TEST _ WHERE Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠGROUP ĠBY Ġname Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" HAV ING Ġ" Ġ+ ĠDEFAULT _ HAV ING Ġ+ Ġ" Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ORDER ĠBY Ġname Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" LIMIT Ġ 1 0 0 ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsql ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Build Query () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ TEST _ PRO JECTION Ġ= ĠarrayOf < String >(" name ", Ġ" sum ( salary )") ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ TEST _ WHERE Ġ= Ġ" age Ġ> Ġ 2 5 " ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ HAV ING Ġ= Ġ" sum ( salary ) Ġ> Ġ 2 0 0 0 " ĊĠĠĠĠĠĠĠ Ġval Ġsqlite QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Tables ( TEST _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Distinct ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġsqlite QueryBuilder . build Query ( DEFAULT _ TEST _ PRO JECTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TEST _ WHERE , Ġ" name ", ĠDEFAULT _ HAV ING , Ġ" name ", Ġ" 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ(" SELECT Ġname , Ġsum ( salary ) ĠFROM Ġ" Ġ+ ĠTEST _ TABLE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠWHERE Ġ(" Ġ+ ĠDEFAULT _ TEST _ WHERE Ġ+ Ġ") Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GROUP ĠBY Ġname ĠH AV ING Ġ" Ġ+ ĠDEFAULT _ HAV ING Ġ+ Ġ" ĠORDER ĠBY Ġname ĠLIMIT Ġ 2 ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsql ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Append Columns () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= ĠarrayOf < String >(" name ", Ġ" age ") ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġsb . toString ()) ĊĠĠĠĠĠĠĠ ĠSQLite QueryBuilder . append Columns ( sb , Ġcolumns ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" name , Ġage Ġ", Ġsb . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Query () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Employee Table () ĊĠĠĠĠĠĠĠ Ġvar Ġsqlite QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Tables (" Employee ") ĊĠĠĠĠĠĠĠ Ġvar Ġcursor : Cursor ? Ġ= Ġsqlite QueryBuilder . query ( m Database , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < String >(" name ", Ġ" sum ( salary )"), Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ", Ġ" sum ( salary )> 1 0 0 0 ", Ġ" name ") ĊĠĠĠĠĠĠĠ ĠassertNotNull ( cursor !! ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġcursor !!. getCount ()) ĊĠĠĠĠĠĠĠ Ġval ĠCOLUMN _ NAME _ INDEX Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠCOLUMN _ SAL ARY _ INDEX Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcursor !!. moveTo First () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Jim ", Ġcursor . getString ( COLUMN _ NAME _ INDEX )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 5 0 0 , Ġcursor . getInt ( COLUMN _ SAL ARY _ INDEX )) ĊĠĠĠĠĠĠĠ Ġcursor !!. moveTo Next () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Mi ke ", Ġcursor . getString ( COLUMN _ NAME _ INDEX )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 0 0 0 , Ġcursor . getInt ( COLUMN _ SAL ARY _ INDEX )) ĊĠĠĠĠĠĠĠ Ġcursor !!. moveTo Next () ĊĠĠĠĠĠĠĠ ĠassertEquals (" jack ", Ġcursor . getString ( COLUMN _ NAME _ INDEX )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 5 0 0 , Ġcursor . getInt ( COLUMN _ SAL ARY _ INDEX )) ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġsqlite QueryBuilder . set Tables ( EMP LOY EE _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠ Ġcursor Ġ= Ġsqlite QueryBuilder . query ( m Database , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < String >(" name ", Ġ" sum ( salary )"), Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ", Ġ" sum ( salary )> 1 0 0 0 ", Ġ" name ", Ġ" 2 " Ġ// Ġlimit Ġis Ġ 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( cursor !! ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġcursor !!. getCount ()) ĊĠĠĠĠĠĠĠ Ġcursor !!. moveTo First () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Jim ", Ġcursor . getString ( COLUMN _ NAME _ INDEX )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 5 0 0 , Ġcursor . getInt ( COLUMN _ SAL ARY _ INDEX )) ĊĠĠĠĠĠĠĠ Ġcursor . moveTo Next () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Mi ke ", Ġcursor . getString ( COLUMN _ NAME _ INDEX )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 0 0 0 , Ġcursor . getInt ( COLUMN _ SAL ARY _ INDEX )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Union Query () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinner Projection Ġ= ĠarrayOf < String >(" name ", Ġ" age ", Ġ" location ") ĊĠĠĠĠĠĠĠ Ġvar Ġemployee QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġpeople QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġemployee QueryBuilder . set Tables (" employee ") ĊĠĠĠĠĠĠĠ Ġpeople QueryBuilder . set Tables (" people ") ĊĠĠĠĠĠĠĠ Ġvar Ġemployee Sub Query Ġ= Ġemployee QueryBuilder . build Union Sub Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"_ id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Projection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" employee ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" age = 2 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠ Ġvar Ġpeople Sub Query Ġ= Ġpeople QueryBuilder . build Union Sub Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"_ id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Projection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" people ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" location = LA ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠ Ġvar Ġexpected Ġ= Ġ" SELECT Ġname , Ġage , Ġlocation ĠFROM Ġemployee ĠWHERE Ġ( age = 2 5 )" ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġemployee Sub Query ) ĊĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ" SELECT Ġname , Ġage , Ġlocation ĠFROM Ġpeople ĠWHERE Ġ( location = LA )" ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġpeople Sub Query ) ĊĠĠĠĠĠĠĠ Ġval Ġunion QueryBuilder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġunion QueryBuilder . set Distinct ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġunion Query Ġ= Ġunion QueryBuilder . build Union Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < String >( employee Sub Query , Ġpeople Sub Query ), Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ(" SELECT Ġname , Ġage , Ġlocation ĠFROM Ġemployee ĠWHERE Ġ( age = 2 5 ) Ġ" Ġ+ Ġ" UNION ĠSELECT Ġname , Ġage , Ġlocation ĠFROM Ġpeople ĠWHERE Ġ( location = LA )") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġunion Query ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Employee Table () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL ((" CREATE ĠTABLE Ġemployee Ġ(_ id ĠINTEGER ĠPRIMARY ĠKEY , Ġ" Ġ+ Ġ" name ĠTEXT , Ġmonth ĠINTEGER , Ġsalary ĠINTEGER ); ")) ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL ((" INSERT ĠINTO Ġemployee Ġ( name , Ġmonth , Ġsalary ) Ġ" Ġ+ Ġ" VALUES Ġ(' Mi ke ', Ġ' 1 ', Ġ' 1 0 0 0 '); ")) ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL ((" INSERT ĠINTO Ġemployee Ġ( name , Ġmonth , Ġsalary ) Ġ" Ġ+ Ġ" VALUES Ġ(' Mi ke ', Ġ' 2 ', Ġ' 3 0 0 0 '); ")) ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL ((" INSERT ĠINTO Ġemployee Ġ( name , Ġmonth , Ġsalary ) Ġ" Ġ+ Ġ" VALUES Ġ(' jack ', Ġ' 1 ', Ġ' 2 0 0 0 '); ")) ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL ((" INSERT ĠINTO Ġemployee Ġ( name , Ġmonth , Ġsalary ) Ġ" Ġ+ Ġ" VALUES Ġ(' jack ', Ġ' 3 ', Ġ' 1 5 0 0 '); ")) ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL ((" INSERT ĠINTO Ġemployee Ġ( name , Ġmonth , Ġsalary ) Ġ" Ġ+ Ġ" VALUES Ġ(' Jim ', Ġ' 1 ', Ġ' 1 0 0 0 '); ")) ĊĠĠĠĠĠĠĠ Ġm Database . exec SQL ((" INSERT ĠINTO Ġemployee Ġ( name , Ġmonth , Ġsalary ) Ġ" Ġ+ Ġ" VALUES Ġ(' Jim ', Ġ' 3 ', Ġ' 3 5 0 0 '); ")) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATABASE _ FILE Ġ= Ġ" database _ test . db " ĊĠĠĠ Ġ} Ċ }