Skip to content
This repository has been archived by the owner on Oct 20, 2022. It is now read-only.
moldcraft edited this page Jun 3, 2013 · 28 revisions

Usage

Connection

The DSN format matches the following syntax:

"cassandra:[host=ip_address;port=port_number],+"

Sample connections syntaxes:

"cassandra:host=10.0.0.1;port=9160,host=10.0.0.2;port=9162;cqlversion=3.0.0"
"cassandra:host=localhost;port=9160"

The connection respects the PDO construction:

$db_handle = new PDO("cassandra:host=localhost;port=9160", $username, $password);

The constructor honours the following options

These options can be passed in the fourth argument for PDO constructor

PDO_ATTR_TIMEOUT Connection timeout value
PDO::CASSANDRA_ATTR_THRIFT_DEBUG Converts thrift debug output into PHP warnings
PDO::CASSANDRA_ATTR_PRESERVE_VALUES boolean Preserves values as they come from Cassandra

Driver specific attributes for PDO::setAttribute

PDO::CASSANDRA_ATTR_NUM_RETRIES integer The amount of connection retries
PDO::CASSANDRA_ATTR_RETRY_INTERVAL integer Sets how many times to keep retrying a host before marking it as down.
PDO::CASSANDRA_ATTR_MAX_CONSECUTIVE_FAILURES integer Sets how many times to keep retrying a host before marking it as down.
PDO::CASSANDRA_ATTR_LINGER integer How long does the socket linger after it's being closed
PDO::CASSANDRA_ATTR_NO_DELAY boolean Whether to enable/disable Nagle algorithm
PDO::CASSANDRA_ATTR_CONN_TIMEOUT integer Connection timeout
PDO::CASSANDRA_ATTR_RECV_TIMEOUT integer Receive timeout
PDO::CASSANDRA_ATTR_SEND_TIMEOUT integer Send timeout
PDO::CASSANDRA_ATTR_COMPRESSION boolean Whether to enable/disable compression
PDO::CASSANDRA_ATTR_THRIFT_DEBUG boolean Converts thrift debug output into PHP warnings
PDO::CASSANDRA_ATTR_PRESERVE_VALUES boolean Preserves values as they come from Cassandra

Transactions

Transactions are not supported and calling PDO::beginTransaction will result in an exception.

Request Execution

Direct execution

$db_handle->exec("UPDATE mytable SET my_int=42 WHERE my_key='awesome');

Prepared statements

$stmt = $db_handle->prepare("SELECT my_int FROM my_table WHERE my_key=:key;");
$stmt->bindValue(':my_key, 'awesome');
$stmt->execute();
print_r($stmt->fetch(PDO::FETCH_ASSOC));

Binding

Special types representation

Decimal type

Cassandra decimal type is implemented using variable precision. This means that according to the actual size of the unscaled value (uv), the uv can be stored on an integer or a n bytes number.

PHP has no core support for multiprecision numbers. To avoid to add dependencies on external libraries such as GMP, the values are returned as an array representing the uv as is:

Value Type Explanation
scale_factor int 10 power - scalefactor
unscaled_val int,long Least significant part (1 time)
unscaled_val long (0..n times)
unscaled_val int,long (0,1 time) Most significant part

E.G 4242.21 would be represented as follow:

Value Type Explanation
2 int scale factor
424221 long unscaled_val

112233445566778899.112233445566778899 would be represented as follow:

Value Type Explanation
18 int scale factor
8234495237290528275 long unscaled_val
6084187275451764 int unscaled_val Most significant type

The value can be calculated like this: 8234495237290528275 + 6084187275451764 * 2 power 64

Clone this wiki locally