package Ġcom . ap ol log raph ql . apollo 3 . cache . normalized . sql . internal Ċ Ċ import Ġcom . ap ol log raph ql . apollo 3 . cache . normalized . api . Record Ċ import Ġcom . ap ol log raph ql . apollo 3 . cache . normalized . api . Record Field Json Adapter Ċ import Ġcom . ap ol log raph ql . apollo 3 . cache . normalized . sql . Cache Queries Ċ Ċ internal Ġobject ĠCache Queries Helpers Ġ{ ĊĊĠ Ġfun ĠCache Queries . select Record ( key : ĠString ): ĠRecord ? Ġ{ ĊĠĠĠ Ġreturn Ġrecord ForKey ( key ) ĊĠĠĠĠĠĠĠ Ġ. execute As List () ĊĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠRecord ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġit . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields Ġ= ĠRecord Field Json Adapter . fromJson ( it . record ) !! , ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠCache Queries . select Records ( keys : ĠCollection < String >): ĠCollection < Record > Ġ{ ĊĠĠĠ Ġreturn Ġkeys . chunk ed ( 9 9 9 ). flatMap Ġ{ Ġchunk ed Keys Ġ-> ĊĠĠĠĠĠ Ġrecords For Keys ( chunk ed Keys ) ĊĠĠĠĠĠĠĠĠĠ Ġ. execute As List () ĊĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecord ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġit . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields Ġ= ĠRecord Field Json Adapter . fromJson ( it . record ) !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠCache Queries . update Records ( records : ĠCollection < Record >): ĠSet < String > Ġ{ ĊĠĠĠ Ġvar Ġupdated Record Keys : ĠSet < String > Ġ= Ġempty Set () ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ Ġval Ġold Records Ġ= Ġselect Records ( ĊĠĠĠĠĠĠĠĠĠ Ġkeys Ġ= Ġrecords . map Ġ{ Ġit . key Ġ}, ĊĠĠĠĠĠ Ġ). associate By Ġ{ Ġit . key Ġ} ĊĊĠĠĠĠĠ Ġupdated Record Keys Ġ= Ġrecords . flatMap Ġ{ Ġrecord Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġold Record Ġ= Ġold Records [ record . key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( old Record Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġinsert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġrecord . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Ġ= ĠRecord Field Json Adapter . toJson ( record . fields ), ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġrecord . field Keys () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġ( merged Record , Ġchanged Keys ) Ġ= Ġold Record . merge With ( record ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( merged Record . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġold Record . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Ġ= ĠRecord Field Json Adapter . toJson ( merged Record . fields ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġchanged Keys ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}. toSet () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġupdated Record Keys ĊĠ Ġ} ĊĊĠ Ġfun ĠCache Queries . update Record ( record : ĠRecord ): ĠSet < String > Ġ{ ĊĠĠĠ Ġvar Ġupdated Record Keys : ĠSet < String > Ġ= Ġempty Set () ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ Ġval Ġold Record Ġ= Ġselect Record ( record . key ) ĊĊĠĠĠĠĠ Ġupdated Record Keys Ġ= Ġif Ġ( old Record Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinsert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġrecord . key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Ġ= ĠRecord Field Json Adapter . toJson ( record . fields ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrecord . field Keys () ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( merged Record , Ġchanged Keys ) Ġ= Ġold Record . merge With ( record ) ĊĠĠĠĠĠĠĠ Ġif Ġ( merged Record . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġupdate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġold Record . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Ġ= ĠRecord Field Json Adapter . toJson ( merged Record . fields ), ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchanged Keys ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġupdated Record Keys ĊĠ Ġ} ĊĊĠ Ġfun ĠCache Queries . remove ( pattern : ĠString ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġ 0 L ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ Ġdelete Record sWith Key Matching ( pattern , Ġ"\\ ") ĊĠĠĠĠĠ Ġresult Ġ= Ġchanges (). execute As One () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult . toInt () ĊĠ Ġ} ĊĊĠ Ġfun ĠCache Queries . delete Record ( key : ĠString , Ġcascade : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ Ġresult Ġ= Ġif Ġ( cascade ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Record ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . referenced Fields () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġit . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcascade Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete ( key ) ĊĠĠĠĠĠĠĠ Ġchanges (). execute As One () Ġ> Ġ 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġfun ĠCache Queries . delete All Records () Ġ{ ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ Ġdelete All () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠCache Queries . selectAll Records (): ĠMap < String , ĠRecord > Ġ{ ĊĠĠĠ Ġreturn Ġselect Records (). execute As List (). map Ġ{ ĊĠĠĠĠĠ Ġit . key Ġto ĠRecord ( ĊĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġit . key , ĊĠĠĠĠĠĠĠĠĠ Ġfields Ġ= ĠRecord Field Json Adapter . fromJson ( it . record ) !! , ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. toMap () ĊĠ Ġ} Ċ } Ċ