/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 ĠAnd ers ĠM ikk els en Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . n anno q . tools . repository . dynamodb . operators Ċ Ċ import Ġcom . amazonaws . services . dynamodb v 2 . data modeling . D ynamoDB Index Range Key Ċ import Ġcom . amazonaws . services . dynamodb v 2 . data modeling . D ynamoDB Query Expression Ċ import Ġcom . amazonaws . services . dynamodb v 2 . data modeling . D ynamoDB Scan Expression Ċ import Ġcom . amazonaws . services . dynamodb v 2 . model . AttributeValue Ċ import Ġcom . amazonaws . services . dynamodb v 2 . model . Comparison Operator Ċ import Ġcom . amazonaws . services . dynamodb v 2 . model . Condition Ċ import Ġcom . n anno q . tools . repository . dynamodb . D ynamoDB Repository Ċ import Ġcom . n anno q . tools . repository . dynamodb . D ynamoDB Repository . Companion . P AG INATION _ INDEX Ċ import Ġcom . n anno q . tools . repository . models . Cache able Ċ import Ġcom . n anno q . tools . repository . models . D ynamoDB Model Ċ import Ġcom . n anno q . tools . repository . models . ET ag able Ċ import Ġcom . n anno q . tools . repository . models . Model Ċ import Ġcom . n anno q . tools . repository . repository . Repository . Companion . LIMIT _ KEY Ċ import Ġcom . n anno q . tools . repository . repository . Repository . Companion . MULTIPLE _ IDS _ KEY Ċ import Ġcom . n anno q . tools . repository . repository . Repository . Companion . ORDER _ BY _ KEY Ċ import Ġcom . n anno q . tools . repository . repository . Repository . Companion . PRO JECTION _ KEY Ċ import Ġcom . n anno q . tools . repository . utils . Filter Parameter Ċ import Ġcom . n anno q . tools . repository . utils . OrderBy Parameter Ċ import Ġio . vertx . core . json . Decode Exception Ċ import Ġio . vertx . core . json . Encode Exception Ċ import Ġio . vertx . core . json . Json Ċ import Ġio . vertx . core . json . JsonArray Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġio . vertx . core . logging . LoggerFactory Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . util . Arrays Ċ import Ġjava . util . Base 6 4 Ċ import Ġjava . util . Queue Ċ import Ġjava . util . concurrent . Concurrent Linked Queue Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġjava . util . stream . Collectors . join ing Ċ import Ġjava . util . stream . Collectors . toList Ċ import Ġjava . util . stream . Int Stream Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġis Ġused Ġto Ġdefine Ġthe Ġparameters Ġfor Ġvarious Ġoperations Ġfor Ġthe ĠD ynamoDB Repository . Ċ Ġ* Ċ Ġ* Ġ@ author ĠAnd ers ĠM ikk els en Ċ Ġ* Ġ@ version Ġ 1 7 . 1 1 . 2 0 1 7 Ċ Ġ*/ Ċ class ĠD ynamoDB Parameters < E >( ĊĠĠĠ Ġprivate Ġval ĠTYPE : ĠClass < E >, ĊĠĠĠ Ġprivate Ġval Ġdb : ĠD ynamoDB Repository < E >, ĊĠĠĠ Ġprivate Ġval ĠHASH _ IDENTIFIER : ĠString , ĊĠĠĠ Ġprivate Ġval ĠIDENT IFIER : ĠString ?, ĊĠĠĠ Ġprivate Ġval ĠP AG INATION _ IDENTIFIER : ĠString ? Ċ ) ĊĠĠĠĠĠĠĠ Ġwhere ĠE Ġ: ĠE Tag able , ĠE Ġ: ĠCache able , ĠE Ġ: ĠD ynamoDB Model , ĠE Ġ: ĠModel Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpagination Index : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( P AG INATION _ IDENTIFIER Ġ!= Ġnull Ġ&& ĠP AG INATION _ IDENTIFIER Ġ!= Ġ"") ĠP AG INATION _ INDEX Ġelse Ġnull ĊĊĠĠĠ Ġfun Ġbuild Parameters ( ĊĠĠĠĠĠĠĠ Ġquery Map : ĠMap < String , ĠList < String >>, ĊĠĠĠĠĠĠĠ Ġfields : ĠArray < Field >, ĊĠĠĠĠĠĠĠ Ġmethods : ĠArray < Method >, ĊĠĠĠĠĠĠĠ Ġerrors : ĠJsonObject , ĊĠĠĠĠĠĠĠ Ġparams : ĠMutable Map < String , ĠList < Filter Parameter >>, ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt Array , ĊĠĠĠĠĠĠĠ ĠorderBy Queue : ĠQueue < OrderBy Parameter >, ĊĠĠĠĠĠĠĠ Ġindex Name : ĠArray < String > ĊĠĠĠ Ġ): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġquery Map . keys . forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . equals ( LIMIT _ KEY , Ġignore Case Ġ= Ġtrue ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . equals ( MULTIPLE _ IDS _ KEY , Ġignore Case Ġ= Ġtrue ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . equals ( ORDER _ BY _ KEY , Ġignore Case Ġ= Ġtrue ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . equals ( PRO JECTION _ KEY , Ġignore Case Ġ= Ġtrue ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . has Field ( fields , Ġkey ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġquery Map [ key ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . equals ( PRO JECTION _ KEY , Ġignore Case Ġ= Ġtrue ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . equals ( MULTIPLE _ IDS _ KEY , Ġignore Case Ġ= Ġtrue ) Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . isDebugEnabled Ġ-> Ġlogger . debug (" Ign oring ĠProjection ĠKey ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ== Ġnull Ġ-> Ġerrors . put (" field _ null ", Ġ" Value Ġin Ġ'$ key ' Ġcannot Ġbe Ġnull !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . equals ( ORDER _ BY _ KEY , Ġignore Case Ġ= Ġtrue ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġjson Array : ĠJson Array ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Array Ġ= ĠJson Array ( values [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( array ParseException : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Array Ġ= ĠJson Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Array . add ( JsonObject ( values [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠorderBy Param Count Ġ= Ġint ArrayOf ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Array . size () Ġ== Ġ 1 Ġ-> Ġjson Array . stream (). forEach Ġ{ ĠorderBy Param Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠorderBy Parameter Ġ= ĠJson . decode Value < OrderBy Parameter >( orderBy Param . toString (), ĠOrder By Parameter :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Parameter . isValid Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . stream ( methods ). forEach Ġ{ Ġmethod Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Range Key Ġ= Ġmethod . getDeclared Annotation < D ynamoDB Index Range Key >( D ynamoDB Index Range Key :: class . java ) Ċ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Range Key Ġ!= Ġnull Ġ&& Ġstrip Get ( method . name ) Ġ== ĠorderBy Parameter . field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Name [ 0 ] Ġ= Ġindex Range Key . local Secondary Index Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Queue . add ( orderBy Parameter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Name . isEmpty () Ġ|| ĠorderBy Queue . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . put (" orderBy _ parameter _" Ġ+ ĠorderBy Param Count [ 0 ] Ġ+ Ġ"_ error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġis Ġnot Ġa Ġvalid Ġremote Index !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerrors . put (" orderBy _ parameter _" Ġ+ ĠorderBy Param Count [ 0 ] Ġ+ Ġ"_ error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Field Ġcannot Ġbe Ġnull !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Param Count [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerrors . put (" orderBy _ limit _ error ", Ġ" You Ġmust Ġand Ġmay Ġonly Ġorder Ġby Ġa Ġsingle Ġremote Index !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . equals ( LIMIT _ KEY , Ġignore Case Ġ= Ġtrue ) Ġ-> Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Parsing Ġlimit .. ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit [ 0 ] Ġ= ĠInteger . parseInt ( values [ 0 ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Limit Ġis : Ġ" Ġ+ Ġlimit [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit [ 0 ] Ġ< Ġ 1 Ġ-> Ġerrors . put ( key Ġ+ Ġ"_ negative _ error ", Ġ" Limit Ġmust Ġbe Ġa Ġwhole Ġpositive ĠInteger !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit [ 0 ] Ġ> Ġ 1 0 0 Ġ-> Ġerrors . put ( key Ġ+ Ġ"_ ex ceed _ max _ error ", Ġ" Maximum Ġlimit Ġis Ġ 1 0 0 !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( n fe : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . put ( key Ġ+ Ġ"_ error ", Ġ" Limit Ġmust Ġbe Ġa Ġwhole Ġpositive ĠInteger !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . parse Param ( TYPE , Ġvalues [ 0 ], Ġkey , Ġparams , Ġerrors ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Could Ġnot Ġparse Ġfilter Params Ġas Ġa ĠJsonObject , Ġattempting Ġarray ...", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJson Array ( values [ 0 ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Array . forEach Ġ{ ĠjsonObject AsString Ġ-> Ġdb . parse Param ( TYPE , ĠjsonObject AsString . toString (), Ġkey , Ġparams , Ġerrors ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( array Exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Unable Ġto Ġparse Ġjson Ġas Ġarray :" Ġ+ Ġvalues [ 0 ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . put ( key Ġ+ Ġ"_ value _ json _ error ", Ġ" Unable Ġto Ġparse Ġthis Ġjson ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerrors . put ( key Ġ+ Ġ"_ field _ error ", Ġ" This Ġfield Ġdoes Ġnot Ġexist Ġon Ġthe Ġselected Ġresource .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġerrors ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstrip Get ( string : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew String Ġ= Ġstring . replace (" get ", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġnew String . toCharArray () ĊĠĠĠĠĠĠĠ Ġc [ 0 ] Ġ= Ġc [ 0 ] Ġ+ Ġ 3 2 ĊĊĠĠĠĠĠĠĠ Ġreturn ĠString ( c ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġapply Parameters ( ĊĠĠĠĠĠĠĠ Ġpeek : ĠOrder By Parameter ?, ĊĠĠĠĠĠĠĠ Ġparams : ĠMap < String , ĠList < Filter Parameter >> ? ĊĠĠĠ Ġ): ĠD ynamoDB Query Expression < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilter Expression Ġ= ĠD ynamoDB Query Expression < E >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Condition String Ġ= ĠarrayOf ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe an Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe av Ġ= ĠHashMap < String , ĠAttribute Value >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Count Ġ= Ġint ArrayOf ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġint ArrayOf ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Size Ġ= Ġparams . keys . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . keys . stream (). map < List < Filter Parameter >> Ġ{ Ġparams [ it ] Ġ}. forEach Ġ{ Ġparam List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorder Counter Ġ= Ġint ArrayOf ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ"(" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam List . size Ġ> Ġ 1 Ġ&& Ġis Range Key ( peek , Ġparam List [ 0 ]) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! is Illegal Range d Key QueryParams ( param List ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Multiple Range Key Condition ( filter Expression , Ġparams . size , Ġparam List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam List [ 0 ]. field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam List . forEach Ġ{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġif Ġ( param . field ! ![ param . field !!. length Ġ- Ġ 2 ] Ġ== Ġ'_ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . field !!. substring ( 0 , Ġparam . field !!. length Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . field ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName Ġ!= Ġnull ) Ġe an [" # name " Ġ+ Ġcount [ 0 ]] Ġ= ĠfieldName ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Eq Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . EQ , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . eq !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . eq !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ= Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Ne Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . NE , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . eq !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . ne !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ<> Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Between Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . B ETWEEN , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 )] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ> Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ" Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# name " Ġ+ Ġcur Count Ġ+ Ġ" Ġ< Ġ" Ġ+ Ġ" Ġ: val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ 0 ] Ġ= Ġcur Count Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Gt Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . GT , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ> Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Lt Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . LT , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ< Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . isIn clusive Between Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . B ETWEEN , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString (), ĠComparison Operator . GE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString (), ĠComparison Operator . LE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 )] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ>= Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ" Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# name " Ġ+ Ġcur Count Ġ+ Ġ" Ġ= < Ġ" Ġ+ Ġ" Ġ: val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ 0 ] Ġ= Ġcur Count Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Ge Lt Variable Between Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . B ETWEEN , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString (), ĠComparison Operator . GE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 )] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ>= Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ" Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# name " Ġ+ Ġcur Count Ġ+ Ġ" Ġ< Ġ" Ġ+ Ġ" Ġ: val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ 0 ] Ġ= Ġcur Count Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Le Gt Variable Between Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . B ETWEEN , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString (), ĠComparison Operator . LE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 )] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ<= Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ" Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# name " Ġ+ Ġcur Count Ġ+ Ġ" Ġ> Ġ" Ġ+ Ġ" Ġ: val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ 0 ] Ġ= Ġcur Count Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Ge Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . GE , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ>= Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Le Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . LE , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ<= Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Contains Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . contains !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" contains (" Ġ+ Ġ"# name " Ġ+ Ġcur Count Ġ+ Ġ", Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . isNot Contains Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . not Contains !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" not Ġcontains (" Ġ+ Ġ"# name " Ġ+ Ġcur Count Ġ+ Ġ", Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Begin sWith Ġ-> Ġif Ġ( is Range Key ( peek , ĠfieldName , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Range Key Condition ( filter Expression , Ġparams . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek Ġ!= Ġnull ) Ġpeek . field Ġelse Ġparam . field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparison Operator . BEGIN S _ WITH , Ġparam . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( fieldName , Ġparam . begin sWith !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . begin sWith !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" begin s _ with (" Ġ+ Ġ"# name " Ġ+ Ġcur Count Ġ+ Ġ", Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . isIn Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin List Ġ= Ġin Query ToString Chain ( fieldName !! , Ġparam .` in `) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠConcurrent Linked Queue < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġval Counter Ġ= ĠAtomicInteger () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin List . l . forEach Ġ{ Ġav Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Val Key Ġ= Ġ": in Val " Ġ+ Ġval Counter . get And Increment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . add ( current Val Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ current Val Key ] Ġ= Ġav ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" ĠIN Ġ(" Ġ+ Ġkeys . stream (). collect ( join ing (", Ġ")) Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Counter [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ]. endsWith (" (" ) Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ]. equals (" (", Ġignore Case Ġ= Ġtrue ) Ġ-> Ġkey Condition String [ 0 ] Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġkey Condition String [ 0 ] Ġ= Ġkey Condition String [ 0 ]. substring ( 0 , Ġkey Condition String [ 0 ]. lastIndexOf (" ) ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ")" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( param Size Ġ> Ġ 1 Ġ&& Ġparam Count [ 0 ] Ġ< Ġparam Size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ" ĠAND Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Count [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e an . size Ġ> Ġ 0 Ġ&& Ġe av . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Expression . with Filter Expression ( key Condition String [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Expression Attribute Names ( e an ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Expression Attribute Values ( e av ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" RANGE ĠKEY ĠEXPRESS ION ĠIS : Ġ" Ġ+ Ġfilter Expression . range Key Conditions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" FILTER ĠEXPRESS ION ĠIS : Ġ" Ġ+ Ġfilter Expression . filter Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" NAMES : Ġ" Ġ+ ĠJson . encode P ret til y ( e an )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Values : Ġ" Ġ+ ĠJson . encode P ret til y ( e av )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfilter Expression ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġin Query ToString Chain ( fieldName : ĠString , Ġ` in `: ĠArray < Any >? ): ĠAttribute Value Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAttribute Value (). with L ( Arrays . stream (` in ` !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġo Ġ-> Ġdb . create AttributeValue ( fieldName , Ġo . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( toList ()). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Range Key ( peek : ĠOrder By Parameter ?, Ġparam : ĠFilter Parameter ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Range Key ( peek , Ġif Ġ( param . field ! ![ param . field !!. length Ġ- Ġ 2 ] Ġ== Ġ'_ ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam . field !!. substring ( 0 , Ġparam . field !!. length Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam . field , Ġparam ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Range Key ( peek : ĠOrder By Parameter ?, ĠfieldName : ĠString ?, Ġparam : ĠFilter Parameter ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpeek Ġ!= Ġnull Ġ&& Ġpeek . field !!. equals ( fieldName !! , Ġignore Case Ġ= Ġtrue ) Ġ|| Ġpeek Ġ== Ġnull Ġ&& Ġparam . field !!. equals ( P AG INATION _ IDENTIFIER !! , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġapply Parameters ( params : ĠMap < String , ĠList < Filter Parameter >> ?): ĠD ynamoDB Scan Expression Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilter Expression Ġ= ĠD ynamoDB Scan Expression () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Condition String Ġ= ĠarrayOf ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe an Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe av Ġ= ĠHashMap < String , ĠAttribute Value >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Count Ġ= Ġint ArrayOf ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġint ArrayOf ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Size Ġ= Ġparams . keys . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . keys . stream (). map < List < Filter Parameter >> Ġ{ Ġparams [ it ] Ġ}. forEach Ġ{ Ġparam List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ"(" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorder Counter Ġ= Ġint ArrayOf ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam List . forEach Ġ{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġif Ġ( param . field ! ![ param . field !!. length Ġ- Ġ 2 ] Ġ== Ġ'_ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . field !!. substring ( 0 , Ġparam . field !!. length Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . field ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName Ġ!= Ġnull ) Ġe an [" # name " Ġ+ Ġcount [ 0 ]] Ġ= ĠfieldName ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Eq Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . eq !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ= Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Ne Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . ne !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ<> Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Between Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 )] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ> Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ" Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# name " Ġ+ Ġcur Count Ġ+ Ġ" Ġ< Ġ" Ġ+ Ġ" Ġ: val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ 0 ] Ġ= Ġcur Count Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Gt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ> Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Lt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ< Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . isIn clusive Between Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 )] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ>= Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ" Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# name " Ġ+ Ġcur Count Ġ+ Ġ" Ġ= < Ġ" Ġ+ Ġ" Ġ: val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ 0 ] Ġ= Ġcur Count Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Ge Lt Variable Between Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 )] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . lt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ>= Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ" Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# name " Ġ+ Ġcur Count Ġ+ Ġ" Ġ< Ġ" Ġ+ Ġ" Ġ: val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ 0 ] Ġ= Ġcur Count Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Le Gt Variable Between Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 )] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . gt !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ<= Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ" Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# name " Ġ+ Ġcur Count Ġ+ Ġ" Ġ> Ġ" Ġ+ Ġ" Ġ: val " Ġ+ Ġ( cur Count Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ 0 ] Ġ= Ġcur Count Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Ge Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . ge !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ>= Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Le Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . le !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" Ġ<= Ġ: val " Ġ+ Ġcur Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Contains Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . contains !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" contains (" Ġ+ Ġ"# name " Ġ+ Ġcur Count Ġ+ Ġ", Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . isNot Contains Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . not Contains !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" not Ġcontains (" Ġ+ Ġ"# name " Ġ+ Ġcur Count Ġ+ Ġ", Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . is Begin sWith Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ ": val $ cur Count "] Ġ= Ġdb . create AttributeValue ( fieldName , Ġparam . begin sWith !!. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" begin s _ with (" Ġ+ Ġ"# name " Ġ+ Ġcur Count Ġ+ Ġ", Ġ: val " Ġ+ Ġcur Count Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . isIn Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin List Ġ= Ġin Query ToString Chain ( fieldName !! , Ġparam .` in `) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠConcurrent Linked Queue < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġval Counter Ġ= ĠAtomicInteger () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin List . l . forEach Ġ{ Ġav Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Val Key Ġ= Ġ": in Val " Ġ+ Ġval Counter . get And Increment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . add ( current Val Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe av [ current Val Key ] Ġ= Ġav ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount [ 0 ] ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ( if Ġ( order Counter [ 0 ] Ġ== Ġ 0 ) Ġ"" Ġelse Ġ" Ġ" Ġ+ Ġparam . type Ġ+ Ġ" Ġ") Ġ+ Ġ"# name " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Count Ġ+ Ġ" ĠIN Ġ(" Ġ+ Ġkeys . stream (). collect ( join ing (", Ġ")) Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Counter [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ")" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( param Size Ġ> Ġ 1 Ġ&& Ġparam Count [ 0 ] Ġ< Ġparam Size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Condition String [ 0 ] Ġ+= Ġ" ĠAND Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Count [ 0 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e an . size Ġ> Ġ 0 Ġ&& Ġe av . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Expression . with Filter Expression ( key Condition String [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Expression Attribute Names ( e an ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Expression Attribute Values ( e av ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" SCAN ĠEXPRESS ION ĠIS : Ġ" Ġ+ Ġfilter Expression . filter Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" NAMES : Ġ" Ġ+ ĠJson . encode P ret til y ( e an )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Values : Ġ" Ġ+ ĠJson . encode P ret til y ( e av )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfilter Expression ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Range Key Condition ( ĊĠĠĠĠĠĠĠ Ġfilter Expression : ĠD ynamoDB Query Expression < E >, ĊĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠ Ġfield : ĠString ?, ĊĠĠĠĠĠĠĠ Ġcomparator : ĠComparison Operator , ĊĠĠĠĠĠĠĠ Ġtype : ĠString ?, ĊĠĠĠĠĠĠĠ Ġvar arg Ġattribute Values : ĠAttribute Value ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter Expression . with Range Key Condition ( field , ĠCondition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Comparison Operator ( comparator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List (* attribute Values )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 1 ) Ġfilter Expression . with Conditional Operator ( type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Multiple Range Key Condition ( ĊĠĠĠĠĠĠĠ Ġfilter Expression : ĠD ynamoDB Query Expression < E >, ĊĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠ Ġparam List : ĠList < Filter Parameter >, ĊĠĠĠĠĠĠĠ Ġrange KeyName : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( param List . size Ġ> Ġ 2 ) Ġthrow ĠIllegalArgumentException (" Cannot Ġquery Ġon Ġmore Ġthan Ġtwo Ġparams Ġon Ġa Ġrange Ġkey !") ĊĊĠĠĠĠĠĠĠ Ġval Ġparam One Ġ= Ġparam List [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġparam Two Ġ= Ġparam List [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġcondition Ġ= ĠCondition () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam One . is Gt Ġ&& Ġparam Two . is Lt Ġ-> Ġcondition . with Comparison Operator ( Comparison Operator . B ETWEEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param One . field , Ġparam One . gt !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param Two . field , Ġparam Two . lt !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam One . is Lt Ġ&& Ġparam Two . is Gt Ġ-> Ġcondition . with Comparison Operator ( Comparison Operator . B ETWEEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param Two . field , Ġparam Two . gt !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param One . field , Ġparam One . lt !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam One . is Le Ġ&& Ġparam Two . is Ge Ġ-> Ġcondition . with Comparison Operator ( Comparison Operator . B ETWEEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param Two . field , Ġparam Two . ge !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param One . field , Ġparam One . le !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam One . is Ge Ġ&& Ġparam Two . is Le Ġ-> Ġcondition . with Comparison Operator ( Comparison Operator . B ETWEEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param One . field , Ġparam One . ge !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param Two . field , Ġparam Two . le !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam One . is Ge Ġ&& Ġparam Two . is Lt Ġ-> Ġcondition . with Comparison Operator ( Comparison Operator . B ETWEEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param One . field , Ġparam One . ge !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param Two . field , Ġparam Two . lt !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam One . is Lt Ġ&& Ġparam Two . is Ge Ġ-> Ġcondition . with Comparison Operator ( Comparison Operator . B ETWEEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param Two . field , Ġparam Two . ge !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param One . field , Ġparam One . lt !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam One . is Le Ġ&& Ġparam Two . is Gt Ġ-> Ġcondition . with Comparison Operator ( Comparison Operator . B ETWEEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param Two . field , Ġparam Two . gt !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param One . field , Ġparam One . le !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam One . is Gt Ġ&& Ġparam Two . is Le Ġ-> Ġcondition . with Comparison Operator ( Comparison Operator . B ETWEEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with AttributeValue List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param One . field , Ġparam One . gt !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . create AttributeValue ( param Two . field , Ġparam Two . le !!. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" This Ġis Ġan Ġinvalid Ġquery !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfilter Expression . with Range Key Condition ( range KeyName , Ġcondition ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 1 ) Ġfilter Expression . with Conditional Operator (" AND ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġapply OrderBy ( ĊĠĠĠĠĠĠĠ ĠorderBy Queue : ĠQueue < OrderBy Parameter > ?, ĊĠĠĠĠĠĠĠ ĠG SI : ĠString ?, ĊĠĠĠĠĠĠĠ Ġindex Name : ĠString ?, ĊĠĠĠĠĠĠĠ Ġfilter Expression : ĠD ynamoDB Query Expression < E > ĊĠĠĠ Ġ): ĠD ynamoDB Query Expression < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Queue Ġ== Ġnull Ġ|| ĠorderBy Queue . size Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG SI Ġ!= Ġnull Ġ-> Ġfilter Expression . set Index Name ( G SI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfilter Expression . set Index Name ( pagination Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Expression . set Scan Index Forward ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠorderBy Queue . forEach Ġ{ ĠorderBy Parameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG SI Ġ!= Ġnull Ġ-> Ġfilter Expression . set Index Name ( G SI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfilter Expression . set Index Name ( index Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Expression . set Scan Index Forward ( orderBy Parameter . is Asc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfilter Expression ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġis Illegal Range d Key QueryParams ( name Params : ĠList < Filter Parameter >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname Params . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Match Ġ{ Ġit . is Illegal Range d Key Param Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġbuild Projection s ( projection s : ĠArray < String > ?, Ġindex Name : ĠString ): ĠArray < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnew Projection s Ġ= Ġprojection s ĊĠĠĠĠĠĠĠ Ġif Ġ( new Projection s Ġ== Ġnull Ġ|| Ġnew Projection s . isEmpty ()) Ġreturn Ġnew Projection s ĊĠĠĠĠĠĠĠ Ġval Ġfinal Projection s Ġ= Ġnew Projection s ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Arrays . stream ( final Projection s ). none Match Ġ{ Ġp Ġ-> Ġp . equals ( HASH _ IDENTIFIER , Ġignore Case Ġ= Ġtrue ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Projection Array Ġ= ĠarrayOf Null s < String >( final Projection s . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Stream . range ( 0 , Ġfinal Projection s . size ). forEach Ġ{ Ġi Ġ-> Ġnew Projection Array [ i ] Ġ= Ġfinal Projection s [ i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Projection Array [ final Projection s . size ] Ġ= ĠHASH _ IDENTIFIER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Projection s Ġ= Ġnew Projection Array . require No Null s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfinal Projection s 2 Ġ= Ġnew Projection s ĊĊĠĠĠĠĠĠĠ Ġif Ġ( db . has Range Key ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Arrays . stream ( final Projection s 2 ). none Match Ġ{ Ġp Ġ-> Ġp . equals ( IDENTIFIER , Ġignore Case Ġ= Ġtrue ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Projection Array Ġ= ĠarrayOf Null s < String >( final Projection s 2 . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Stream . range ( 0 , Ġfinal Projection s 2 . size ). forEach Ġ{ Ġi Ġ-> Ġnew Projection Array [ i ] Ġ= Ġfinal Projection s 2 [ i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Projection Array [ final Projection s 2 . size ] Ġ= ĠIDENT IFIER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Projection s Ġ= Ġnew Projection Array . require No Null s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfinal Projection s 3 Ġ= Ġnew Projection s ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Arrays . stream ( final Projection s 3 ). none Match Ġ{ Ġp Ġ-> Ġp . equals ( index Name , Ġignore Case Ġ= Ġtrue ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Projection Array Ġ= ĠarrayOf Null s < String >( final Projection s 3 . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Stream . range ( 0 , Ġfinal Projection s 3 . size ). forEach Ġ{ Ġi Ġ-> Ġnew Projection Array [ i ] Ġ= Ġfinal Projection s 3 [ i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Projection Array [ final Projection s 3 . size ] Ġ= Ġindex Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Projection s Ġ= Ġnew Projection Array . require No Null s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew Projection s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate PageToken Map ( ĊĠĠĠĠĠĠĠ Ġencoded PageToken : ĠString ?, ĊĠĠĠĠĠĠĠ Ġhash Identifier : ĠString , ĊĠĠĠĠĠĠĠ Ġrange Identifier : ĠString ?, ĊĠĠĠĠĠĠĠ Ġpagination Identifier : ĠString ?, ĊĠĠĠĠĠĠĠ ĠG SI : ĠString ?, ĊĠĠĠĠĠĠĠ ĠG SI _ KEY _ MAP : ĠMap < String , ĠJsonObject > ĊĠĠĠ Ġ): ĠMutable Map < String , ĠAttribute Value >? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpage Token Map : ĠMutable Map < String , ĠAttribute Value >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġpage Token : ĠJsonObject ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġsplit Token : ĠList < String >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( encoded PageToken Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( encoded PageToken Ġ!= Ġ" END _ OF _ LIST ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Tokens Ġ= ĠString ( Base 6 4 . getUrl Decoder (). decode ( encoded PageToken )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Token Ġ= Ġpage Tokens . split (" :" . to Regex (), Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Token Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJsonObject ( String ( Base 6 4 . getUrl Decoder (). decode ( split Token [ 1 ]))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠEncode Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠDecode Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( page Token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Token Map Ġ= ĠHashMap () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Token . getString (" hash ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Value Ġ= ĠAttribute Value (). with S ( page Token . getString (" hash ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( page Token Map Ġas ĠMutable Map < String , ĠAttribute Value >). put If Absent ( hash Identifier , Ġhash Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( range Identifier Ġ!= Ġnull Ġ&& Ġrange Identifier Ġ!= Ġ"" Ġ&& Ġpage Token . getString (" range ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Value Ġ= ĠAttribute Value (). with S ( page Token . getString (" range ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( page Token Map Ġas ĠMutable Map < String , ĠAttribute Value >). put If Absent ( range Identifier , Ġrange Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pagination Identifier Ġ!= Ġnull Ġ&& Ġpagination Identifier Ġ!= Ġ"" Ġ&& Ġpage Token . getString (" index Value ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Value Ġ= Ġdb . create AttributeValue ( pagination Identifier , Ġpage Token . getString (" index Value ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( page Token Map Ġas ĠMutable Map < String , ĠAttribute Value >). put If Absent ( pagination Identifier , Ġpage Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( G SI Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Object Ġ= ĠG SI _ KEY _ MAP [ G SI ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġkey Object ?. getString (" hash ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġkey Object ?. getString (" range ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Token . getString (" G SI H ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg si Hash Ġ= ĠAttribute Value (). with S ( page Token . getString (" G SI H ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( page Token Map Ġas ĠMutable Map < String , ĠAttribute Value >). put If Absent ( hash !! , Ġg si Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( range Ġ!= Ġnull Ġ&& Ġpage Token . getString (" G SI R ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg si Range Ġ= ĠAttribute Value (). with S ( page Token . getString (" G SI R ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( page Token Map Ġas ĠMutable Map < String , ĠAttribute Value >). put If Absent ( range , Ġg si Range ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( page Token Map Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Token Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Token Map [" old PageToken "] Ġ= ĠAttribute Value (). with S ( split Token [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpage Token Map [" old PageToken "] Ġ= ĠAttribute Value (). with S ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" PageToken Map Ġis : Ġ" Ġ+ ĠJson . encode P ret til y ( page Token Map )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpage Token Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate New PageToken ( ĊĠĠĠĠĠĠĠ Ġhash Identifier : ĠString , ĊĠĠĠĠĠĠĠ Ġidentifier : ĠString , ĊĠĠĠĠĠĠĠ Ġindex : ĠString ?, ĊĠĠĠĠĠĠĠ Ġlast Evalu ated Key : ĠMap < String , ĠAttribute Value >, ĊĠĠĠĠĠĠĠ ĠG SI : ĠString ?, ĊĠĠĠĠĠĠĠ ĠG SI _ KEY _ MAP : ĠMap < String , ĠJsonObject >, ĊĠĠĠĠĠĠĠ Ġalternate Index : ĠString ? ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Last Ġkey Ġis : Ġ$ last Evalu ated Key ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpage Token Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġval Ġindex Value : ĠAny ? Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ== Ġnull Ġ&& Ġalternate Index Ġ== Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġextract Index Value ( last Evalu ated Key [ alternate Index Ġ?: Ġindex ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Index Ġvalue Ġis : Ġ" Ġ+ Ġindex Value !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġidentifier Value Ġ= Ġlast Evalu ated Key [ identifier ] ĊĠĠĠĠĠĠĠ Ġpage Token . put (" hash ", Ġlast Evalu ated Key [ hash Identifier ]?. s ) ĊĠĠĠĠĠĠĠ Ġif Ġ( identifier Value Ġ!= Ġnull ) Ġpage Token . put (" range ", Ġidentifier Value . s ) ĊĠĠĠĠĠĠĠ Ġif Ġ( index Value Ġ!= Ġnull ) Ġpage Token . put (" index Value ", Ġindex Value ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( G SI Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Object Ġ= ĠG SI _ KEY _ MAP [ G SI ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġkey Object ?. getString (" hash ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġkey Object ?. getString (" range ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Token . put (" G SI H ", Ġlast Evalu ated Key [ hash ]?. s ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( range Ġ!= Ġnull Ġ&& Ġlast Evalu ated Key [ range ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Token . put (" G SI R ", Ġlast Evalu ated Key [ range ]?. s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" PageToken Ġis : Ġ" Ġ+ Ġpage Token . encode P ret til y ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . getUrl Encoder (). encode ToString ( page Token . encode (). toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Index Value ( attribute Value : ĠAttribute Value ?): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attribute Value Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Value . s Ġ!= Ġnull Ġ-> Ġattribute Value . s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Value . bool Ġ!= Ġnull Ġ-> Ġattribute Value . bool ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Value . n Ġ!= Ġnull Ġ-> Ġattribute Value . n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnknown Error (" Cannot Ġfind Ġindex value !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( D ynamoDB Parameters :: class . java . simple Name ) ĊĠĠĠ Ġ} Ċ } Ċ