/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠCouch base , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . couch base . client . kotlin Ċ Ċ import Ġcom . couch base . client . core . Core Ċ import Ġcom . couch base . client . core . cn c . Tracing Identifiers Ċ import Ġcom . couch base . client . core . config . Bucket Config Ċ import Ġcom . couch base . client . core . diagnostics . Cluster State Ċ import Ġcom . couch base . client . core . diagnostics . Wait Until Ready Helper Ċ import Ġcom . couch base . client . core . error . Un amb iguous TimeoutException Ċ import Ġcom . couch base . client . core . error . View NotFoundException Ċ import Ġcom . couch base . client . core . io . Collection Identifier . DEFAULT _ SCOPE Ċ import Ġcom . couch base . client . core . msg . view . View Request Ċ import Ġcom . couch base . client . core . service . ServiceType Ċ import Ġcom . couch base . client . core . util . Bucket Config Util Ċ import Ġcom . couch base . client . core . util . Url Query StringBuilder Ċ import Ġcom . couch base . client . kotlin . annotations . Volatile C ouch base Api Ċ import Ġcom . couch base . client . kotlin . codec . Json Serializer Ċ import Ġcom . couch base . client . kotlin . codec . type Ref Ċ import Ġcom . couch base . client . kotlin . env . Cluster Environment Ċ import Ġcom . couch base . client . kotlin . internal . to Optional Ċ import Ġcom . couch base . client . kotlin . internal . toString Utf 8 Ċ import Ġcom . couch base . client . kotlin . manager . view . View Index Manager Ċ import Ġcom . couch base . client . kotlin . view . Design Document Namespace Ċ import Ġcom . couch base . client . kotlin . view . Design Document Namespace . DE VELO P MENT Ċ import Ġcom . couch base . client . kotlin . view . Design Document Namespace . PRO DU CTION Ċ import Ġcom . couch base . client . kotlin . view . View Error Mode Ċ import Ġcom . couch base . client . kotlin . view . View Flow Item Ċ import Ġcom . couch base . client . kotlin . view . ViewGroup Level Ċ import Ġcom . couch base . client . kotlin . view . View Metadata Ċ import Ġcom . couch base . client . kotlin . view . View Row Ċ import Ġcom . couch base . client . kotlin . view . View Scan Consistency Ċ import Ġcom . couch base . client . kotlin . view . View Selection Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . emit All Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . single Ċ import Ġkotlinx . coroutines . future . await Ċ import Ġkotlinx . coroutines . reactive . as Flow Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . to Java Duration Ċ Ċ public Ġclass ĠBucket Ġinternal Ġconstructor ( ĊĠĠĠ Ġpublic Ġval Ġname : ĠString , ĊĠĠĠ Ġpublic Ġval Ġcluster : ĠCluster , ĊĠĠĠ Ġinternal Ġval Ġcore : ĠCore , Ċ ) Ġ{ ĊĠĠĠ Ġinternal Ġval Ġenv Ġ= Ġcore . context (). environment () Ġas ĠCluster Environment ĊĊĠĠĠ Ġprivate Ġval Ġscope Cache Ġ= ĠConcurrent HashMap < String , ĠScope >() ĊĊĠĠĠ Ġpublic Ġval Ġview Indexes : ĠView Index Manager Ġ= ĠView Index Manager ( this ); ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġdefault Ġcollection Ġin Ġthis Ġbucket 's Ġdefault Ġscope . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġdefault Collection (): ĠCollection Ġ= Ġdefault Scope (). default Collection () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġrequested Ġcollection Ġin Ġthe Ġbucket 's Ġdefault Ġscope . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġcollection ( name : ĠString ): ĠCollection Ġ= Ġdefault Scope (). collection ( name ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthis Ġbucket 's Ġdefault Ġscope . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġdefault Scope (): ĠScope Ġ= Ġscope ( DEFAULT _ SCOPE ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġrequested Ġscope . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġscope ( name : ĠString ): ĠScope Ġ= ĊĠĠĠĠĠĠĠ Ġscope Cache . compute If Absent ( name ) Ġ{ ĠScope ( name , Ġthis ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠQueries Ġa Ġview Ġon Ġthe Ġbucket . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠView NotFoundException Ġif Ġthe Ġview Ġor Ġdesign Ġdocument Ġis Ġnot Ġfound Ġon Ġthe Ġserver . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ sample Ġcom . couch base . client . kotlin . samples . buffered View Query ĊĠĠĠĠ Ġ* Ġ@ sample Ġcom . couch base . client . kotlin . samples . streaming View Query ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġview Query ( ĊĠĠĠĠĠĠĠ Ġdesign Document : ĠString , ĊĠĠĠĠĠĠĠ Ġview Name : ĠString , ĊĠĠĠĠĠĠĠ Ġcommon : ĠCommon Options Ġ= ĠCommon Options . Default , ĊĠĠĠĠĠĠĠ Ġserializer : ĠJsonSerializer ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġnamespace : ĠDesign Document Namespace Ġ= ĠPRO DU CTION , ĊĠĠĠĠĠĠĠ Ġscan Consistency : ĠView Scan Consistency Ġ= ĠView Scan Consistency . update After (), ĊĠĠĠĠĠĠĠ Ġselection : ĠView Selection Ġ= ĠView Selection . range (), ĊĠĠĠĠĠĠĠ Ġskip : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġreduce : ĠBoolean Ġ= Ġtrue , Ġ// Ġset Ġto Ġfalse Ġto Ġdisable Ġreduce Ġfunction . ĠIf Ġview Ġhas Ġno Ġreduce Ġfunction , Ġhas Ġno Ġeffect . ĊĠĠĠĠĠĠĠ Ġgroup : ĠViewGroup Level Ġ= ĠViewGroup Level . none (), ĊĠĠĠĠĠĠĠ ĠonError : ĠView Error Mode Ġ= ĠView Error Mode . CONTINUE , ĊĠĠĠĠĠĠĠ Ġdebug : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġraw : ĠMap < String , ĠString >? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠFlow < View Flow Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Serializer Ġ= Ġserializer Ġ?: Ġenv . json Serializer ĊĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠUrl Query StringBuilder . create For Url Safe Names () ĊĊĠĠĠĠĠĠĠ Ġscan Consistency . inject ( params ) ĊĠĠĠĠĠĠĠ Ġselection . inject ( params ) ĊĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġselection . keys () ĊĠĠĠĠĠĠĠ Ġval Ġpost Body : ĠByteArray ? Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . isEmpty () Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . size Ġ== Ġ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . set (" key ", Ġactual Serializer . serialize ( keys . first (), Ġtype Ref ()). toString Utf 8 ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġactual Serializer . serialize ( map Of (" keys " Ġto Ġkeys ), Ġtype Ref ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! reduce ) Ġparams . set (" reduce ", Ġreduce ) ĊĠĠĠĠĠĠĠ Ġgroup . inject ( params ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( onError Ġ!= ĠView Error Mode . CONTINUE ) Ġparams . set (" on _ error ", ĠonError . encoded ) ĊĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġparams . set (" debug ", Ġdebug ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Non Negative ( value : ĠInt ?, Ġname : ĠString ) Ġ= Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it Ġ>= Ġ 0 ) Ġ{ Ġ"' $ name ' Ġmust Ġbe Ġnon - negative Ġbut Ġgot Ġ$ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . add ( name , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( skip Ġ!= Ġ 0 ) Ġadd Non Negative ( skip , Ġ" skip ") ĊĠĠĠĠĠĠĠ Ġadd Non Negative ( limit , Ġ" limit ") ĊĊĠĠĠĠĠĠĠ Ġraw ?. let Ġ{ Ġit . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> Ġparams . set ( key , Ġvalue ) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġwith ( env ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon . actual View Timeout (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcore . context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon . actual Retry Strategy (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcore . context (). auth enticator (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Bucket . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesign Document , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Body . to Optional (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ== ĠDE VELO P MENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon . actual Span ( Tracing Identifiers . SPAN _ REQUEST _ V IE WS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . context (). client Context ( common . client Context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcore . send ( request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrequest . response (). await () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit All ( response . rows (). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠView Row ( it . data (), Ġactual Serializer ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit All ( response . tr ailer (). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠView Metadata ( response . header (), Ġit ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . logic ally Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠW aits Ġuntil ĠSDK Ġbootstrap Ġis Ġcomplete Ġand Ġthe Ġdesired Ġ[ Cluster State ] ĊĠĠĠĠ Ġ* Ġis Ġobserved . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠCalling Ġthis Ġmethod Ġis Ġoptional . ĠWithout Ġit , Ġoperations Ġperformed ĊĠĠĠĠ Ġ* Ġbefore Ġthe Ġbucket Ġis Ġready Ġmay Ġtake Ġlonger Ġthan Ġusual , Ġsince ĊĠĠĠĠ Ġ* Ġthe ĠSDK Ġneeds Ġto Ġload Ġthe Ġbucket Ġconfig Ġfrom Ġthe Ġserver Ġfirst . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtimeout Ġthe Ġmaximum Ġtime Ġto Ġwait Ġfor Ġread iness . ĊĠĠĠĠ Ġ* Ġ@ param Ġservices Ġthe Ġservice Ġtypes Ġto Ġwait Ġfor , Ġor Ġempty Ġset Ġto Ġwait Ġfor Ġall Ġservices . ĊĠĠĠĠ Ġ* Ġ@ throws ĠUn amb iguous TimeoutException Ġif Ġnot Ġready Ġbefore Ġtimeout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġsuspend Ġfun Ġwait Until Ready ( ĊĠĠĠĠĠĠĠ Ġtimeout : ĠDuration , ĊĠĠĠĠĠĠĠ Ġservices : ĠSet < ServiceType > Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠ Ġdesired State : ĠCluster State Ġ= ĠCluster State . ON LINE , ĊĠĠĠ Ġ): ĠBucket Ġ{ ĊĠĠĠĠĠĠĠ ĠWait Until Ready Helper . wait Until Ready ( core , Ġservices , Ġtimeout . to Java Duration (), Ġdesired State , Ġname . to Optional ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. await () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Volatile C ouch base Api ĊĠĠĠ Ġpublic Ġsuspend Ġfun Ġconfig ( timeout : ĠDuration ): ĠBucket Config Ġ= ĊĠĠĠĠĠĠĠ Ġcore . cluster Config (). bucket Config ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠBucket Config Util . waitFor Bucket Config ( core , Ġname , Ġtimeout . to Java Duration ()). as Flow (). single () Ċ } Ċ