Hello to everyone, I'm pretty new to Cassandra and I'm working on PHP based 
projects.
For interface PHP with Cassandra I use the DataStax PHP driver, which lately 
has been updated to the version 1.2.2 and now I've a trouble while using LIST 
data type: when I try to use a prepared statement and I pass a Collection 
object as parameter I got the error "Invalid value type".
Here's a simple test:

try{
        $cluster = Cassandra::cluster()->build();
        $session = $cluster->connect('test');
        $statement = new Cassandra\SimpleStatement('CREATE TABLE IF NOT EXISTS 
list_test (name VARCHAR, id UUID, date TIMESTAMP, values LIST<VARCHAR>, PRIMARY 
KEY((name), id)) WITH CLUSTERING ORDER BY (id ASC);');
        $session->execute($statement);
        $list = new Cassandra\Collection(Cassandra::TYPE_VARCHAR);
        $list->add('foo');
        $list->add('bar');
        $statement = $session->prepare('INSERT INTO list_test (name, id, date, 
values) VALUES (?, uuid(), toTimestamp(now()), ?) IF NOT EXISTS;');
        $result = $session->execute($statement, new 
Cassandra\ExecutionOptions(array('arguments' => array('Test', $list))));
        while ($result) {
                foreach ($result as $row) {
                        if ( !isset($row['[applied]']) || $row['[applied]'] !== 
true ){
                                echo 'FAIL';
                        }
                }
                $result = $result->nextPage();
        }
        echo 'OK';
}catch(Exception $ex){
        echo var_dump($ex);
}

Here's the var_dump result of the Collection object:

object(Cassandra\Collection)#11 (2) { ["type"]=> object(Cassandra\Type\Set)#12 
(1) { ["valueType"]=> object(Cassandra\Type\Scalar)#13 (1) { ["name"]=> 
string(7) "varchar" } } ["values"]=> array(2) { [0]=> string(3) "foo" [1]=> 
string(3) "bar" } } 

And here there's the exception thrown:

object(Cassandra\Exception\InvalidArgumentException)#15 (7) { 
["message":protected]=> string(18) "Invalid value type" 
["string":"Exception":private]=> string(0) "" ["code":protected]=> 
int(16777229) ["file":protected]=> string(47) 
"/var/www/lab/Resources/_install/bin/install.php" ["line":protected]=> int(24) 
["trace":"Exception":private]=> array(2) { [0]=> array(6) { ["file"]=> 
string(47) "/var/www/lab/Resources/_install/bin/install.php" ["line"]=> int(24) 
["function"]=> string(7) "execute" ["class"]=> string(24) 
"Cassandra\DefaultSession" ["type"]=> string(2) "->" ["args"]=> array(2) { 
[0]=> object(Cassandra\PreparedStatement)#14 (0) { } [1]=> 
object(Cassandra\ExecutionOptions)#10 (0) { } } } [1]=> array(4) { ["file"]=> 
string(22) "/var/www/lab/index.php" ["line"]=> int(146) ["args"]=> array(1) { 
[0]=> string(47) "/var/www/lab/Resources/_install/bin/install.php" } 
["function"]=> string(12) "include_once" } } ["previous":"Exception":private]=> 
NULL } 

Now my question is: I'm doing something wrong or this is a bug in the DataStax 
driver?
For avoid sending another message I've also another question, it's normal that 
databases like MySQL or SQLite takes less that 1 ms for run a query while 
Cassandra takes about ten times more time? (I'm talking on PHP)

DATABASES BENCHMARK:

MySQL:
TABLE CREATION: 0.0015501976013184 SECONDS.
INSERT: 0.00049901008605957 SECONDS.
SELECT: 7.1525573730469E-6 SECONDS.

CASSANDRA:
TABLE CREATION: 0.080638885498047 SECONDS.
INSERT: 0.038239002227783 SECONDS.
SELECT: 0.025631904602051 SECONDS.

SQLITE 3:
TABLE CREATION: 0.0025551319122314 SECONDS.
INSERT: 0.012134075164795 SECONDS.
SELECT: 7.1048736572266E-5 SECONDS.

My software enviroment for this test:

PHP 7.0.8
NGINX 1.4.6
Ubuntu 14.04 LTS
MySQL 5.5.50
Cassandra 3.0.8 (DataStax PHP Driver 1.2.2)
SQLite 3

Thanks for help,

Enrico.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to