package Ġm ary k . datastore . ro cksdb . processors Ċ Ċ import Ġm ary k . core . models . Is Root Values DataModel Ċ import Ġm ary k . core . processors . datastore . scan Range . Key Scan Ranges Ċ import Ġm ary k . core . processors . datastore . scan Range . create Scan Range Ċ import Ġm ary k . core . properties . Is Property Context Ċ import Ġm ary k . core . properties . Property Definitions Ċ import Ġm ary k . core . properties . definitions . Is Comparable Definition Ċ import Ġm ary k . core . properties . types . Key Ċ import Ġm ary k . core . query . requests . Is Scan Request Ċ import Ġm ary k . datastore . ro cksdb . DB Accessor Ċ import Ġm ary k . datastore . ro cksdb . R ocks DB DataStore Ċ import Ġm ary k . datastore . ro cksdb . TableColumn F amilies Ċ import Ġm ary k . datastore . ro cksdb . processors . helpers . getKey By Unique Value Ċ import Ġm ary k . datastore . ro cksdb . processors . helpers . read Creation Version Ċ import Ġm ary k . datastore . ro cksdb . processors . helpers . read Version Bytes Ċ import Ġm ary k . datastore . shared . Scan Type Ċ import Ġm ary k . datastore . shared . Scan Type . Index Scan Ċ import Ġm ary k . datastore . shared . Scan Type . Table Scan Ċ import Ġm ary k . datastore . shared . check To Version Ċ import Ġm ary k . datastore . shared . optimize Table Scan Ċ import Ġm ary k . datastore . shared . order To Scan Type Ċ import Ġm ary k . lib . re cycl able ByteArray Ċ import Ġm ary k . ro cksdb . Read Options Ċ import Ġm ary k . ro cksdb . ro cks DB NotFound Ċ Ċ /** ĠWalk Ġwith Ġ[ scan Request ] Ġon Ġ[ data Store ] Ġand Ġdo Ġ[ process Record ] Ġ*/ Ċ internal Ġfun Ġ< DM Ġ: ĠIs Root Values DataModel < P >, ĠP Ġ: ĠProperty Definitions > Ġprocess Scan ( ĊĠĠĠ Ġscan Request : ĠIs Scan Request < DM , ĠP , Ġ* >, ĊĠĠĠ Ġdata Store : ĠR ocks DB DataStore , ĊĠĠĠ Ġdb Accessor : ĠDB Accessor , ĊĠĠĠ Ġcolumn F amilies : ĠTable Column F amilies , ĊĠĠĠ Ġread Options : ĠRead Options , ĊĠĠĠ Ġscan Setup : Ġ(( Scan Type ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġprocess Record : Ġ( Key < DM >, ĠU Long , ĠByteArray ?) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġkey Scan Range Ġ= Ġscan Request . data Model . create Scan Range ( scan Request . where , Ġscan Request . start Key ?. bytes , Ġscan Request . include Start ) ĊĊĠĠĠ Ġscan Request . check To Version ( data Store . keep All Versions ) ĊĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġhard Ġkey Ġmatch Ġthen Ġquit Ġwith Ġdirect Ġrecord ĊĠĠĠĠĠĠĠ Ġkey Scan Range . is Single Key () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġscan Request . data Model . key ( key Scan Range . ranges . first (). start ) Ġas ĠKey < DM > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmay Exist Ġ= Ġdata Store . db . key May Exist ( column F amilies . keys , Ġkey . bytes , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( may Exist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Length Ġ= Ġdb Accessor . get ( column F amilies . keys , Ġread Options , Ġkey . bytes , Ġre cycl able ByteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġprocess Ġit Ġif Ġit Ġwas Ġcreated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Length Ġ!= Ġro cks DB NotFound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Version Ġ= Ġre cycl able ByteArray . read Version Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Process Record ( db Accessor , Ġcolumn F amilies , Ġread Options , Ġkey , Ġcreated Version , Ġscan Request , Ġkey Scan Range )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Record ( key , Ġcreated Version , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProcess Ġuni ques Ġas Ġa Ġfast Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Scan Range . uni ques ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġprocess Ġthe Ġfirst Ġunique Ġsince Ġit Ġhas Ġto Ġmatch Ġevery Ġfound Ġunique Ġmatcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġif Ġfirst Ġis Ġset Ġit Ġcan Ġgo Ġto Ġdirect Ġkey Ġto Ġmatch Ġfurther ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Matcher Ġ= Ġit . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunique Reference Ġ= Ġfirst Matcher . reference ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġfirst Matcher . value Ġas ĠComparable < Any > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Bytes Ġ= Ġ( first Matcher . definition Ġas ĠIs Comparable Definition < Comparable < Any >, ĠIs Property Context >). to Storage Bytes ( value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference Ġ= ĠByteArray ( unique Reference . size Ġ+ Ġ 1 Ġ+ value Bytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunique Reference . copy Into ( reference ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference [ unique Reference . size ] Ġ= ĠNO _ TYPE _ IND IC ATOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Bytes . copy Into ( reference , Ġunique Reference . size Ġ+ Ġ 1 , Ġ 0 , Ġvalue Bytes . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetKey By Unique Value ( db Accessor , Ġcolumn F amilies , Ġread Options , Ġreference , Ġscan Request . to Version ) Ġ{ Ġkey Reader , Ġset At Version Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġscan Request . data Model . key ( key Reader ) Ġas ĠKey < DM > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Process Record ( db Accessor , Ġcolumn F amilies , Ġread Options , Ġkey , Ġset At Version , Ġscan Request , Ġkey Scan Range )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Creation Version ( db Accessor , Ġcolumn F amilies , Ġread Options , Ġkey . bytes )?. let Ġ{ Ġcreated Version Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Record ( key , Ġcreated Version , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscan Index Ġ= Ġscan Request . data Model . order To Scan Type ( scan Request . order , Ġkey Scan Range . equal Pairs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocessed Scan Index Ġ= Ġif Ġ( scan Index Ġis ĠTable Scan ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Request . data Model . optimize Table Scan ( scan Index , Ġkey Scan Range . equal Pairs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġscan Index ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan Setup ?. invoke ( processed Scan Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( processed Scan Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTable Scan Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Store ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Accessor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn F amilies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Scan Index . direction , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Scan Range , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Record ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIndex Scan Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Index ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Accessor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn F amilies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Scan Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Scan Range , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Record ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġ< DM : ĠIs Root Values DataModel < P >, ĠP : Property Definitions > Ġshould Process Record ( ĊĠĠĠ Ġdb Accessor : ĠDB Accessor , ĊĠĠĠ Ġcolumn F amilies : ĠTable Column F amilies , ĊĠĠĠ Ġread Options : ĠRead Options , ĊĠĠĠ Ġkey : ĠKey <* >, ĊĠĠĠ Ġcreated Version : ĠU Long ?, ĊĠĠĠ Ġscan Request : ĠIs Scan Request < DM , ĠP , Ġ* >, ĊĠĠĠ Ġscan Range : ĠKey Scan Ranges Ċ ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( created Version Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġrecord Ġwas Ġnot Ġcreated ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ġelse Ġif Ġ( scan Range . key Before Start ( key . bytes ) Ġ|| Ġ! scan Range . key Within Ranges ( key . bytes , Ġ 0 ) Ġ|| Ġ! scan Range . matches Partial s ( key . bytes )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġ! scan Request . shouldBe Filtered ( db Accessor , Ġcolumn F amilies , Ġread Options , Ġkey . bytes , Ġ 0 , Ġkey . size , Ġcreated Version , Ġscan Request . to Version ) Ċ } Ċ