Protocol::CassandraCQL::Frames - build or parse frame bodies for specific message types
Protocol::CassandraCQL::Frames
use Protocol::CassandraCQL qw( build_frame ); use Protocol::CassandraCQL::Frames qw( build_query_frame ); my $bytes = build_frame( 0x01, 0, $streamid, OPCODE_QUERY, build_query_frame( 1, cql => "CQL STRING", consistency => $consistency )->bytes );
This module provides a number of convenient functions to build and parse frame bodies for specific kinds of CQL message. Each should be paired with a call to build_frame or send_frame with the appropriate opcode constant, or invoked after parse_frame or recv_frame has received a frame with the appropriate opcode.
CQL
build_frame
send_frame
parse_frame
recv_frame
Each build_* function takes as its first argument the CQL protocol version (the value that will be passed to build_frame or send_frame). This value is used to ensure all the correct information is present in the frame body, and that no optional parameters are passed that the chosen version of the protocol cannot support.
build_*
Builds the frame for an OPCODE_STARTUP message. Takes a reference to a hash of named options. These options should include CQL_VERSION.
OPCODE_STARTUP
CQL_VERSION
Builds the frame for an OPCODE_CREDENTIALS message. Takes a reference to a hash of credentials, the exact keys of which will depend on the authenticator returned by the OPCODE_AUTHENTICATE message.
OPCODE_CREDENTIALS
OPCODE_AUTHENTICATE
Builds the frame for an OPCODE_QUERY message. Takes the CQL string and the query parameters.
OPCODE_QUERY
QUERY_PARAMS contains the following keys:
QUERY_PARAMS
The consistency level. (required)
The encoded byte values of the bind parameters (optional, v2+ only)
If true, sets the QUERY_SKIP_METADATA flag. (optional, v2+ only)
QUERY_SKIP_METADATA
The paging size (optional, v2+ only)
The paging state from the previous result to a query or execute. (optional, v2+ only)
The consistency level for CAS serialisation operations (optional, v2+ only)
Builds the frame for an OPCODE_PREPARE message. Takes the CQL string.
OPCODE_PREPARE
Builds the frame for an OPCODE_EXECUTE message. Takes the prepared statement ID, and the query parameters. QUERY_PARAMS is as for build_query_frame, except that the values key is required and permitted even at protocol version 1.
OPCODE_EXECUTE
build_query_frame
values
Builds the frame for an OPCODE_REGISTER message. Takes an ARRAY reference of strings giving the event names.
OPCODE_REGISTER
Parses the frame from an OPCODE_ERROR message. Returns an error code value and a string message.
OPCODE_ERROR
Parses the frame from an OPCODE_AUTHENTICATE message. Returns the authenticator name as a string.
Parses the frame from an OPCODE_SUPPORTED message. Returns a HASH reference mapping option names to ARRAYs of supported values.
OPCODE_SUPPORTED
Parses the frame from an OPCODE_RESULT message. Returns a type value (one of the TYPE_* constants), and a value whose interpretation depends on the type.
OPCODE_RESULT
TYPE_*
RESULT_VOID
$result is undef. (This is returned by data modification queries such as INSERT, UPDATE and DELETE).
$result
undef
INSERT
UPDATE
DELETE
RESULT_ROWS
$result is an instance of Protocol::CassandraCQL::Result containing the row data. (This is returned by SELECT queries).
SELECT
RESULT_SET_KEYSPACE
$result is a string containing the new keyspace name. (This is returned by USE queries).
USE
RESULT_PREPARED
$result is an ARRAY reference containing the query ID as a string, and the bind parameters' metadata as an instance of Protocol::CassandraCQL::ColumnMeta. For v2+ this will also return the result metadata as another Protocol::CassandraCQL::ColumnMeta instance.
Protocol::CassandraCQL::ColumnMeta
RESULT_SCHEMA_CHANGE
$result is an ARRAY reference containing three strings, giving the type of change, the keyspace, and the table name. (This is returned by data definition queries such as CREATE, ALTER and DROP).
CREATE
ALTER
DROP
If any other type is encountered, $result will be the $frame object itself.
$frame
Parses the frame from an OPCODE_EVENT message. Returns the event name and a list of its arguments; which will vary depending on the event name.
OPCODE_EVENT
TOPOLOGY_CHANGE
@args will contain the change type string and a node inet address
@args
STATUS_CHANGE
@args will contain the status type string and a node inet address
SCHEMA_CHANGE
@args will contain three strings, containing the change type, keyspace, and table name
If the event name is unrecognised, @args will return just the $frame object itself.
This code was paid for by
Perceptyx http://www.perceptyx.com/
Shadowcat Systems http://www.shadow.cat
Paul Evans <leonerd@leonerd.org.uk>
To install Protocol::CassandraCQL, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Protocol::CassandraCQL
CPAN shell
perl -MCPAN -e shell install Protocol::CassandraCQL
For more information on module installation, please visit the detailed CPAN module installation guide.