Safe Haskell | None |
---|---|
Language | Haskell2010 |
Database.CQL.Protocol.Internal
Contents
Description
Like Database.CQL.Protocol but exports the whole encode/decode machinery for all types.
- class Cql a where
- newtype Keyspace = Keyspace {
- unKeyspace :: Text
- newtype Table = Table {}
- newtype PagingState = PagingState {}
- newtype QueryId k a b = QueryId {}
- newtype QueryString k a b = QueryString {}
- data Version
- data CqlVersion
- = Cqlv300
- | CqlVersion !Text
- data CompressionAlgorithm
- data Compression = Compression {
- algorithm :: !CompressionAlgorithm
- shrink :: ByteString -> Maybe ByteString
- expand :: ByteString -> Maybe ByteString
- noCompression :: Compression
- data Consistency
- = Any
- | One
- | Two
- | Three
- | Quorum
- | All
- | LocalQuorum
- | EachQuorum
- | Serial
- | LocalOne
- | LocalSerial
- data OpCode
- data ColumnType
- = CustomColumn !Text
- | AsciiColumn
- | BigIntColumn
- | BlobColumn
- | BooleanColumn
- | CounterColumn
- | DecimalColumn
- | DoubleColumn
- | FloatColumn
- | IntColumn
- | TextColumn
- | TimestampColumn
- | UuidColumn
- | VarCharColumn
- | VarIntColumn
- | TimeUuidColumn
- | InetColumn
- | MaybeColumn !ColumnType
- | ListColumn !ColumnType
- | SetColumn !ColumnType
- | MapColumn !ColumnType !ColumnType
- | TupleColumn [ColumnType]
- | UdtColumn !Text [(Text, ColumnType)]
- newtype Ascii = Ascii {}
- newtype Blob = Blob {}
- newtype Counter = Counter {
- fromCounter :: Int64
- newtype TimeUuid = TimeUuid {
- fromTimeUuid :: UUID
- newtype Set a = Set {
- fromSet :: [a]
- newtype Map a b = Map {
- fromMap :: [(a, b)]
- data Value
- = CqlCustom !ByteString
- | CqlBoolean !Bool
- | CqlInt !Int32
- | CqlBigInt !Int64
- | CqlVarInt !Integer
- | CqlFloat !Float
- | CqlDecimal !Decimal
- | CqlDouble !Double
- | CqlText !Text
- | CqlInet !IP
- | CqlUuid !UUID
- | CqlTimestamp !Int64
- | CqlAscii !Text
- | CqlBlob !ByteString
- | CqlCounter !Int64
- | CqlTimeUuid !UUID
- | CqlMaybe (Maybe Value)
- | CqlList [Value]
- | CqlSet [Value]
- | CqlMap [(Value, Value)]
- | CqlTuple [Value]
- | CqlUdt [(Text, Value)]
- newtype Tagged a b = Tagged {
- untag :: b
- retag :: Tagged a c -> Tagged b c
- data R
- data W
- data S
- data Header = Header {
- headerType :: !HeaderType
- version :: !Version
- flags :: !Flags
- streamId :: !StreamId
- opCode :: !OpCode
- bodyLength :: !Length
- data HeaderType
- header :: Version -> ByteString -> Either String Header
- encodeHeader :: Version -> HeaderType -> Flags -> StreamId -> OpCode -> Length -> PutM ()
- decodeHeader :: Version -> Get Header
- newtype Length = Length {
- lengthRepr :: Int32
- encodeLength :: Putter Length
- decodeLength :: Get Length
- data StreamId
- mkStreamId :: Integral i => i -> StreamId
- fromStreamId :: StreamId -> Int
- encodeStreamId :: Version -> Putter StreamId
- decodeStreamId :: Version -> Get StreamId
- data Flags
- compress :: Flags
- tracing :: Flags
- isSet :: Flags -> Flags -> Bool
- encodeFlags :: Putter Flags
- decodeFlags :: Get Flags
- data Request k a b
- pack :: Tuple a => Version -> Compression -> Bool -> StreamId -> Request k a b -> Either String ByteString
- encodeRequest :: Tuple a => Version -> Putter (Request k a b)
- getOpCode :: Request k a b -> OpCode
- data Options = Options
- encodeOptions :: Putter Options
- data Startup = Startup !CqlVersion !CompressionAlgorithm
- encodeStartup :: Putter Startup
- newtype AuthResponse = AuthResponse ByteString
- encodeAuthResponse :: Putter AuthResponse
- newtype Register = Register [EventType]
- data EventType
- encodeRegister :: Putter Register
- encodeEventType :: Putter EventType
- data Query k a b = Query !(QueryString k a b) !(QueryParams a)
- data QueryParams a = QueryParams {}
- data SerialConsistency
- encodeQuery :: Tuple a => Version -> Putter (Query k a b)
- encodeQueryParams :: forall a. Tuple a => Version -> Putter (QueryParams a)
- data Batch = Batch {}
- data BatchQuery where
- BatchQuery :: (Show a, Tuple a, Tuple b) => !(QueryString W a b) -> !a -> BatchQuery
- BatchPrepared :: (Show a, Tuple a, Tuple b) => !(QueryId W a b) -> !a -> BatchQuery
- data BatchType
- encodeBatch :: Version -> Putter Batch
- encodeBatchType :: Putter BatchType
- encodeBatchQuery :: Version -> Putter BatchQuery
- newtype Prepare k a b = Prepare (QueryString k a b)
- encodePrepare :: Putter (Prepare k a b)
- data Execute k a b = Execute !(QueryId k a b) !(QueryParams a)
- encodeExecute :: Tuple a => Version -> Putter (Execute k a b)
- data Response k a b
- = RsError (Maybe UUID) !Error
- | RsReady (Maybe UUID) !Ready
- | RsAuthenticate (Maybe UUID) !Authenticate
- | RsAuthChallenge (Maybe UUID) !AuthChallenge
- | RsAuthSuccess (Maybe UUID) !AuthSuccess
- | RsSupported (Maybe UUID) !Supported
- | RsResult (Maybe UUID) !(Result k a b)
- | RsEvent (Maybe UUID) !Event
- unpack :: (Tuple a, Tuple b) => Compression -> Header -> ByteString -> Either String (Response k a b)
- data Ready = Ready
- decodeReady :: Get Ready
- newtype Authenticate = Authenticate Text
- newtype AuthChallenge = AuthChallenge (Maybe ByteString)
- newtype AuthSuccess = AuthSuccess (Maybe ByteString)
- decodeAuthenticate :: Get Authenticate
- decodeAuthChallenge :: Get AuthChallenge
- decodeAuthSuccess :: Get AuthSuccess
- data Result k a b
- = VoidResult
- | RowsResult !MetaData [b]
- | SetKeyspaceResult !Keyspace
- | PreparedResult !(QueryId k a b) !MetaData !MetaData
- | SchemaChangeResult !SchemaChange
- data MetaData = MetaData {
- columnCount :: !Int32
- pagingState :: Maybe PagingState
- columnSpecs :: [ColumnSpec]
- data ColumnSpec = ColumnSpec {
- keyspace :: !Keyspace
- table :: !Table
- columnName :: !Text
- columnType :: !ColumnType
- decodeResult :: forall k a b. (Tuple a, Tuple b) => Version -> Get (Result k a b)
- decodeMetaData :: Get MetaData
- data Supported = Supported [CompressionAlgorithm] [CqlVersion]
- decodeSupported :: Get Supported
- data Event
- data TopologyChange
- data SchemaChange
- data StatusChange
- data Change
- decodeSchemaChange :: Version -> Get SchemaChange
- decodeChange :: Version -> Get Change
- decodeEvent :: Version -> Get Event
- decodeTopologyChange :: Get TopologyChange
- decodeStatusChange :: Get StatusChange
- data Error
- = AlreadyExists !Text !Keyspace !Table
- | BadCredentials !Text
- | ConfigError !Text
- | Invalid !Text
- | IsBootstrapping !Text
- | Overloaded !Text
- | ProtocolError !Text
- | ServerError !Text
- | SyntaxError !Text
- | TruncateError !Text
- | Unauthorized !Text
- | Unprepared !Text !ByteString
- | Unavailable { }
- | ReadTimeout { }
- | WriteTimeout { }
- data WriteType
- decodeError :: Get Error
- decodeWriteType :: Get WriteType
- class PrivateTuple a => Tuple a
- count :: PrivateTuple a => Tagged a Int
- check :: PrivateTuple a => Tagged a ([ColumnType] -> [ColumnType])
- tuple :: PrivateTuple a => Version -> [ColumnType] -> Get a
- store :: PrivateTuple a => Version -> Putter a
- data Row
- mkRow :: [(Value, ColumnType)] -> Row
- fromRow :: Cql a => Int -> Row -> Either String a
- columnTypes :: Row -> [ColumnType]
- rowLength :: Row -> Int
- class Record a where
- type family TupleType a
- recordInstance :: Name -> Q [Dec]
- encodeByte :: Putter Word8
- decodeByte :: Get Word8
- encodeSignedByte :: Putter Int8
- decodeSignedByte :: Get Int8
- encodeShort :: Putter Word16
- decodeShort :: Get Word16
- encodeSignedShort :: Putter Int16
- decodeSignedShort :: Get Int16
- encodeInt :: Putter Int32
- decodeInt :: Get Int32
- encodeString :: Putter Text
- decodeString :: Get Text
- encodeLongString :: Putter Text
- decodeLongString :: Get Text
- encodeBytes :: Putter ByteString
- decodeBytes :: Get (Maybe ByteString)
- encodeShortBytes :: Putter ByteString
- decodeShortBytes :: Get ByteString
- encodeUUID :: Putter UUID
- decodeUUID :: Get UUID
- encodeList :: Putter [Text]
- decodeList :: Get [Text]
- encodeMap :: Putter [(Text, Text)]
- decodeMap :: Get [(Text, Text)]
- encodeMultiMap :: Putter [(Text, [Text])]
- decodeMultiMap :: Get [(Text, [Text])]
- encodeSockAddr :: Putter SockAddr
- decodeSockAddr :: Get SockAddr
- encodeConsistency :: Putter Consistency
- decodeConsistency :: Get Consistency
- encodeOpCode :: Putter OpCode
- decodeOpCode :: Get OpCode
- encodePagingState :: Putter PagingState
- decodePagingState :: Get (Maybe PagingState)
- decodeKeyspace :: Get Keyspace
- decodeTable :: Get Table
- decodeColumnType :: Get ColumnType
- decodeQueryId :: Get (QueryId k a b)
- putValue :: Version -> Putter Value
- getValue :: Version -> ColumnType -> Get Value
Cql type-class
A type that can be converted from and to some CQL Value
.
This type-class is used to map custom types to Cassandra data-types. For example:
newtype MyType = MyType Int32 instance Cql MyType where ctype = Tagged IntColumn toCql (MyType i) = CqlInt i fromCql (CqlInt i) = Right (MyType i) fromCql _ = Left "Expected CqlInt"
Methods
ctype :: Tagged a ColumnType Source #
the column-type of a
map a
to some CQL data-type
fromCql :: Value -> Either String a Source #
map a CQL value back to a
Instances
Cql Bool Source # | |
Cql Double Source # | |
Cql Float Source # | |
Cql Int32 Source # | |
Cql Int64 Source # | |
Cql Integer Source # | |
Cql Decimal Source # | |
Cql IP Source # | |
Cql Text Source # | |
Cql UTCTime Source # | |
Cql UUID Source # | |
Cql TimeUuid Source # | |
Cql Counter Source # | |
Cql Blob Source # | |
Cql Ascii Source # | |
Cql a => Cql [a] Source # | |
Cql a => Cql (Maybe a) Source # | Please note that due to the fact that Cassandra internally represents
empty collection type values (i.e. lists, maps and sets) as |
Cql a => Cql (Set a) Source # | |
(Cql a, Cql b) => Cql (Map a b) Source # | |
Basic type definitions
Constructors
Keyspace | |
Fields
|
newtype PagingState Source #
Opaque token passed to the server to continue result paging.
Constructors
PagingState | |
Fields |
Instances
newtype QueryString k a b Source #
Constructors
QueryString | |
Fields |
Instances
Eq (QueryString k a b) Source # | |
Show (QueryString k a b) Source # | |
IsString (QueryString k a b) Source # | |
CQL binary protocol version.
data CqlVersion Source #
The CQL version (not the binary protocol version).
Constructors
Cqlv300 | |
CqlVersion !Text |
Instances
data CompressionAlgorithm Source #
Instances
data Compression Source #
Constructors
Compression | |
Fields
|
Instances
data Consistency Source #
Consistency level.
Constructors
Any | |
One | |
Two | |
Three | |
Quorum | |
All | |
LocalQuorum | |
EachQuorum | |
Serial | |
LocalOne | |
LocalSerial |
Instances
An opcode is a tag to distinguish protocol frame bodies.
data ColumnType Source #
The type of a single CQL column.
Constructors
Instances
Constructors
Blob | |
Fields |
Constructors
Counter | |
Fields
|
Constructors
TimeUuid | |
Fields
|
A CQL value. The various constructors correspond to CQL data-types for individual columns in Cassandra.
Constructors
CqlCustom !ByteString | |
CqlBoolean !Bool | |
CqlInt !Int32 | |
CqlBigInt !Int64 | |
CqlVarInt !Integer | |
CqlFloat !Float | |
CqlDecimal !Decimal | |
CqlDouble !Double | |
CqlText !Text | |
CqlInet !IP | |
CqlUuid !UUID | |
CqlTimestamp !Int64 | |
CqlAscii !Text | |
CqlBlob !ByteString | |
CqlCounter !Int64 | |
CqlTimeUuid !UUID | |
CqlMaybe (Maybe Value) | |
CqlList [Value] | |
CqlSet [Value] | |
CqlMap [(Value, Value)] | |
CqlTuple [Value] | binary protocol version >= 3 |
CqlUdt [(Text, Value)] | binary protocol version >= 3 |
Header
Protocol frame header.
Constructors
Header | |
Fields
|
data HeaderType Source #
Instances
header :: Version -> ByteString -> Either String Header Source #
Deserialise a frame header using the version specific decoding format.
encodeHeader :: Version -> HeaderType -> Flags -> StreamId -> OpCode -> Length -> PutM () Source #
Length
The type denoting a protocol frame length.
Constructors
Length | |
Fields
|
decodeLength :: Get Length Source #
StreamId
Streams allow multiplexing of requests over a single communication
channel. The StreamId
correlates Request
s with Response
s.
mkStreamId :: Integral i => i -> StreamId Source #
fromStreamId :: StreamId -> Int Source #
Convert the stream ID to an integer.
Flags
Type representing header flags. Flags form a monoid and can be used
as in compress <> tracing <> mempty
.
Tracing flag. If a request support tracing and the tracing flag was set, the response to this request will have the tracing flag set and contain tracing information.
decodeFlags :: Get Flags Source #
Request
The type corresponding to the protocol request frame.
The type parameter k
denotes the kind of request. It is present to allow
distinguishing read operations from write operations. Use R
for read,
W
for write and S
for schema related operations.
a
represents the argument type and b
the return type of this request.
Arguments
:: Tuple a | |
=> Version | protocol version, which determines the encoding |
-> Compression | compression to use |
-> Bool | enable/disable tracing |
-> StreamId | the stream Id to use |
-> Request k a b | the actual request to serialise |
-> Either String ByteString |
Options
An options request, send prior to Startup
to request the server's
startup options.
Constructors
Options |
Startup
A startup request which is used when initialising a connection to the server. It specifies the CQL version to use and optionally the compression algorithm.
Constructors
Startup !CqlVersion !CompressionAlgorithm |
Auth Response
newtype AuthResponse Source #
A request send in response to a previous authentication challenge.
Constructors
AuthResponse ByteString |
Instances
Register
Register's the connection this request is made through, to receive server events.
Event types to register.
Constructors
TopologyChangeEvent | events related to change in the cluster topology |
StatusChangeEvent | events related to change of node status |
SchemaChangeEvent | events related to schema change |
Query
A CQL query (select, insert, etc.).
Constructors
Query !(QueryString k a b) !(QueryParams a) |
data QueryParams a Source #
Query parameters.
Constructors
QueryParams | |
Fields
|
Instances
Show a => Show (QueryParams a) Source # | |
data SerialConsistency Source #
Consistency level for the serial phase of conditional updates.
Constructors
SerialConsistency | |
LocalSerialConsistency |
Instances
encodeQueryParams :: forall a. Tuple a => Version -> Putter (QueryParams a) Source #
Batch
Allows executing a list of queries (prepared or not) as a batch.
Constructors
Batch | |
Fields |
data BatchQuery where Source #
A GADT to unify queries and prepared queries both of which can be used in batch requests.
Constructors
BatchQuery :: (Show a, Tuple a, Tuple b) => !(QueryString W a b) -> !a -> BatchQuery | |
BatchPrepared :: (Show a, Tuple a, Tuple b) => !(QueryId W a b) -> !a -> BatchQuery |
Instances
Constructors
BatchLogged | default, uses a batch log for atomic application |
BatchUnLogged | skip the batch log |
BatchCounter | used for batched counter updates |
Prepare
newtype Prepare k a b Source #
Prepare a query for later execution (cf. Execute
).
Constructors
Prepare (QueryString k a b) |
encodePrepare :: Putter (Prepare k a b) Source #
Execute
Executes a prepared query.
Constructors
Execute !(QueryId k a b) !(QueryParams a) |
Response
The type corresponding to the protocol response frame.
The type parameter k
denotes the kind of response. It is present to allow
distinguishing read operations from write operations. Use R
for read,
W
for write and S
for schema related operations.
a
represents the argument type and b
the return type of this
response.
Constructors
RsError (Maybe UUID) !Error | |
RsReady (Maybe UUID) !Ready | |
RsAuthenticate (Maybe UUID) !Authenticate | |
RsAuthChallenge (Maybe UUID) !AuthChallenge | |
RsAuthSuccess (Maybe UUID) !AuthSuccess | |
RsSupported (Maybe UUID) !Supported | |
RsResult (Maybe UUID) !(Result k a b) | |
RsEvent (Maybe UUID) !Event |
unpack :: (Tuple a, Tuple b) => Compression -> Header -> ByteString -> Either String (Response k a b) Source #
Deserialise a Response
from the given ByteString
.
Ready
The server is ready to process queries. Response of a Startup
request.
Constructors
Ready |
decodeReady :: Get Ready Source #
Authenticate
newtype Authenticate Source #
The server requires authentication.
Constructors
Authenticate Text |
Instances
newtype AuthChallenge Source #
A server-send authentication challenge.
Constructors
AuthChallenge (Maybe ByteString) |
Instances
newtype AuthSuccess Source #
Indicates the success of an authentication phase.
Constructors
AuthSuccess (Maybe ByteString) |
Instances
Result
Query response.
Constructors
VoidResult | |
RowsResult !MetaData [b] | |
SetKeyspaceResult !Keyspace | |
PreparedResult !(QueryId k a b) !MetaData !MetaData | |
SchemaChangeResult !SchemaChange |
Part of a RowsResult
. Describes the result set.
Constructors
MetaData | |
Fields
|
data ColumnSpec Source #
The column specification. Part of MetaData
unless skipMetaData
in
QueryParams
was True.
Constructors
ColumnSpec | |
Fields
|
Instances
Supported
The startup options supported by the server. Response of an Options
request.
Constructors
Supported [CompressionAlgorithm] [CqlVersion] |
Event
Messages send by the server without request, if the connection has
been Register
ed to receive such events.
Constructors
TopologyEvent !TopologyChange !SockAddr | |
StatusEvent !StatusChange !SockAddr | |
SchemaEvent !SchemaChange |
data SchemaChange Source #
Constructors
SchemaCreated !Change | |
SchemaUpdated !Change | |
SchemaDropped !Change |
Instances
data StatusChange Source #
Instances
Constructors
KeyspaceChange !Keyspace | |
TableChange !Keyspace !Table | |
TypeChange !Keyspace !Text |
Error
Error response.
Constructors
AlreadyExists !Text !Keyspace !Table | |
BadCredentials !Text | |
ConfigError !Text | |
Invalid !Text | |
IsBootstrapping !Text | |
Overloaded !Text | |
ProtocolError !Text | |
ServerError !Text | |
SyntaxError !Text | |
TruncateError !Text | |
Unauthorized !Text | |
Unprepared !Text !ByteString | |
Unavailable | |
Fields
| |
ReadTimeout | |
Fields
| |
WriteTimeout | |
Fields |
Constructors
WriteSimple | |
WriteBatch | |
WriteBatchLog | |
WriteUnloggedBatch | |
WriteCounter |
decodeError :: Get Error Source #
Tuple and Record
check :: PrivateTuple a => Tagged a ([ColumnType] -> [ColumnType]) Source #
A row is a vector of Value
s.
columnTypes :: Row -> [ColumnType] Source #
Record/Tuple conversion. For example:
data Peer = Peer { peerAddr :: IP , peerRPC :: IP , peerDC :: Text , peerRack :: Text } deriving Show recordInstance ''Peer map asRecord <$> performQuery "SELECT peer, rpc_address, data_center, rack FROM system.peers"
The generated type-class instance maps between record and tuple constructors:
type instance TupleType Peer = (IP, IP, Text, Text) instance Record Peer where asTuple (Peer a b c d) = (a, b, c, d) asRecord (a, b, c, d) = Peer a b c d
Codec
encodeByte :: Putter Word8 Source #
decodeByte :: Get Word8 Source #
decodeShort :: Get Word16 Source #
decodeString :: Get Text Source #
decodeBytes :: Get (Maybe ByteString) Source #
encodeUUID :: Putter UUID Source #
decodeUUID :: Get UUID Source #
encodeList :: Putter [Text] Source #
decodeList :: Get [Text] Source #
decodeOpCode :: Get OpCode Source #
decodeTable :: Get Table Source #
decodeQueryId :: Get (QueryId k a b) Source #