[
https://issues.apache.org/jira/browse/CASSANDRA-3025?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13093222#comment-13093222
]
Mikko Koppanen commented on CASSANDRA-3025:
-------------------------------------------
bq. Why is that? Does PDO require only primitive or string column names?
This is not actually a PDO requirement but rather PHP array type requirement. A
key in array can be integer or string. I looked at phpcassa code briefly and it
doesn't seem that they automatically marshal the UUIDs but rather provide a
method for doing that.
bq. should test an actual "big" int (> 64bit)
I added a test for very big integers. There is really no native datatype in PHP
that could handle this, so I took the following approach:
1. If the integer is larger than 8 bytes, return LONG_MIN
2. If user sees LONG_MIN, it means that binary presentation might be different
3. Turn on CASSANDRA_ATTR_PRESERVE_VALUES and convert manually, using bcmath or
gmp libraries.
Currently the conversion back to userland will overflow on 32bit platforms when
values larger than LONG_MAX or smaller than INT_MIN. Not sure if there is a
clean and portable way to handle this as PHP uses platform long for integer
types rather than fixed width integers.
> PHP/PDO driver for Cassandra CQL
> --------------------------------
>
> Key: CASSANDRA-3025
> URL: https://issues.apache.org/jira/browse/CASSANDRA-3025
> Project: Cassandra
> Issue Type: New Feature
> Components: API
> Reporter: Mikko Koppanen
> Labels: php
> Attachments: pdo_cassandra-0.1.0.tgz, pdo_cassandra-0.1.1.tgz,
> pdo_cassandra-0.1.2.tgz, pdo_cassandra-0.1.3.tgz,
> php_test_results_20110818_2317.txt
>
>
> Hello,
> attached is the initial version of the PDO driver for Cassandra CQL language.
> This is a native PHP extension written in what I would call a combination of
> C and C++, due to PHP being C. The thrift API used is the C++.
> The API looks roughly following:
> {code}
> <?php
> $db = new PDO('cassandra:host=127.0.0.1;port=9160');
> $db->exec ("CREATE KEYSPACE mytest with strategy_class = 'SimpleStrategy' and
> strategy_options:replication_factor=1;");
> $db->exec ("USE mytest");
> $db->exec ("CREATE COLUMNFAMILY users (
> my_key varchar PRIMARY KEY,
> full_name varchar );");
>
> $stmt = $db->prepare ("INSERT INTO users (my_key, full_name) VALUES (:key,
> :full_name);");
> $stmt->execute (array (':key' => 'mikko', ':full_name' => 'Mikko K' ));
> {code}
> Currently prepared statements are emulated on the client side but I
> understand that there is a plan to add prepared statements to Cassandra CQL
> API as well. I will add this feature in to the extension as soon as they are
> implemented.
> Additional documentation can be found in github
> https://github.com/mkoppanen/php-pdo_cassandra, in the form of rendered
> MarkDown file. Tests are currently not included in the package file and they
> can be found in the github for now as well.
> I have created documentation in docbook format as well, but have not yet
> rendered it.
> Comments and feedback are welcome.
> Thanks,
> Mikko
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira