ⶮ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None$%&,69:;<=?DLTbOperation on range key for .fClass to limit certain operations to text-like only in queries. Members of this class can be keys to . 'Class to limit +=. and -=. for updates. >Typeclass showing that this datatype can be saved to DynamoDB. Encode data. Return  if attribute should be omitted.Decode data. Return  on parsing error, gets 7 on input if the attribute was missing in the database.Aid for searching for empty list and hashmap; these can be represented both by empty list and by missing value, if this returns true, enhance search. Also used by joins to weed out empty foreign keysXTypeclass signifying that this is a scalar attribute and can be used as a hash/sort key. zinstance DynamoScalar Network.AWS.DynamoDB.Types.S T.Text where scalarEncode = ScS scalarDecode (ScS txt) = Just txt)Scalars must have total encoding function#Datatype for encoding scalar values2Exceptions thrown by some dynamodb-simple actions.!LPartial encoding/decoding Aeson values. Empty strings get converted to NULL.#(DynamoDB cannot represent empty items; [ a] will lose Nothings.& ( a) will not work well; it will join the value in the database.4Don't use Double as a part of primary key in a table. It is included here for convenience to be used as a range key in indexes.5Double as a primary key isn't generally a good thing as equality on double is sometimes a little dodgy. Use scientific instead.6Helper for tagged valuesG  !"#$%&'()*+,-./0123456789:;<=>?@   2   !"#$%&'()*+,-./0123456789:;<=>?@None>Create lenses if the field in the primary table starts with _.class Test_lens_field00 a b | a -> b where _field :: Functor f => (b -> f b) -> a -> f a instance Test_lens_field00 Test (Maybe T.Text) where field f t = (txt -> t{_field=txt})  $ f (_field t)5Reify name and return list of record fields with typeNone[JCreate function that converts complete structure from index back to table.iDynamoDB limits total number of attribute projections to 20, so this may not be as useful as it appears. None%&,9:;<=DLRT+Allow skipping over maybe types when using .BQuery directionE:Parameter for queries involving read consistency settings.HBFilter condition. Use with scan, query, update and delete methods.(Filtering on primary key is not allowed.INegate condition:Class to get a column name from a Type specifying a column7Signifies that the column is present in the table/index?Internal representation of a part of path in a nested structureJ-Representation of a column for filter queries&typ - datatype of column (Int, Text..)7coltype - TypColumn or TypSize (result of size(column))8col - instance of ColumnInfo, uniquely identify a column%Smart constructor for Column datatypeDReturn filter expression, attribute name map and attribute value mapLens to help set consistency.K*Combine attributes from nested structures. address' <.> street'L!Access an index in a nested list. users' <!> 0 <.> name'M!Access a key in a nested hashmap. !phones' <!:> "mobile" <.> number'0BCDEFGHIJKLM/BCDEFGHIJKLMBCDEFGH IJKLMK7L8M8None,:I NAn action for   functions.ONGenerate an action expression and associated structures from a list of actionsP"Add a number to a saved attribute.Q)Subtract a number from a saved attribute.R Set an attribute to a new value.S.Set on a Maybe type, if it was not set before.T'Append a new value to an end of a list.U'Insert a value to a beginning of a listVAdd a new value to a set.WRemove a value from a set.XDelete n-th list of an item.YDelete a key from a map.'NOPQRSTUVWXYZ[\] NOPQRSTUVWXY NPQRSTUVWXYONOPQRSTUVWXYZ[\]P4Q4R4None %&,:T ` Numeric/string range comparison.a6a IN (b, c, d); the list may contain up to 100 values.bCheck existence of attribute.c$Checks non-existence of an attributedComparison for text columns.e,CONTAINS condition for text-like attributes.fCONTAINS condition for sets.g/Size (i.e. number of bytes) of saved attribute.hAND for combining conditions.iOR for combining conditionsjRTests for equality. Automatically adjusts query to account for missing attributes.:Note: checks against empty values esentially translate to c.k a /= b === Not (a == b)`abcdefghijklmnoHI`abcdefghijklmnoHIhijkonlmbcdefa`g`abcdefghijklmnoh3i3j4k4l4m4n4o4 None%&+,69:;<=?DLOQRTp>Class for indexes that contain primary key of the parent table3Extract table primary key from an item, if possibleq+Class representing a Global Secondary Index Parameter type for queryKeyRangerIType family that returns a primary key of a table/index depending on the v parameter.s,Class for tables/indexes that can be scanned Return table name and index namet,Class for tables/indexes that can be queried Return table name and index nameuCreate a query using both hash key and operation on range key On tables without range key, this degrades to queryKey0Dispatch class for NoRange/WithRange createTableuDescritpion of dynamo table8Dynamo table/index name; default is the constructor name(Serialize data, put it into the databaseHReturn True if key is well-defined (i.e. no empty string, no Maybe etc.)jBasic instance for dynamo collection (table or index) This instances fixes the tableName and the sort key6Helper type to distinguish index and table collectionsv:Data collection type - with hash key or with hash+sort key Return first field of a datatype#Return first 2 fields of a datatype-Decode hashmap to a record using generic-sop.>pq rs  t  uvwx !"#$%&'()*+,-'pq rs t  uvwx"&pq rs  t  uvwx !"#$%&'()*+,- None ,:DLQRT\.5Periodically check state of table, until it is ACTIVE/*Delete specified indices from the database0'Update table with specified new indices1FCompare intersection of new and old indexes and find inconsistent ones2TVerbatim copy of findInconsistentIdxes, but changed to localSecondaryIndex structure3dCompare indexes and return list of indices to delete and to create; indices to recreate are included4$Change streaming settings on a table5Main table migration code6./012374589:;;6./012374589:; None< Create ContainsTableKey instance<<<None!"Ly6Configuration of TH macro for creating table instances{(Table type, primary key type, table name|/Global index type, primary key type, index name}Local index type, index name~>Translation of haskell field names to DynamoDB attribute namesRBuilds polymorphic lens for main table and indexes for table fields starting with '_'Simple table configurationZTranslates haskell field names to database attribute names. Strips everything up to first '_'.<Create instances, datatypes for table, fields and instances.Example of what gets created: data Test { _first :: Text, _second :: Text, _third :: Int } data TestIndex { u_third :: Int, i_second :: T.Text} mkTableDefs (tableConfig (''Test, WithRange) [(''TestIndex, NoRange)] []) deriveGenericOnly ''Test instance DynamoCollection Test WithRange IsTable ... instance DynamoTable Test WithRange tableName _ = "Test" deriveGenericOnly ''TestIndex instance DynamoCollection TestIndex NoRange IsIndex ... instance DynamoIndex TestIndex Test NoRange IsIndex indexName _ = "TestIndex" data P_First instance ColumnInfo P_First where columnName _ = "first" instance InCollection P_First Test 'NestedPath -- For every attribute instance InCollection P_Second TestIndex 'FullPath -- For every non-primary attribute first' :: Column Text TypColumn P_First first' = Column -- Polymorphic lenses class Test_lens_first a b | a -> b where first :: Functor f => (a -> f b) -> a -> f b instance Test_lens_first TestIndex Text where first = ...=#Generate basic collection instances>BBuild P_Column data, add it to instances and make column' variableDerive  4 and prepare column instances for nested structures.Derive just the  : instance for structures that were already derived using 8 and you want to use them as nested structures as well.Creates: :instance DynamoEncodable Type where dEncode val = Just (attributeValue & avM .~ gdEncodeG [fieldnames] val) dDecode (Just attr) = gdDecodeG [fieldnames] (attr ^. avM) dDecode Nothing = Nothing instance InCollection column_type P_Column1 'NestedPath instance InCollection column_type P_Column2 'NestedPath ...?_Creates top-leval variable as a call to a migration function with partially applied createIndexyz{|}~!Table type name, primary key type.Global secondary index records, index key typeLocal secondary index recordsName of the migration function@=AB>C?vwxyz{|}~yz{|}~vwx yz{|}~@=AB>C?None $%&,:QRT\D7Retry batch operation, until unprocessedItems is empty.TTODO: we should use exponential backoff; currently we use a simple 1-sec threadDelayE7Retry batch operation, until unprocessedItems is empty.TTODO: we should use exponential backoff; currently we use a simple 1-sec threadDelayF-Chunk list according to batch operation limitBatch write into the database.The batch is divided to 25-item chunks, each is sent and retried separately. If a batch fails on dynamodb exception, it is raised.ONote: On exception, the information about which items were saved is unavailableGet batch of items.Batch version of deleteItemByKey.|Note: Because the requests are chunked, the information about which items were deleted in case of exception is unavailable.DEFGDEFGNone%&,:DOQRT\Options for a generic query.HGThis sets the "D.qLimit" settings for maximum number of evaluated itemsIuKey after which the evaluation starts. When paging, this should be set to qrsLastEvaluatedKey of the last operation.J/Decode data, throw exception if decoding fails.@Record for defining scan command. Use lenses to set the content.+sParallel: (Segment number, Total segments)K(Segment number, TotalSegments)LWhen  1https://github.com/brendanhay/amazonka/issues/340 is fixed, remove#Default settings for query options.M Generate a D.Query objectSame as %, but return data in original chunks.Generic query function. You can query table or indexes that have a range key defined. The filter condition cannot access the hash and range keys.gQuery an index, fetch primary key from the result and immediately read full items from the main table./Perform a simple, eventually consistent, query.ESimple to use function to query limited amount of data from database.Query with conditionFetch exactly the required count of items even when it means more calls to dynamodb. Return last evaluted key if end of data was not reached. Use  to continue reading the query.N-Generic query interface for scanning/queryingOXRun command as long as Maybe cmd is Just or the resulting sequence is smaller than limit-Conduit source for running scan; the same as ,, but return results in chunks as they come."Conduit source for running a scan.RFunction to call bounded scans. Tries to return exactly requested number of items.Use  to continue the scan.P Generate a D.Query object.*Scan table using a given filter condition. =scanCond (colAddress <!:> "Home" <.> colCity ==. "London") 10^Conduit to do a left join on the items being sent; supposed to be used with querySourceChunks.The 'foreign key' must have an Q to facilitate faster searching. The same as 9, but discard items that do not exist in the right table.7RSTUVWHIJXYZ[K\]^L_MProxy type of a table to queryHash keyRange conditionScan direction Maximum number of items to fetchHash keyRange conditionScan direction Maximum number of items to fetch Maximum number of items to fetchN Maximum number of items to fetchO`abc Scan settingsRequired result countBlist of results, lastEvalutedKey or Nothing if end of data reachedPProxy type for the right tableProxy type for the right table'RSTUVWHIJXYZ[K\]^L_MNO`abcP BSD-stylepalkovsky.ondrej@gmail.com experimentalportableNone ,:DQRT\ _Write item into the database; overwrite any previously existing item with the same primary key.>Write item into the database only if it doesn't already exist.kRead item from the database; primary key is either a hash key or (hash,range) tuple depending on the table.<Delete item from the database by specifying the primary key.Delete item from the database by specifying the primary key and a condition. Throws AWS exception if the condition does not succeed.dGenerate update item object; automatically adds condition for existence of primary key, so that only existing objects are modifiedUpdate item in a table. =updateItem (Proxy :: Proxy Test) (12, "2") (colCount +=. 100)AUpdate item in a database, return an updated version of the item.4Update item in a table while specifying a condition.Delete a table from DynamoDB."Extract primary key from a record.You can use this on both main table or on index tables if they contain the primary key from the main table. Table key is always projected to indexes anyway, so just define it in every index. efd;BCDEFGJKLMpqrstu;EFGBCDJKLMuqrpts efdg !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP Q R S T U V W X Y Z [ \]^_`abcdefghijklmnopqrstuvwxyz{|}~                              Y     ]                               ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefggVhijklmno.dynamodb-simple-0.3.0.0-2p3Q05gOJlN471q1pZWCg8Database.DynamoDB.TypesDatabase.DynamoDBDatabase.DynamoDB.FilterDatabase.DynamoDB.UpdateDatabase.DynamoDB.THqueryDatabase.DynamoDB.THLensDatabase.DynamoDB.THConvertDatabase.DynamoDB.InternalupdateItemByKeyDatabase.DynamoDB.ClassDatabase.DynamoDB.MigrationDatabase.DynamoDB.THContainsDatabase.DynamoDB.BatchRequestDatabase.DynamoDB.QueryRequest RangeOper RangeEquals RangeLessThanRangeLessThanERangeGreaterThanRangeGreaterThanE RangeBetweenRangeBeginsWithIsTexttoTextfromTextIsNumberDynamoEncodabledEncodedDecode dIsMissing DynamoScalar scalarEncode scalarDecode ScalarValueScSScNScBDynamoExceptiondType dScalarEncode$fIsTextTagged $fIsTextText$fIsNumberTagged$fIsNumberInteger$fIsNumberDouble $fIsNumberInt$fDynamoEncodableValue$fDynamoEncodableTagged$fDynamoEncodable[]$fDynamoEncodableHashMap$fDynamoEncodableSet$fDynamoEncodableMaybe$fDynamoEncodableByteString$fDynamoEncodableText$fDynamoEncodableBool$fDynamoEncodableDouble$fDynamoEncodableInt64$fDynamoEncodableInt32$fDynamoEncodableInt16$fDynamoEncodableWord$fDynamoEncodableInt$fDynamoEncodableInteger$fDynamoEncodableScientific$fDynamoScalarBByteString$fDynamoScalarSText$fDynamoScalarNDouble$fDynamoScalarNScientific$fDynamoScalarvTagged$fDynamoScalarNWord$fDynamoScalarNInt64$fDynamoScalarNInt32$fDynamoScalarNInt16$fDynamoScalarNInt$fDynamoScalarNInteger $fScalarAutoB $fScalarAutoN $fScalarAutoS$fExceptionDynamoException$fShowDynamoException DirectionForwardBackward Consistency EventuallyStronglyFilterConditionNotColumn<.>Action dumpActions+=.-=.=. setIfNothingappendprependadddelete delListItem delHashKey$fActionClassRemove$fActionClassDelete$fActionClassAdd$fActionClassSet$fSemigroupAction$fMonoidActionbetweenvalIn attrExists attrMissing beginsWithcontains setContainssize&&.||.==./=.<=.<.>.>=.ContainsTableKey DynamoIndex PrimaryKey TableScanCanQuery DynamoTable RangeTypeNoRange WithRange TableConfig tableSetup globalIndexes localIndexestranslateField buildLens tableConfigdefaultTranslate mkTableDefsderiveCollectionderiveEncodable putItemBatch getItemBatchdeleteItemBatchByKey QueryOptsScanOptsqConsistentRead qDirectionqFilterConditionqHashKeyqLimitqRangeCondition qStartKey queryOptsquerySourceChunks querySourcequeryOverIndex querySimple queryCondsConsistentReadsFilterConditionsLimit sParallel sStartKeyscanOptsscanSourceChunks scanSourcescanscanCondleftJoin innerJoinputItem insertItemgetItemdeleteItemByKeydeleteItemCondByKeyupdateItemByKey_updateItemCond_ deleteTabletableKey2unordered-containers-0.2.7.1-5INwdG7O5Jdakf1CqKoOBData.HashMap.BaseHashMapbaseGHC.BaseNothingMaybe ScalarAutodTypeV dSetEncodeV dSetDecodeV dSetEncode dSetDecodecreatePolyLenses getFieldNameswhenJustsaycreateTableConversionsgetConstructorUnMaybe ColumnInfo InCollection IntraColNamemkColumn dumpCondition consistencyLAndOr Comparison AttrExists AttrMissing BeginsWithContainsBetweenInNameGen columnNamePathType NestedPathFullPath IntraName IntraIndexSize ColumnType TypColumnTypSizenameGen nameGenPathrangeKey rangeStartrangeEnd rangeOper rangeData$fSemigroupFilterCondition ActionClass dumpActionasActionRemoveDeleteAddSet ActionValueValAttr IfNotExists ListAppend ListPrependPlusMinus isNoopAction supplyName supplyValue mkActionValdcomp dTableKey PrimaryKey' qsTableName qTableName dQueryKey TableCreate tableNamedPutItem dKeyIsDefinedDynamoCollection TableType gdFirstField gdTwoFields gsDecodeG IndexCreatecreateGlobalIndex indexName qsIndexNamedScan qIndexNamedQueryKeyToAttr createTable HasPrimaryKey dItemToKey dKeyToAttr dAttrToKey allFieldNames primaryFields dGsDecodeIsTableIsIndexgsEncode gsEncodeGgsDecodedefaultPutItemdefaultCreateTabledefaultCreateTableRangedefaultQueryKeydefaultCreateGlobalIndex mkIndexHelperdefaultCreateGlobalIndexRangecreateLocalIndex defaultScan$fIndexCreateapWithRange$fIndexCreateapNoRange$fTableScanarIsIndex$fTableScanarIsTable$fCanQueryaIsIndexhashrange$fCanQueryaIsTablehashrange$fTableCreateaWithRange$fTableCreateaNoRange$fHasPrimaryKeyaWithRanget$fHasPrimaryKeyaNoRangetwaitUntilTableActive deleteIndices createIndicesfindInconsistentIdxesfindInconsistentLocIdxescompareIndexes changeStream tryMigrationgetTableDescriptioncompareLocalIndexeslogmsgprettyTableInfocreateOrMigrate runMigrationcreateContainsTableKeygenBaseCollection buildColDatamkMigrationFuncpkeySize toConstrName mkConstrNamesderiveEncodable'retryWriteBatchretryReadBatch chunkBatchdDeleteRequest_qLimit _qStartKey rsDecoder _sParallel FixedQueryqueryCmd boundedFetch unfoldLimitscanCmdghc-prim GHC.ClassesOrd _qHashKey_qRangeCondition_qFilterCondition_qConsistentRead _qDirection_sFilterCondition_sConsistentRead_sLimit _sStartKey FixedScan$fAWSPagerFixedScan$fAWSRequestFixedScan$fAWSPagerFixedQuery$fAWSRequestFixedQuery dUpdateItem dDeleteItemdGetItem