Skip to content

Commit 6075658

Browse files
committed
Merge pull request #54 from datastax/55
55 - C/C++ driver 2.2 support
2 parents 4a246be + a9a90a6 commit 6075658

12 files changed

+236
-70
lines changed

ext/php_cassandra.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,12 @@ void throw_invalid_argument(zval* object,
100100

101101
#define ASSERT_SUCCESS_VALUE(rc, value) ASSERT_SUCCESS_BLOCK(rc, return value;)
102102

103+
#define CPP_DRIVER_VERSION(major, minor, patch) \
104+
(((major) << 16) + ((minor) << 8) + (patch))
105+
106+
#define CURRENT_CPP_DRIVER_VERSION \
107+
CPP_DRIVER_VERSION(CASS_VERSION_MAJOR, CASS_VERSION_MINOR, CASS_VERSION_PATCH)
108+
103109
#include "php_cassandra_types.h"
104110

105111
PHP_MINIT_FUNCTION(cassandra);

ext/php_cassandra_types.h

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,26 +260,44 @@ typedef struct {
260260
cassandra_ref* schema;
261261
} cassandra_schema;
262262

263+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
264+
typedef const CassKeyspaceMeta cassandra_keyspace_meta;
265+
#else
266+
typedef const CassSchemaMeta cassandra_keyspace_meta;
267+
#endif
268+
263269
typedef struct {
264270
zend_object zval;
265271
cassandra_ref* schema;
266-
const CassSchemaMeta* meta;
272+
cassandra_keyspace_meta* meta;
267273
} cassandra_keyspace;
268274

275+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
276+
typedef const CassTableMeta cassandra_table_meta;
277+
#else
278+
typedef const CassSchemaMeta cassandra_table_meta;
279+
#endif
280+
269281
typedef struct {
270282
zend_object zval;
271283
cassandra_ref* schema;
272-
const CassSchemaMeta* meta;
284+
cassandra_table_meta* meta;
273285
} cassandra_table;
274286

287+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
288+
typedef const CassColumnMeta cassandra_column_meta;
289+
#else
290+
typedef const CassSchemaMeta cassandra_column_meta;
291+
#endif
292+
275293
typedef struct {
276294
zend_object zval;
277295
zval* name;
278296
zval* type;
279297
int reversed;
280298
int frozen;
281299
cassandra_ref* schema;
282-
const CassSchemaMeta* meta;
300+
cassandra_column_meta* meta;
283301
} cassandra_column;
284302

285303
typedef struct {

ext/src/Cassandra/DefaultColumn.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,27 @@ PHP_METHOD(DefaultColumn, isReversed)
4545

4646
PHP_METHOD(DefaultColumn, isStatic)
4747
{
48-
cassandra_column* self;
48+
cassandra_column* self;
49+
const CassValue* value;
50+
const char* str;
51+
size_t str_len;
52+
53+
#if CURRENT_CPP_DRIVER_VERSION < CPP_DRIVER_VERSION(2, 2, 0)
4954
const CassSchemaMetaField* field;
50-
const CassValue* value;
51-
const char* str;
52-
size_t str_len;
55+
#endif
5356

5457
if (zend_parse_parameters_none() == FAILURE) {
5558
return;
5659
}
5760

5861
self = (cassandra_column*) zend_object_store_get_object(getThis() TSRMLS_CC);
62+
63+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
64+
value = cass_column_meta_field_by_name(self->meta, "type");
65+
#else
5966
field = cass_schema_meta_get_field(self->meta, "type");
6067
value = cass_schema_meta_field_value(field);
68+
#endif
6169

6270
ASSERT_SUCCESS_BLOCK(cass_value_get_string(value, &str, &str_len),
6371
RETURN_FALSE;
@@ -94,7 +102,7 @@ PHP_METHOD(DefaultColumn, indexName)
94102

95103
self = (cassandra_column*) zend_object_store_get_object(getThis() TSRMLS_CC);
96104

97-
php_cassandra_get_schema_field(self->meta, "index_name", &value TSRMLS_CC);
105+
php_cassandra_get_column_field(self->meta, "index_name", &value TSRMLS_CC);
98106
RETURN_ZVAL(value, 0, 1);
99107
}
100108

@@ -109,7 +117,7 @@ PHP_METHOD(DefaultColumn, indexOptions)
109117

110118
self = (cassandra_column*) zend_object_store_get_object(getThis() TSRMLS_CC);
111119

112-
php_cassandra_get_schema_field(self->meta, "index_options", &value TSRMLS_CC);
120+
php_cassandra_get_column_field(self->meta, "index_options", &value TSRMLS_CC);
113121
RETURN_ZVAL(value, 0, 1);
114122
}
115123

ext/src/Cassandra/DefaultKeyspace.c

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ PHP_METHOD(DefaultKeyspace, name)
1414

1515
self = (cassandra_keyspace*) zend_object_store_get_object(getThis() TSRMLS_CC);
1616

17-
php_cassandra_get_schema_field(self->meta, "keyspace_name", &value TSRMLS_CC);
17+
php_cassandra_get_keyspace_field(self->meta, "keyspace_name", &value TSRMLS_CC);
1818
RETURN_ZVAL(value, 0, 1);
1919
}
2020

@@ -28,7 +28,7 @@ PHP_METHOD(DefaultKeyspace, replicationClassName)
2828

2929
self = (cassandra_keyspace*) zend_object_store_get_object(getThis() TSRMLS_CC);
3030

31-
php_cassandra_get_schema_field(self->meta, "strategy_class", &value TSRMLS_CC);
31+
php_cassandra_get_keyspace_field(self->meta, "strategy_class", &value TSRMLS_CC);
3232
RETURN_ZVAL(value, 0, 1);
3333
}
3434

@@ -42,7 +42,7 @@ PHP_METHOD(DefaultKeyspace, replicationOptions)
4242

4343
self = (cassandra_keyspace*) zend_object_store_get_object(getThis() TSRMLS_CC);
4444

45-
php_cassandra_get_schema_field(self->meta, "strategy_options", &value TSRMLS_CC);
45+
php_cassandra_get_keyspace_field(self->meta, "strategy_options", &value TSRMLS_CC);
4646
RETURN_ZVAL(value, 0, 1);
4747
}
4848

@@ -56,7 +56,7 @@ PHP_METHOD(DefaultKeyspace, hasDurableWrites)
5656

5757
self = (cassandra_keyspace*) zend_object_store_get_object(getThis() TSRMLS_CC);
5858

59-
php_cassandra_get_schema_field(self->meta, "durable_writes", &value TSRMLS_CC);
59+
php_cassandra_get_keyspace_field(self->meta, "durable_writes", &value TSRMLS_CC);
6060
RETURN_ZVAL(value, 0, 1);
6161
}
6262

@@ -66,14 +66,18 @@ PHP_METHOD(DefaultKeyspace, table)
6666
int name_len;
6767
cassandra_keyspace* self;
6868
cassandra_table* table;
69-
const CassSchemaMeta* meta;
69+
cassandra_table_meta* meta;
7070

7171
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
7272
return;
7373
}
7474

7575
self = (cassandra_keyspace*) zend_object_store_get_object(getThis() TSRMLS_CC);
76+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
77+
meta = cass_keyspace_meta_table_by_name(self->meta, name);
78+
#else
7679
meta = cass_schema_meta_get_entry(self->meta, name);
80+
#endif
7781

7882
if (meta == NULL) {
7983
return;
@@ -87,27 +91,39 @@ PHP_METHOD(DefaultKeyspace, table)
8791

8892
PHP_METHOD(DefaultKeyspace, tables)
8993
{
90-
cassandra_keyspace* self;
91-
cassandra_table* table;
92-
const CassSchemaMeta* meta;
93-
CassIterator* iterator;
94-
const CassSchemaMetaField* field;
95-
const CassValue* value;
96-
const char* table_name;
97-
size_t table_name_len;
98-
zval* zend_table;
99-
94+
cassandra_keyspace* self;
95+
CassIterator* iterator;
10096
if (zend_parse_parameters_none() == FAILURE)
10197
return;
10298

10399
self = (cassandra_keyspace*) zend_object_store_get_object(getThis() TSRMLS_CC);
100+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
101+
iterator = cass_iterator_tables_from_keyspace_meta(self->meta);
102+
#else
104103
iterator = cass_iterator_from_schema_meta(self->meta);
104+
#endif
105105

106106
array_init(return_value);
107107
while (cass_iterator_next(iterator)) {
108+
cassandra_table_meta* meta;
109+
const CassValue* value;
110+
const char* table_name;
111+
size_t table_name_len;
112+
zval* zend_table;
113+
cassandra_table* table;
114+
115+
#if CURRENT_CPP_DRIVER_VERSION < CPP_DRIVER_VERSION(2, 2, 0)
116+
const CassSchemaMetaField* field;
117+
#endif
118+
119+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
120+
meta = cass_iterator_get_table_meta(iterator);
121+
value = cass_table_meta_field_by_name(meta, "columnfamily_name");
122+
#else
108123
meta = cass_iterator_get_schema_meta(iterator);
109124
field = cass_schema_meta_get_field(meta, "columnfamily_name");
110125
value = cass_schema_meta_field_value(field);
126+
#endif
111127

112128
ASSERT_SUCCESS_BLOCK(cass_value_get_string(value, &table_name, &table_name_len),
113129
zval_ptr_dtor(&return_value);

ext/src/Cassandra/DefaultSchema.c

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,18 @@ PHP_METHOD(DefaultSchema, keyspace)
99
int name_len;
1010
cassandra_schema* self;
1111
cassandra_keyspace* keyspace;
12-
const CassSchemaMeta* meta;
12+
cassandra_keyspace_meta* meta;
1313

1414
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
1515
return;
1616
}
1717

1818
self = (cassandra_schema*) zend_object_store_get_object(getThis() TSRMLS_CC);
19+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
20+
meta = cass_schema_meta_keyspace_by_name_n((CassSchemaMeta*) self->schema->data, name, name_len);
21+
#else
1922
meta = cass_schema_get_keyspace_n((CassSchema*) self->schema->data, name, name_len);
23+
#endif
2024

2125
if (meta == NULL) {
2226
RETURN_NULL();
@@ -31,26 +35,39 @@ PHP_METHOD(DefaultSchema, keyspace)
3135
PHP_METHOD(DefaultSchema, keyspaces)
3236
{
3337
cassandra_schema* self;
34-
CassIterator* iterator;
35-
const CassSchemaMeta* meta;
36-
const CassSchemaMetaField* field;
37-
const CassValue* value;
38-
const char* keyspace_name;
39-
size_t keyspace_name_len;
40-
zval* zend_keyspace;
41-
cassandra_keyspace* keyspace;
38+
CassIterator* iterator;
4239

4340
if (zend_parse_parameters_none() == FAILURE)
4441
return;
4542

4643
self = (cassandra_schema*) zend_object_store_get_object(getThis() TSRMLS_CC);
44+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
45+
iterator = cass_iterator_keyspaces_from_schema_meta((CassSchemaMeta*) self->schema->data);
46+
#else
4747
iterator = cass_iterator_from_schema((CassSchema*) self->schema->data);
48+
#endif
4849

4950
array_init(return_value);
5051
while (cass_iterator_next(iterator)) {
52+
cassandra_keyspace_meta* meta;
53+
const CassValue* value;
54+
const char* keyspace_name;
55+
size_t keyspace_name_len;
56+
zval* zend_keyspace;
57+
cassandra_keyspace* keyspace;
58+
59+
#if CURRENT_CPP_DRIVER_VERSION < CPP_DRIVER_VERSION(2, 2, 0)
60+
const CassSchemaMetaField* field;
61+
#endif
62+
63+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
64+
meta = cass_iterator_get_keyspace_meta(iterator);
65+
value = cass_keyspace_meta_field_by_name(meta, "keyspace_name");
66+
#else
5167
meta = cass_iterator_get_schema_meta(iterator);
5268
field = cass_schema_meta_get_field(meta, "keyspace_name");
5369
value = cass_schema_meta_field_value(field);
70+
#endif
5471

5572
ASSERT_SUCCESS_BLOCK(cass_value_get_string(value, &keyspace_name, &keyspace_name_len),
5673
zval_ptr_dtor(&return_value);

ext/src/Cassandra/DefaultSession.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,11 @@ PHP_METHOD(DefaultSession, closeAsync)
685685
static void
686686
free_schema(void* schema)
687687
{
688+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
689+
cass_schema_meta_free((CassSchemaMeta*) schema);
690+
#else
688691
cass_schema_free((CassSchema*) schema);
692+
#endif
689693
}
690694

691695
PHP_METHOD(DefaultSession, schema)
@@ -700,8 +704,13 @@ PHP_METHOD(DefaultSession, schema)
700704
object_init_ex(return_value, cassandra_default_schema_ce);
701705
schema = (cassandra_schema*) zend_object_store_get_object(return_value TSRMLS_CC);
702706

707+
#if CURRENT_CPP_DRIVER_VERSION >= CPP_DRIVER_VERSION(2, 2, 0)
708+
schema->schema = php_cassandra_new_ref((void*) cass_session_get_schema_meta(self->session),
709+
free_schema);
710+
#else
703711
schema->schema = php_cassandra_new_ref((void*) cass_session_get_schema(self->session),
704712
free_schema);
713+
#endif
705714
}
706715

707716
ZEND_BEGIN_ARG_INFO_EX(arginfo_execute, 0, ZEND_RETURN_VALUE, 1)

0 commit comments

Comments
 (0)