/* Ċ Ġ* ĠCopyright Ġ 2 0 1 3 Ġ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 . Ċ Ġ*/ Ċ Ċ /* Ċ Ġ* ĠMod ifications : Ċ Ġ* Ġ- Imported Ġfrom ĠA O SP Ġframeworks / base / core / java / com / android / internal / content Ċ Ġ* Ġ- Changed Ġpackage Ġname Ċ Ġ*/ Ċ Ċ package Ġorg . open int ents . calendar . common . db Ċ Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . Arrays Ċ import Ġjava . util . Collections Ċ import Ġjava . util . HashMap Ċ Ċ /** Ċ Ġ* ĠHelper Ġfor Ġbuilding Ġselection Ġclauses Ġfor Ġ[ SQLite Database ]. Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġprovides Ġa Ġconvenient Ġfrontend Ġfor Ġworking Ġwith ĠSQL . ĠInstead Ġof Ġcomp osing Ġstatements Ċ Ġ* Ġmanually Ġusing Ġstring Ġconcat enation , Ġmethod Ġcalls Ġare Ġused Ġto Ġconstruct Ġthe Ġstatement Ġone Ċ Ġ* Ġclause Ġat Ġa Ġtime . ĠThese Ġmethods Ġcan Ġbe Ġchained Ġtogether . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIf Ġmultiple Ġwhere () Ġstatements Ġare Ġprovided , Ġthey 're Ġcombined Ġusing Ġ` AND `. Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ċ Ġ* Ġ< pre > Ċ Ġ* ĠSelection Builder Ġbuilder Ġ= Ġnew ĠSelection Builder (); Ċ Ġ* ĠCursor Ġc Ġ= Ġbuilder . table ( Feed Contract . Entry . TABLE _ NAME ) ĠĠĠĠĠĠ Ġ// ĠString ĠTABLE _ NAME Ġ= Ġ" entry " Ċ Ġ* Ġ. where ( Feed Contract . Entry ._ ID Ġ+ Ġ"= ?", Ġid ); Ġ Ġ// ĠString Ġ_ ID Ġ= Ġ"_ ID " Ċ Ġ* Ġ. query ( db , Ġprojection , Ġsort Order ) Ċ Ġ* Ċ </ pre > Ġ* Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIn Ġthis Ġexample , Ġthe Ġtable Ġname Ġand Ġfilters Ġ(` WHERE ` Ġclauses ) Ġare Ġboth Ġexplicitly Ċ Ġ* Ġspecified Ġvia Ġmethod Ġcall . ĠSelection Builder Ġtakes Ġcare Ġof Ġiss uing Ġa Ġ" query " Ġcommand Ġto Ġthe Ċ Ġ* Ġdatabase , Ġand Ġreturns Ġthe Ġresulting Ġ[ Cursor ] Ġobject . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠInner Ġ` JOIN ` s Ġcan Ġbe Ġaccomp lished Ġusing Ġthe Ġmap ToTable () Ġfunction . ĠThe Ġmap () Ġfunction Ċ Ġ* Ġcan Ġbe Ġused Ġto Ġcreate Ġnew Ġcolumns Ġbased Ġon Ġarbitrary Ġ( SQL - based ) Ġcriteria . ĠIn Ġadvanced Ġusage , Ċ Ġ* Ġentire Ġsub queries Ġcan Ġbe Ġpassed Ġinto Ġthe Ġmap () Ġfunction . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠAdvanced Ġexample : Ċ Ġ* Ċ Ġ* Ġ< pre > Ċ Ġ* Ġ// ĠString ĠS ESS IONS _ JOIN _ BLOCKS _ RO O MS Ġ= Ġ" sessions Ġ" Ċ Ġ* Ġ// ĠĠĠĠĠĠĠ Ġ+ Ġ" LEFT ĠOUT ER ĠJOIN Ġblocks ĠON Ġsessions . block _ id = blocks . block _ id Ġ" Ċ Ġ* Ġ// ĠĠĠĠĠĠĠ Ġ+ Ġ" LEFT ĠOUT ER ĠJOIN Ġrooms ĠON Ġsessions . room _ id = rooms . room _ id "; Ċ Ġ* Ċ Ġ* Ġ// ĠString ĠSub query . BLOCK _ NUM _ STAR RED _ SESSION S Ġ= Ċ Ġ* Ġ// ĠĠĠĠĠĠ Ġ"( SELECT ĠCOUNT ( 1 ) ĠFROM Ġ" Ċ Ġ* Ġ// ĠĠĠĠĠĠĠ Ġ+ ĠTables . SESSION S Ġ+ Ġ" ĠWHERE Ġ" Ġ+ ĠQual ified . SESSION S _ BLOCK _ ID Ġ+ Ġ"=" Ċ Ġ* Ġ// ĠĠĠĠĠĠĠ Ġ+ ĠQual ified . BLOCKS _ BLOCK _ ID Ġ+ Ġ" ĠAND Ġ" Ġ+ ĠQual ified . SESSION S _ STAR RED Ġ+ Ġ"= 1 )"; Ċ Ġ* Ċ Ġ* ĠString ĠSub q ery . BLOCK _ SESSION S _ COUNT Ġ= Ċ Ġ* ĠCursor Ġc Ġ= Ġbuilder . table ( Tables . SESSION S _ JOIN _ BLOCKS _ RO O MS ) Ċ Ġ* Ġ. map ( Blocks . NUM _ STAR RED _ SESSION S , ĠSub query . BLOCK _ NUM _ STAR RED _ SESSION S ) Ċ Ġ* Ġ. map ToTable ( Sessions ._ ID , ĠTables . SESSION S ) Ċ Ġ* Ġ. map ToTable ( Sessions . SESSION _ ID , ĠTables . SESSION S ) Ċ Ġ* Ġ. map ToTable ( Sessions . BLOCK _ ID , ĠTables . SESSION S ) Ċ Ġ* Ġ. map ToTable ( Sessions . ROOM _ ID , ĠTables . SESSION S ) Ċ Ġ* Ġ. where ( Qualified . SESSION S _ BLOCK _ ID Ġ+ Ġ"= ?", Ġblock Id ); Ċ </ pre > Ġ* Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIn Ġthis Ġexample , Ġwe Ġhave Ġtwo Ġdifferent Ġtypes Ġof Ġ` JOIN ` s : Ġa Ġleft Ġouter Ġjoin Ġusing Ġa Ċ Ġ* Ġmodified Ġtable Ġname Ġ( since Ġthis Ġclass Ġdoesn 't Ġdirectly Ġsupport Ġthese ), Ġand Ġan Ġinner Ġjoin Ġusing Ċ Ġ* Ġthe Ġmap ToTable () Ġfunction . ĠThe Ġmap () Ġfunction Ġis Ġused Ġto Ġinsert Ġa Ġcount Ġbased Ġon Ġspecific Ċ Ġ* Ġcriteria , Ġexecuted Ġas Ġa Ġsub - query . Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġis Ġ* not * Ġthread Ġsafe . Ċ Ġ*/ Ċ class ĠSelection Builder Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Table : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Projection Map Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠ Ġprivate Ġval Ġm Selection Ġ= ĠStringBuilder () ĊĠĠĠ Ġprivate Ġval Ġm Selection Args Ġ= ĠArrayList < String >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġselection Ġstring Ġbased Ġon Ġcurrent Ġinternal Ġstate . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠCurrent Ġselection Ġas Ġa ĠSQL Ġstatement ĊĠĠĠĠ Ġ* Ġ@ see Ġ. getSelection Args ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġselection : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Selection . toString () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġselection Ġarguments Ġbased Ġon Ġcurrent Ġinternal Ġstate . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. getSelection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġselection Args : ĠArray < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Selection Args . to Typed Array () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReset Ġany Ġinternal Ġstate , Ġallowing Ġthis Ġbuilder Ġto Ġbe Ġre cyc led . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠCalling Ġthis Ġmethod Ġis Ġmore Ġefficient Ġthan Ġcreating Ġa Ġnew ĠSelection Builder Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠFluent Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreset (): ĠSelection Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġm Table Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Selection . set Length ( 0 ) ĊĠĠĠĠĠĠĠ Ġm Selection Args . clear () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAppend Ġthe Ġgiven Ġselection Ġclause Ġto Ġthe Ġinternal Ġstate . ĠEach Ġclause Ġis ĊĠĠĠĠ Ġ* Ġsur rounded Ġwith Ġparent hesis Ġand Ġcombined Ġusing Ġ` AND `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIn Ġthe Ġmost Ġbasic Ġusage , Ġsimply Ġprovide Ġa Ġselection Ġin ĠSQL Ġ` WHERE ` Ġstatement Ġformat . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ. where (" blog _ posts . category Ġ= Ġ' PROGRAM M ING '); ĊĠĠĠ Ġ</ pre > Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUser Ġinput Ġshould Ġnever Ġbe Ġdirectly Ġsupplied Ġas Ġas Ġpart Ġof Ġthe Ġselection Ġstatement . ĊĠĠĠĠ Ġ* ĠInstead , Ġuse Ġpositional Ġparameters Ġin Ġyour Ġselection Ġstatement , Ġthen Ġpass Ġthe Ġuser Ġinput ĊĠĠĠĠ Ġ* Ġin Ġvia Ġthe Ġselection Args Ġparameter . ĠThis Ġprevents ĠSQL Ġescape Ġcharacters Ġin Ġuser Ġinput Ġfrom ĊĠĠĠĠ Ġ* Ġcausing Ġun wanted Ġside Ġeffects . Ġ( Failure Ġto Ġfollow Ġthis Ġconvention Ġmay Ġhave Ġsecurity ĊĠĠĠĠ Ġ* Ġimp lications .) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPosition al Ġparameters Ġare Ġspecified Ġusing Ġthe Ġ' ?' Ġcharacter . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ. where (" blog _ posts . title Ġcontains Ġ?, Ġuser Search String ); ĊĠĠĠ Ġ</ pre > Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġselection ĠSQL Ġwhere Ġstatement ĊĠĠĠĠ Ġ* Ġ@ param Ġselection Args ĠValues Ġto Ġsubstitute Ġfor Ġpositional Ġparameters Ġ(' ?' Ġcharacters Ġin ĊĠĠĠĠ Ġ* Ġ` selection ` Ġstatement . ĠWill Ġbe Ġautomatically Ġescaped . ĊĠĠĠĠ Ġ* Ġ@ return ĠFluent Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwhere ( selection : ĠString ?, Ġselection Args : ĠArray < String >? ): ĠSelection Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( selection )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selection Args Ġ!= Ġnull Ġ&& Ġselection Args . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Valid Ġselection Ġrequired Ġwhen Ġincluding Ġarguments =" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShort cut Ġwhen Ġclause Ġis Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Selection . length Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Selection . append (" ĠAND Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Selection . append (" (" ). append ( selection ). append (" )") ĊĠĠĠĠĠĠĠ Ġif Ġ( selection Args Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . addAll ( m Selection Args , Ġ* selection Args ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTable Ġname Ġto Ġuse Ġfor ĠSQL Ġ` FROM ` Ġstatement . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġmay Ġonly Ġbe Ġcalled Ġonce . ĠIf Ġmultiple Ġtables Ġare Ġrequired , Ġconcatenate Ġthem ĊĠĠĠĠ Ġ* Ġin ĠSQL - format Ġ( typ ically Ġcomma - separated ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġneed Ġto Ġdo Ġadvanced Ġ` JOIN ` s , Ġthey Ġcan Ġalso Ġbe Ġspecified Ġhere . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġalso : Ġmap ToTable () ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĠTable Ġname ĊĠĠĠĠ Ġ* Ġ@ return ĠFluent Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtable ( table : ĠString ): ĠSelection Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġm Table Ġ= Ġtable ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVerify Ġthat Ġa Ġtable Ġname Ġhas Ġbeen Ġsupplied Ġusing Ġtable (). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġtable Ġnot Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġassert Table () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Table Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Table Ġnot Ġspecified ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerform Ġan Ġinner Ġjoin . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠMap Ġcolumns Ġfrom Ġa Ġsecondary Ġtable Ġonto Ġthe Ġcurrent Ġresult Ġset . ĠReferences Ġto Ġthe Ġcolumn ĊĠĠĠĠ Ġ* Ġspecified Ġin Ġ` column ` Ġwill Ġbe Ġreplaced Ġwith Ġ` table . column ` Ġin Ġthe ĠSQL Ġ` SELECT ` Ġclause . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcolumn ĠColumn Ġname Ġto Ġjoin Ġon . ĠMust Ġbe Ġthe Ġsame Ġin Ġboth Ġtables . ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĠSecondary Ġtable Ġto Ġjoin . ĊĠĠĠĠ Ġ* Ġ@ return ĠFluent Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmap ToTable ( column : ĠString , Ġtable : ĠString ): ĠSelection Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġm Projection Map [ column ] Ġ= Ġ"$ table .$ column " ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew Ġcolumn Ġbased Ġon Ġcustom Ġcriteria Ġ( such Ġas Ġaggregate Ġfunctions ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġadds Ġa Ġnew Ġcolumn Ġto Ġthe Ġresult Ġset , Ġbased Ġupon Ġcustom Ġcriteria Ġin ĠSQL Ġformat . ĠThis ĊĠĠĠĠ Ġ* Ġis Ġequivalent Ġto Ġthe ĠSQL Ġstatement : Ġ` SELECT Ġto Clause ĠAS Ġfrom Column ` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġuseful Ġfor Ġexecuting ĠSQL Ġsub - queries . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom Column ĠName Ġof Ġcolumn Ġfor Ġmapping ĊĠĠĠĠ Ġ* Ġ@ param Ġto Clause ĠSQL Ġstring Ġrepresenting Ġdata Ġto Ġbe Ġmapped ĊĠĠĠĠ Ġ* Ġ@ return ĠFluent Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmap ( from Column : ĠString , Ġto Clause : ĠString ): ĠSelection Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġm Projection Map [ from Column ] Ġ= Ġ"$ to Clause ĠAS Ġ$ from Column " ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġuser - supp lied Ġprojection Ġ( column Ġlist ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIn Ġcases Ġwhere Ġa Ġcolumn Ġis Ġmapped Ġto Ġanother Ġdata Ġsource Ġ( either Ġanother Ġtable , Ġor Ġan ĊĠĠĠĠ Ġ* ĠSQL Ġsub - query ), Ġthe Ġcolumn Ġname Ġwill Ġbe Ġreplaced Ġwith Ġa Ġmore Ġspecific , ĠSQL - compatible ĊĠĠĠĠ Ġ* Ġrepresentation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAss umes Ġthat Ġincoming Ġcolumns Ġare Ġnon - null . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġalso : Ġmap (), Ġmap ToTable () ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcolumns ĠUser Ġsupplied Ġprojection Ġ( column Ġlist ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmap Columns ( columns : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcolumns . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġm Projection Map [ columns [ i ]] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns [ i ] Ġ= Ġtarget ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġa Ġdescription Ġof Ġthis Ġbuilder 's Ġstate . ĠDoes ĠNOT Ġoutput ĠSQL . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠHuman - readable Ġinternal Ġstate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ(" Selection Builder [ table =" Ġ+ Ġm Table Ġ+ Ġ", Ġselection =" Ġ+ Ġselection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", Ġselection Args =" Ġ+ ĠArrays . toString ( selection Args ) Ġ+ Ġ"] ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġquery Ġ( SQL Ġ` SELECT `) Ġagainst Ġspecified Ġdatabase . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUsing Ġa Ġnull Ġprojection Ġ( column Ġlist ) Ġis Ġnot Ġsupported . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠDatabase Ġto Ġquery . ĊĠĠĠĠ Ġ* Ġ@ param Ġcolumns ĠDatabase Ġprojection Ġ( column Ġlist ) Ġto Ġreturn , Ġmust Ġbe Ġnon - NULL . ĊĠĠĠĠ Ġ* Ġ@ param ĠorderBy ĠHow Ġto Ġorder Ġthe Ġrows , Ġformatted Ġas Ġan ĠSQL ĠORDER ĠBY Ġclause Ġ( ex cluding Ġthe ĊĠĠĠĠ Ġ* ĠORDER ĠBY Ġitself ). ĠPass ing Ġnull Ġwill Ġuse Ġthe Ġdefault Ġsort Ġorder , Ġwhich Ġmay Ġbe ĊĠĠĠĠ Ġ* Ġunordered . ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġ[ Cursor ] Ġobject , Ġwhich Ġis Ġposition ed Ġbefore Ġthe Ġfirst Ġentry . ĠNote Ġthat ĊĠĠĠĠ Ġ* Ġ[ Cursor ] s Ġare Ġnot Ġsynchronized , Ġsee Ġthe Ġdocumentation Ġfor Ġmore Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġquery ( db : ĠSQLite Database , Ġcolumns : ĠArray < String > ?, ĠorderBy : ĠString ?): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery ( db , Ġcolumns , Ġnull , Ġnull , ĠorderBy , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġquery Ġ(` SELECT `) Ġagainst Ġdatabase . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUsing Ġa Ġnull Ġprojection Ġ( column Ġlist ) Ġis Ġnot Ġsupported . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠDatabase Ġto Ġquery . ĊĠĠĠĠ Ġ* Ġ@ param Ġcolumns ĠDatabase Ġprojection Ġ( column Ġlist ) Ġto Ġreturn , Ġmust Ġbe Ġnon - null . ĊĠĠĠĠ Ġ* Ġ@ param Ġgroup By ĠA Ġfilter Ġdeclaring Ġhow Ġto Ġgroup Ġrows , Ġformatted Ġas Ġan ĠSQL ĠGROUP ĠBY Ġclause ĊĠĠĠĠ Ġ* Ġ( ex cluding Ġthe ĠGROUP ĠBY Ġitself ). ĠPass ing Ġnull Ġwill Ġcause Ġthe Ġrows Ġto Ġnot Ġbe ĊĠĠĠĠ Ġ* Ġgrouped . ĊĠĠĠĠ Ġ* Ġ@ param Ġhaving ĠA Ġfilter Ġdeclare Ġwhich Ġrow Ġgroups Ġto Ġinclude Ġin Ġthe Ġcursor , Ġif Ġrow Ġgrouping Ġis ĊĠĠĠĠ Ġ* Ġbeing Ġused , Ġformatted Ġas Ġan ĠSQL ĠH AV ING Ġclause Ġ( ex cluding Ġthe ĠH AV ING Ġitself ). ĊĠĠĠĠ Ġ* ĠPass ing Ġnull Ġwill Ġcause Ġall Ġrow Ġgroups Ġto Ġbe Ġincluded , Ġand Ġis Ġrequired Ġwhen ĊĠĠĠĠ Ġ* Ġrow Ġgrouping Ġis Ġnot Ġbeing Ġused . ĊĠĠĠĠ Ġ* Ġ@ param ĠorderBy ĠHow Ġto Ġorder Ġthe Ġrows , Ġformatted Ġas Ġan ĠSQL ĠORDER ĠBY Ġclause Ġ( ex cluding Ġthe ĊĠĠĠĠ Ġ* ĠORDER ĠBY Ġitself ). ĠPass ing Ġnull Ġwill Ġuse Ġthe Ġdefault Ġsort Ġorder , Ġwhich Ġmay Ġbe ĊĠĠĠĠ Ġ* Ġunordered . ĊĠĠĠĠ Ġ* Ġ@ param Ġlimit ĠLim its Ġthe Ġnumber Ġof Ġrows Ġreturned Ġby Ġthe Ġquery , Ġformatted Ġas ĠLIMIT Ġclause . ĊĠĠĠĠ Ġ* ĠPass ing Ġnull Ġden otes Ġno ĠLIMIT Ġclause . ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġ[ Cursor ] Ġobject , Ġwhich Ġis Ġposition ed Ġbefore Ġthe Ġfirst Ġentry . ĠNote Ġthat ĊĠĠĠĠ Ġ* Ġ[ Cursor ] s Ġare Ġnot Ġsynchronized , Ġsee Ġthe Ġdocumentation Ġfor Ġmore Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġquery ( ĊĠĠĠĠĠĠĠ Ġdb : ĠSQLite Database , Ġcolumns : ĠArray < String > ?, Ġgroup By : ĠString ?, ĊĠĠĠĠĠĠĠ Ġhaving : ĠString ?, ĠorderBy : ĠString ?, Ġlimit : ĠString ? ĊĠĠĠ Ġ): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Table () ĊĠĠĠĠĠĠĠ Ġif Ġ( columns Ġ!= Ġnull ) Ġmap Columns ( columns ) ĊĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" query ( columns =" Ġ+ ĠArrays . toString ( columns ) Ġ+ Ġ") Ġ" Ġ+ Ġthis ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdb . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Table , Ġcolumns , Ġselection , Ġselection Args , Ġgroup By , Ġhaving , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy , Ġlimit ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġ` UPDATE ` Ġagainst Ġdatabase . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠDatabase Ġto Ġquery . ĊĠĠĠĠ Ġ* Ġ@ param Ġvalues ĠA Ġmap Ġfrom Ġcolumn Ġnames Ġto Ġnew Ġcolumn Ġvalues . Ġnull Ġis Ġa Ġvalid Ġvalue Ġthat Ġwill ĊĠĠĠĠ Ġ* Ġbe Ġtranslated Ġto ĠNULL ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġnumber Ġof Ġrows Ġaffected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate ( db : ĠSQLite Database , Ġvalues : ĠContent Values ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Table () ĊĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" update () Ġ$ this ") ĊĠĠĠĠĠĠĠ Ġreturn Ġdb . update ( m Table , Ġvalues , Ġselection , Ġselection Args ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġ` DELETE ` Ġagainst Ġdatabase . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠDatabase Ġto Ġquery . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġnumber Ġof Ġrows Ġaffected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdelete ( db : ĠSQLite Database ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Table () ĊĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" delete () Ġ$ this ") ĊĠĠĠĠĠĠĠ Ġreturn Ġdb . delete ( m Table , Ġselection , Ġselection Args ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" basics ync adapter " ĊĠĠĠ Ġ} Ċ } Ċ