package Ġcom . jay r ave . f alk on . sample _ android . da os Ċ Ċ import Ġcom . jay r ave . f alk on . dao . Dao Impl Ċ import Ġcom . jay r ave . f alk on . dao . findAll Ċ import Ġcom . jay r ave . f alk on . dao . findById Ċ import Ġcom . jay r ave . f alk on . dao . lib . extract All Models And Close Ċ import Ġcom . jay r ave . f alk on . dao . lib . qualified Name Ċ import Ġcom . jay r ave . f alk on . dao . query . len ient . select Ċ import Ġcom . jay r ave . f alk on . mapper . Column Ċ import Ġcom . jay r ave . f alk on . sample _ android . models . User Ċ import Ġcom . jay r ave . f alk on . sample _ android . tables . Messages Table Ċ import Ġcom . jay r ave . f alk on . sample _ android . tables . Users Table Ċ import Ġcom . jay r ave . f alk on . sql Builders .* Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠSub class ing Ġ[ Dao Impl ] Ġprovides Ġbuild ers Ġfor ĠINSERT , ĠUPDATE , ĠDELETE Ġ& ĠSELECT Ġstatements . Ċ Ġ* ĠAlso Ġif Ġyou Ġinclude Ġthe Ġ` f alk on - dao - ext n ` Ġmodule , Ġyou Ġwill Ġget Ġmore Ġfancy Ġfeatures . Ċ Ġ* ĠCheck Ġout Ġthe Ġdocs Ġfor Ġmore Ġinfo Ċ Ġ*/ Ċ class ĠUsers Dao ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġusers Table : ĠUsers Table , Ġinsert Sql Builder : ĠInsert Sql Builder , ĊĠĠĠĠĠĠĠ Ġupdate Sql Builder : ĠUpdate Sql Builder , Ġdelete Sql Builder : ĠDelete Sql Builder , ĊĠĠĠĠĠĠĠ Ġinsert Or Replace Sql Builder : ĠInsert Or Replace Sql Builder , Ġquery Sql Builder : ĠQuery Sql Builder ) Ġ: ĊĠĠĠĠĠĠĠ ĠDao Impl < User , ĠUUID >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Table , Ġinsert Sql Builder , Ġupdate Sql Builder , Ġdelete Sql Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Or Replace Sql Builder , Ġquery Sql Builder ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ findById ] Ġis Ġprovided Ġby Ġthe Ġ` f alk on - dao - ext n ` Ġmodule ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind User ( id : ĠUUID ): ĠUser ? Ġ= Ġfind ById ( id ) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ findAll ] Ġis Ġprovided Ġby Ġthe Ġ` f alk on - dao - ext n ` Ġmodule ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠfindAll Users (): ĠList < User > Ġ= ĠfindAll () ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠQueries Ġcan Ġalso Ġbe Ġbuilt Ġusing Ġ[ query Builder ]. ĠThe Ġbuilder Ġis Ġcontext Ġaware Ġ( when ĊĠĠĠĠ Ġ* Ġused Ġin Ġa Ġfluent - interface Ġmanner ) Ġ& Ġtype - safe ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPlace holders Ġare Ġused Ġby Ġdefault Ġfor Ġall Ġarguments Ġto Ġprevent ĠSQL Ġinjection . ĊĠĠĠĠ Ġ* Ġ[ extract All Models And Close ] Ġis Ġan Ġextension Ġfunction Ġthat Ġallows Ġsafe Ġextraction Ġof ĊĠĠĠĠ Ġ* Ġmodels Ġout Ġof Ġa Ġ` Compiled Statement < Source >`. ĠFor Ġmore Ġsuch Ġoptions Ġcheck Ġout Ġthe Ġfile Ġthat ĊĠĠĠĠ Ġ* Ġcontains Ġ[ extract All Models And Close ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠfindAll Users Seen After ( threshold Date : ĠDate ): ĠList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. gt ( users Table . last Seen At , Ġthreshold Date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract All Models And Close ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Table Ġ= Ġusers Table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName Extractor Ġ= ĠColumn < User , Ġ* >:: qualified Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠQuery Ġbuilder Ġuses Ġqualified Ġcolumn Ġnames Ġto Ġavoid Ġcollision ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIt Ġis Ġreally Ġeasy Ġto Ġdo Ġsimple ĠJOIN Ġqueries Ġtoo . ĠFor Ġcomplex ĠJOIN Ġqueries , Ġtake ĊĠĠĠĠ Ġ* Ġa Ġlook Ġat Ġ[ findAll Users Who Received At Least One Message InThe Last Week ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠfindAll Users Who Received At Least One Message InThe Last Week ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠfindAll Users Who Have Sent At Least One Message ( messages Table : ĠMessages Table ): ĠList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ( users Table . id , Ġmessages Table . from UserId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy ( users Table . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract All Models And Close ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Table Ġ= Ġusers Table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName Extractor Ġ= ĠColumn < User , Ġ* >:: qualified Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠQuery Ġbuilder Ġuses Ġqualified Ġcolumn Ġnames Ġto Ġavoid Ġcollision ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġyou Ġfind Ġ[ query Builder ] Ġto Ġbe Ġtoo Ġrestrict ive Ġto Ġwork Ġwith , Ġgo Ġfor ĊĠĠĠĠ Ġ* Ġ[ len ient QueryBuilder ]. ĠFor Ġexample , Ġin Ġthis Ġcase Ġwhere Ġwe Ġwant Ġto Ġget Ġthe Ġlist Ġof Ġusers ĊĠĠĠĠ Ġ* Ġwho Ġreceived Ġat Ġleast Ġone Ġmessage Ġin Ġthe Ġlast Ġweek , Ġwe Ġcan 't Ġuse Ġ[ query Builder ] Ġbecause ĊĠĠĠĠ Ġ* Ġit Ġrestrict s Ġus Ġto Ġinclude Ġonly ĠWHERE Ġclauses Ġfor Ġcolumns Ġbelong ing Ġto Ġ[ Users Table ] !! ĊĠĠĠĠ Ġ* ĠThis Ġis Ġwhere Ġ[ len ient QueryBuilder ] Ġcomes Ġto Ġthe Ġrescue Ġas Ġit Ġisn 't Ġtable Ġdependent . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ len ient QueryBuilder ] Ġby Ġdefault Ġincludes Ġall Ġthe Ġcolumns Ġfrom Ġall Ġthe Ġtables Ġinvolved ĊĠĠĠĠ Ġ* Ġin Ġthe ĠJOIN S . ĠTo Ġmake Ġit Ġmore Ġefficient , Ġjust Ġselect Ġthe Ġcolumns Ġ[ Users Table ] Ġis ĊĠĠĠĠ Ġ* Ġconcerned Ġwith Ġ& Ġthen Ġbuild Ġ[ User ] s Ġout Ġof Ġthe Ġresult Ġset ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠfindAll Users Who Have Sent At Least One Message ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠfindAll Users Who Received At Least One Message InThe Last Week ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessages Table : ĠMessages Table ): ĠList < User > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcut Off Date Ġ= ĠDate ( Date (). time Ġ- Ġ( 7 Ġ* Ġ 2 4 Ġ* Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 )) ĊĠĠĠĠĠĠĠ Ġreturn Ġlen ient QueryBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Table ( users Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ( users Table . id , Ġmessages Table . to UserId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where (). ge ( messages Table . received At , Ġcut Off Date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select ( users Table . all Columns ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract All Models And Close ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Table Ġ= Ġusers Table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName Extractor Ġ= ĠColumn < User , Ġ* >:: qualified Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠQuery Ġbuilder Ġuses Ġqualified Ġcolumn Ġnames Ġto Ġavoid Ġcollision ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }