śĪūl픺      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹NoneA (ServerName, Port) tuple ,A round-robin pool of cassandra connections .A localhost server with default configuration 5A single localhost server with default configuration =Create a pool of connections to a cluster of Cassandra boxes IEach box in the cluster will get up to n connections. The pool will send L queries in round-robin fashion to balance load on each box in the cluster. "Open underlying thrift connection ŗ»¼½¾æĄ List of servers to connect to Number of stripes to maintain Max connections per stripe -Kill each connection after this many seconds (Each pool operates on a single KeySpace ĮĀĆÄÅĘĒ    ŗ»¼½¾æĄ  ĮĀĆÄÅĘĒNone1Wrap your composite columns in this type when you're starting an  inclusive column slice. @Use the Single wrapper when you want to refer only to the first $ coolumn of a CompositeType column. =Exclusive tag for composite column. You may tag the end of a D composite range with this to make the range exclusive. See pycassa % documentation for more information. @This typeclass defines and maps to haskell types that Cassandra E natively knows about and uses in sorting and potentially validating  column key values. CAll column keys are eventually sent to and received from Cassandra C in binary form. This typeclass allows us to map some Haskell type @ definitions to their binary representation. The correct binary 5 serialization is handled for you behind the scenes. DFor simplest cases, just use one of the string-like instances, e.g.  Č, É or Ź!. Please keep in mind that these ' are just mapped to untyped BytesType. 0Remember that for special column types, such as % , to have @ any effect, your ColumnFamily must have been created with that ' comparator or validator. Otherwise you're just encoding/ decoding = integer values without any Cassandra support for sorting or  correctness. EThe Python library pycassa has a pretty good tutorial to learn more. >Tuple instances support fixed ComponentType columns. Example: P insert "testCF" "row1" [packCol ((TLong 124, TAscii "Hello"), "some content")] 3Timestamp that stores micro-seconds since epoch as % underneath. :Convert commonly used Ė to . <First converts to seconds since epoch (POSIX seconds), then D multiplies by a million and floors the resulting value. The value, < therefore, is in micro-seconds and is accurate to within a  microsecond. Ģcomposite columns are a pain < need to write 2 byte length, n byte body, 1 byte separator from pycassa: - The composite format for each component is:   len  value  eoc  2 bytes | ? bytes | 1 byte ĶWhen end point is exclusive ĪRegular (inclusive) end point Ļ"Separator between composite parts Š>Composite types - see Cassandra or pycassa docs to understand Ń>Composite types - see Cassandra or pycassa docs to understand ŅUse the 0 wrapper when querying only with the first of a " two or more field CompositeType. ÓVia , which is via % ŌEncode days as LongType via %. ÕEncode and decode as Utf8 Ź ÖAPack as an 8 byte unsigned number; negative signs are lost. Maps  to LongType. ×0Assumed to be a 64-bit Int and encoded as such. Ų#Pack as an 8 byte number - same as % ŁPack as a 4 byte number N !"#$%&'()*+,-./0123456789:;ĢŚŪÜŻŽßąĶĪĻįāćäåęŠēčéŃŅÓŌÕÖןėŲŁģķīļšńņó& !"#$%&'()*+,-./0123456789:;&789456123./0+,-"#$()*%&' !:;7 !"#$%&'()*+,-./0123456789:;ĢŚŪÜŻŽßąĶĪĻįāćäåęŠēčéŃŅÓŌÕÖןėŲŁģķīļšńņóNone<IA typeclass to enable using any string-like type for row and column keys ?3Describes the result of a single pagination action @Here'6s a batch and there is more when you call the action. BDone, this is all I have. N+A full row is simply a sequence of columns ODA Column is either a single key-value pair or a SuperColumn with an % arbitrary number of key-value pairs S6Last update timestamp; will be overridden during write/ update ops T2A TTL after which Cassandra will erase the column [Order in a range query ^A column selector/filter statement for queries. CRemember that SuperColumns are always fully deserialized, so we don't offer " a way to filter columns within a U. >Column names and ranges are specified by any type that can be * packed into a Cassandra column using the  typeclass. _,Return a range of columns or super-columns. d1When deleting specific columns in a super column e:Return specific columns or super-columns depending on the Z fReturn everything in N g5Encodes the Key vs. Token options in the thrift API. i0 ranges are just plain intuitive range queries.  h; ranges are also inclusive, but they wrap around the ring. jA Y range selector to use with getMulti. kGA range of keys to get. Remember that RandomPartitioner ranges may not 3 mean much as keys are randomly assigned to nodes. lJust a list of keys to get m(Possible outcomes of a modify operation r#A default starting point for range ^. Use this so you  don'8t run into ambiguous type variables when using Nothing. X range = Range (Nothing :: Maybe ByteString) (Nothing :: Maybe ByteString) Regular 1024 x$A short-hand for creating key-value O values. This is , pretty low level; you probably want to use packCol. }Exception handler that returns True for errors that may be 9 resolved after a retry. So they are good candidates for retrying  queries. ~ōs should be retried FCassandra is VERY sensitive to its timestamp values. As a convention, ' timestamps are always in microseconds ƒ#Raise an error if conversion fails õAFor easy composite keys, just serialize your data type to a list  of bytestrings, we'/ll concat them and turn them into column keys. R<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒö÷ųłśõūüżžH<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒImponjlkgihq^fed_`abcrstu[]\vwZYXWVOUPQRSTNxyz{|DMLKJIHGFE}~?B@CCA€‚<=>ƒ,<=>?B@CCAD MLKJIHGFENOUPQRSTVWXYZ[]\^fed_`abcgihjlkmponqrstuvwxyz{|}~€‚ƒö÷ųłśõūüżž experimental Ozgun AtamanNone…0All Cassy operations are designed to run inside …  context. We provide a default concrete „ datatype, but you can simply 1 make your own application monads an instance of … 8 for conveniently using all operations of this package. <Please keep in mind that all Cassandra operations may raise  Ds at any point in time. ‡IRun a list of cassandra computations in parallel using the async library ˆBMain running function when using the ad-hoc Cas monad. Just write # your cassandra actions within the „ monad and supply them with  a  to execute. ‰AUnwrap a Cassandra action and return an IO continuation that can # then be run in a pure IO context. DThis is useful when you design all your functions in a generic form  with …- m constraints and then one day need to feed E your function to a utility that can only run in an IO context. This E function is then your friendly utility for extracting an IO action. ŠGet a single key-column value. ‹(An arbitrary get operation - slice with ^ Œ Do multiple ‹s in one DB hit "Insert an entire row into the db. AThis will do as many round-trips as necessary to insert the full C row. Please keep in mind that each column and each column of each 0 super-column is sent to the server one by one. L insert "testCF" "row1" ONE [packCol ("column key", "some column content")] ŽPack key-value pair into O' form ready to be written to Cassandra Unpack a Cassandra O# into a more convenient (k,v) form APack a column key into binary, ready for submission to Cassandra ‘HDelete an entire row, specific columns or a specific sub-set of columns  within a SuperColumn. ’:Wrap exceptions of the underlying thrift library into the  exception types defined here. “Make exceptions implicit. ”’8 with direct cassandra support. Server-related failures  will be retried. K, J and  G will be automatically retried. „…†‡ˆ‰ŠRow key Column/SuperColumn key; see  for what it can be. Use  ByteString in the simple case.  Read quorum ‹in ColumnFamily Row key to get Slice columns with selector Œ(A selection of rows to fetch in one hit &Subject to column selector conditions A Map from Row keys to Ns is returned Row key *best way to make these columns is through packCol Ž‘In Z Key to be deleted Columns to be deleted ’“”For default settings, just use def Action to perform y !"#$%&'()*+,-./0123456789:;<=>DEFGHIJKLMNOPQRSTUVWYZ[\]^_`abcdefghijklrswx}~ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”S…†„ˆ‰‡Š‹Œ‘”}~^fed_`abcrs[]\wjlkgihDMLKJIHGFE“’ZYWVOUPQRSTxŽN<=>ƒ„…†‡ˆ‰Š‹ŒŽ‘’“” experimentalOzgun Ataman <oz@soostone.com>None•0A Haskell dictionary containing a pair of encode/decode  functions. DThis is the main design choice in this module. We require that each > operation takes an explicit marshalling policy rather than a E typeclass which makes it possible to do it in a single way per data  type. CYou can create your own objects of this type with great ease. Just # look at one of the examples here (™, œ, etc.) —An encoding function ˜A decoding function ™BMarshall data using JSON encoding. Good interoperability, but not " very efficient for data storage. šMarshall data using  and *. Not meant for serious production cases. ›Marshall data using the SafeCopy instance. This is quite well = suited for production because it is both very efficient and A provides a systematic way to migrate your data types over time. œMarshall data using the  Serialize instance. Like Binary,   Serialize is very efficient. HA modify function that will fetch a specific column, apply modification 4 function on it and save results back to Cassandra. A b7 side value is returned for computational convenience. CThis is intended to be a workhorse function, in that you should be D able to do all kinds of relatively straightforward operations just  using this function. This method may throw a D for all exceptions other than  M. žSame as " but does not offer a side value. This method may throw a D for all exceptions other than  M. ”(An arbitrary get operation - slice with ^. @Internally based on Basic.get. Table is assumed to be a regular A ColumnFamily and contents of returned columns are cast into the  target type. ¢ A version of ”/ that discards the column names for the common D scenario. Useful because you would otherwise be forced to manually * supply type signatures to get rid of the  ambiguity. £=Get a slice of columns from multiple rows at once. Note that E since we are auto-serializing from JSON, all the columns must be of  the same data type. ¤&Get a single column from a single row „ Same as the „ in the  module, except that A it throws an exception rather than returning an explicit Either  value. +Convert regular column to a key-value pair ¦>Paginate over columns in a given key, repeatedly applying the  given ^. The ^ must be a _ selector, or , else this funtion will raise an exception. §<Convenience layer: Convert a pagination scheme to a conduit . Ø Just like ¦", but we instead return a conduit . •–—˜™š›œ&A serialization methodology. Example: ™ !Column name; anything in CasType  Read quorum  Write quorum #Modification function. Called with  the value if present,   otherwise. Return the decided m and its execution outcome ž!Column name; anything in CasType  Read quorum  Write quorum #Modification function. Called with  the value if present,   otherwise. ŸColumn name. See  for what you can use here. Content  Column name. See  for what you can use here. Content TTL for this column ”A slice selector List of key-value pairs. See ! for what key types you can use. ¢A slice selector £¤Column name; anything in  „In Z Key to be deleted Columns to be deleted ¦Serialization strategy Paginate columns of this row _- selector to initially and repeatedly apply. 2Retry strategy for each underlying Cassandra call §Øƒ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMWXZ[\]^_`abcdefghijklmnoprsw}€‚ƒ„…†‡ˆ‰”•–—˜™š›œžŸ ”¢£¤„¦§Ø^…†„ˆ‰‡•–—˜š™œ›”¢¤£Ÿ ž„”}XWmponZDMLKJIHGFE^fed_`abcrs[]\wjlkgih?B@CCA€‚¦Ø§<=>ƒ•–—˜™š›œžŸ ”¢£¤„¦§Ø experimental Ozgun AtamanNone ­(Possible outcomes of a modify operation  +Convert regular column to a key-value pair ±HA modify function that will fetch a specific column, apply modification 4 function on it and save results back to Cassandra. A b7 side value is returned for computational convenience. CThis is intended to be a workhorse function, in that you should be D able to do all kinds of relatively straightforward operations just  using this function. This method may throw a D for all exceptions other than  M. ²Same as ±" but does not offer a side value. This method may throw a D for all exceptions other than  M. µ(An arbitrary get operation - slice with ^. @Internally based on Basic.get. Table is assumed to be a regular A ColumnFamily and contents of returned columns are cast into the  target type. ¶ A version of µ/ that discards the column names for the common D scenario. Useful because you would otherwise be forced to manually * supply type signatures to get rid of the  ambiguity. ·=Get a slice of columns from multiple rows at once. Note that E since we are auto-serializing from JSON, all the columns must be of  the same data type. ø&Get a single column from a single row ¹ Same as the ¹ in the  module, except that A it throws an exception rather than returning an explicit Either  value.  Lazy     Encode JSON  Lazy     Decode JSON ©Ŗ«¬­®Æ° ±!Column name; anything in CasType  Read quorum  Write quorum #Modification function. Called with  the value if present,   otherwise. Return the decided ­ and its execution outcome ²!Column name; anything in CasType  Read quorum  Write quorum #Modification function. Called with  the value if present,   otherwise. ³Column name. See  for what you can use here. Content “Column name. See  for what you can use here. Content TTL for this column µA slice selector List of key-value pairs. See ! for what key types you can use. ¶A slice selector ·øColumn name; anything in  ¹In Z Key to be deleted Columns to be deleted     n !"#$%&'()*+,-./0123456789:;<=>DEFGHIJKLMWZ[\]^_`abcdefghirswƒ„…†‡ˆ‰©Ŗ«¬­®Æ°±²³“µ¶·ø¹H…†„ˆ‰‡µ¶ø·³“±²¹¬W­°Æ®ZDMLKJIHGFE^fed_`abcrs[]\w©«Ŗgih<=>ƒ©«Ŗ¬­°Æ® ±²³“µ¶·ø¹              !!""##$%&''())*++,--.//01123345567789:;<=>?@ABCDEFGHIJKLMNNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’““”•–—˜™š›œ‰žŠˆŸ ”hijVklmnš›œ‰žŠˆ¢¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįā²ćäåęēčéźėģķīļšńņó²ōõ²ö÷ųłśū²üż²üž’ų’ cassy-0.6Database.Cassandra.BasicDatabase.Cassandra.PoolDatabase.Cassandra.PackDatabase.Cassandra.TypesDatabase.Cassandra.MarshallDatabase.Cassandra.JSON CassandraBasiccassandra-thrift-0.8.5.1)Database.Cassandra.Thrift.Cassandra_TypesONEQUORUM LOCAL_QUORUM EACH_QUORUMALLANYTWOTHREEConsistencyLevelresource-pool-0.2.1.1 Data.Pool withResourcecHandlecFramedcProtoKeySpaceServerCPool defServer defServerscreateCassandraPool openThrift SliceStartSingle ExclusiveCasType encodeCas decodeCas TTimeStamp getTimeStampTUtf8getUtf8TLonggetLongTUUIDgetUUIDTInt64getInt64TInt32getInt32TCounter getCounterTBytes getTBytesTAsciigetAscii toTimeStamp fromTimeStampCKeytoColKey fromColKey PageResultPMorepMorePDonepCacheCassandraExceptionOperationNotSupportedConversionExceptionSchemaDisagreementExceptionAuthorizationExceptionAuthenticationExceptionTimedOutExceptionUnavailableExceptionInvalidRequestExceptionNotFoundExceptionRowColumncolKeycolValcolTScolTTL SuperColumnValue ColumnNameRowKeyKey ColumnFamilyOrderReversedRegularSelectorRange rangeStartrangeEnd rangeOrder rangeLimitSupNamesColNamesAll KeyRangeType WrapAroundInclusiveRange KeySelectorKeyRangeKeysModifyOperation DoNothingDeleteUpdate mkKeyRangerange boundlessshowCas mkPredicate renderOrd reverseOrdercol mkThriftCol castColumncastCol castSuperCol casRetryH networkRetryHgetTimepIsDrypIsDonepHasMore fromColKey'CasMonadCassandragetCassandraPool mapCassandrarunCastransCasgetColgetgetMultiinsertpackCol unpackColpackKeydelete wrapExceptionthrowingretryCasMarshallmarshallEncodemarshallDecodecasJSONcasShow casSafeCopy casSerializemodifymodify_ insertCol insertColTTLget_paginate pageToSourcepaginateSourceRingallItemscurrentusedupcoming ServerRing modifyServersserverDiscoveryThread updateServersmkRingnext removeServer addNewServersbytestring-0.10.0.2Data.ByteString.Lazy.Internal ByteStringbaseGHC.BaseString text-0.11.2.3Data.Text.InternalText time-1.4.0.1Data.Time.Clock.UTCUTCTimeputBytesexcendsep$fCasTypeSliceStart1 $fCasType(,)0$fCasTypeSingle$fCasTypeUTCTime $fCasTypeDay$fCasTypeTUtf8$fCasTypeTLong $fCasTypeInt$fCasTypeTInt64$fCasTypeTInt32 getBytes'getLenputLentoStrict fromStrict getSegment putSegment$fCasType(,,,) $fCasType(,,) $fCasType(,)$fCasTypeExclusive$fCasTypeSliceStart$fCasTypeSliceStart0$fCasTypeSliceStart2$fCasType(,,,)0$fCasType(,,)0$fCasTypeInt64$fCasTypeInt32$fCasTypeTCounter$fCasTypeTBytes$fCasTypeTAscii$fCasTypeByteString $fCasTypeText$fCasTypeText0 $fCasType[]$fCasTypeByteString0GHC.IO.Exception IOException $fCKey[]0$fCKeyByteString$fCKeyByteString0 $fCKeyText $fCKeyText0$fCKey[]$fFunctorPageResult$fExceptionCassandraException$fShowSelector$fDefaultSelector retry-0.3.0.0 Control.RetryretryingwithCassandraPool$fMonadCassandraReaderTGHC.ShowShowGHC.ReadReadcol2val conduit-1.0.8Data.Conduit.InternalSource Data.MaybeJustNothing ksToBasicKS marshallJSON' marshallJSONunMarshallJSON'unMarshallJSON