Skip to content

Commit 65d7c45

Browse files
committed
Added partition key (and fixed primary key) for tables and views
1 parent 39eb5b3 commit 65d7c45

File tree

4 files changed

+115
-50
lines changed

4 files changed

+115
-50
lines changed

ext/php_cassandra_types.h

+2
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@ PHP_CASSANDRA_BEGIN_OBJECT_TYPE(table)
365365
php5to7_zval name;
366366
php5to7_zval options;
367367
php5to7_zval partition_key;
368+
php5to7_zval primary_key;
368369
php5to7_zval clustering_key;
369370
php5to7_zval clustering_order;
370371
cassandra_ref *schema;
@@ -375,6 +376,7 @@ PHP_CASSANDRA_BEGIN_OBJECT_TYPE(materialized_view)
375376
php5to7_zval name;
376377
php5to7_zval options;
377378
php5to7_zval partition_key;
379+
php5to7_zval primary_key;
378380
php5to7_zval clustering_key;
379381
php5to7_zval clustering_order;
380382
php5to7_zval base_table;

ext/src/Cassandra/DefaultMaterializedView.c

+56-25
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,38 @@
2626

2727
zend_class_entry *cassandra_default_materialized_view_ce = NULL;
2828

29+
static void
30+
populate_partition_key(cassandra_materialized_view *view, zval *result TSRMLS_DC)
31+
{
32+
size_t i, count = cass_materialized_view_meta_partition_key_count(view->meta);
33+
for (i = 0; i < count; ++i) {
34+
const CassColumnMeta *column =
35+
cass_materialized_view_meta_partition_key(view->meta, i);
36+
if (column) {
37+
php5to7_zval zcolumn = php_cassandra_create_column(view->schema, column TSRMLS_CC);
38+
if (!PHP5TO7_ZVAL_IS_UNDEF(zcolumn)) {
39+
add_next_index_zval(result, PHP5TO7_ZVAL_MAYBE_P(zcolumn));
40+
}
41+
}
42+
}
43+
}
44+
45+
static void
46+
populate_clustering_key(cassandra_materialized_view *view, zval *result TSRMLS_DC)
47+
{
48+
size_t i, count = cass_materialized_view_meta_clustering_key_count(view->meta);
49+
for (i = 0; i < count; ++i) {
50+
const CassColumnMeta *column =
51+
cass_materialized_view_meta_clustering_key(view->meta, i);
52+
if (column) {
53+
php5to7_zval zcolumn = php_cassandra_create_column(view->schema, column TSRMLS_CC);
54+
if (!PHP5TO7_ZVAL_IS_UNDEF(zcolumn)) {
55+
add_next_index_zval(result, PHP5TO7_ZVAL_MAYBE_P(zcolumn));
56+
}
57+
}
58+
}
59+
}
60+
2961
php5to7_zval
3062
php_cassandra_create_materialized_view(cassandra_ref* schema,
3163
const CassMaterializedViewMeta *meta TSRMLS_DC)
@@ -398,7 +430,7 @@ PHP_METHOD(DefaultMaterializedView, columns)
398430
cass_iterator_free(iterator);
399431
}
400432

401-
PHP_METHOD(DefaultMaterializedView, primaryKey)
433+
PHP_METHOD(DefaultMaterializedView, partitionKey)
402434
{
403435
cassandra_materialized_view *self;
404436

@@ -407,25 +439,32 @@ PHP_METHOD(DefaultMaterializedView, primaryKey)
407439

408440
self = PHP_CASSANDRA_GET_MATERIALIZED_VIEW(getThis());
409441
if (PHP5TO7_ZVAL_IS_UNDEF(self->partition_key)) {
410-
size_t i, count = cass_materialized_view_meta_partition_key_count(self->meta);
411442
PHP5TO7_ZVAL_MAYBE_MAKE(self->partition_key);
412443
array_init(PHP5TO7_ZVAL_MAYBE_P(self->partition_key));
413-
for (i = 0; i < count; ++i) {
414-
const CassColumnMeta *column =
415-
cass_materialized_view_meta_partition_key(self->meta, i);
416-
if (column) {
417-
php5to7_zval zcolumn = php_cassandra_create_column(self->schema, column TSRMLS_CC);
418-
if (!PHP5TO7_ZVAL_IS_UNDEF(zcolumn)) {
419-
add_next_index_zval(PHP5TO7_ZVAL_MAYBE_P(self->partition_key),
420-
PHP5TO7_ZVAL_MAYBE_P(zcolumn));
421-
}
422-
}
423-
}
444+
populate_partition_key(self, PHP5TO7_ZVAL_MAYBE_P(self->partition_key) TSRMLS_CC);
424445
}
425446

426447
RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->partition_key), 1, 0);
427448
}
428449

450+
PHP_METHOD(DefaultMaterializedView, primaryKey)
451+
{
452+
cassandra_materialized_view *self;
453+
454+
if (zend_parse_parameters_none() == FAILURE)
455+
return;
456+
457+
self = PHP_CASSANDRA_GET_MATERIALIZED_VIEW(getThis());
458+
if (PHP5TO7_ZVAL_IS_UNDEF(self->primary_key)) {
459+
PHP5TO7_ZVAL_MAYBE_MAKE(self->primary_key);
460+
array_init(PHP5TO7_ZVAL_MAYBE_P(self->primary_key));
461+
populate_partition_key(self, PHP5TO7_ZVAL_MAYBE_P(self->primary_key) TSRMLS_CC);
462+
populate_clustering_key(self, PHP5TO7_ZVAL_MAYBE_P(self->primary_key) TSRMLS_CC);
463+
}
464+
465+
RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->primary_key), 1, 0);
466+
}
467+
429468
PHP_METHOD(DefaultMaterializedView, clusteringKey)
430469
{
431470
cassandra_materialized_view *self;
@@ -435,20 +474,9 @@ PHP_METHOD(DefaultMaterializedView, clusteringKey)
435474

436475
self = PHP_CASSANDRA_GET_MATERIALIZED_VIEW(getThis());
437476
if (PHP5TO7_ZVAL_IS_UNDEF(self->clustering_key)) {
438-
size_t i, count = cass_materialized_view_meta_clustering_key_count(self->meta);
439477
PHP5TO7_ZVAL_MAYBE_MAKE(self->clustering_key);
440478
array_init(PHP5TO7_ZVAL_MAYBE_P(self->clustering_key));
441-
for (i = 0; i < count; ++i) {
442-
const CassColumnMeta *column =
443-
cass_materialized_view_meta_clustering_key(self->meta, i);
444-
if (column) {
445-
php5to7_zval zcolumn = php_cassandra_create_column(self->schema, column TSRMLS_CC);
446-
if (!PHP5TO7_ZVAL_IS_UNDEF(zcolumn)) {
447-
add_next_index_zval(PHP5TO7_ZVAL_MAYBE_P(self->clustering_key),
448-
PHP5TO7_ZVAL_MAYBE_P(zcolumn));
449-
}
450-
}
451-
}
479+
populate_clustering_key(self, PHP5TO7_ZVAL_MAYBE_P(self->clustering_key) TSRMLS_CC);
452480
}
453481

454482
RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->clustering_key), 1, 0);
@@ -538,6 +566,7 @@ static zend_function_entry cassandra_default_materialized_view_methods[] = {
538566
PHP_ME(DefaultMaterializedView, minIndexInterval, arginfo_none, ZEND_ACC_PUBLIC)
539567
PHP_ME(DefaultMaterializedView, column, arginfo_name, ZEND_ACC_PUBLIC)
540568
PHP_ME(DefaultMaterializedView, columns, arginfo_none, ZEND_ACC_PUBLIC)
569+
PHP_ME(DefaultMaterializedView, partitionKey, arginfo_none, ZEND_ACC_PUBLIC)
541570
PHP_ME(DefaultMaterializedView, primaryKey, arginfo_none, ZEND_ACC_PUBLIC)
542571
PHP_ME(DefaultMaterializedView, clusteringKey, arginfo_none, ZEND_ACC_PUBLIC)
543572
PHP_ME(DefaultMaterializedView, clusteringOrder, arginfo_none, ZEND_ACC_PUBLIC)
@@ -580,6 +609,7 @@ php_cassandra_default_materialized_view_free(php5to7_zend_object_free *object TS
580609
PHP5TO7_ZVAL_MAYBE_DESTROY(self->name);
581610
PHP5TO7_ZVAL_MAYBE_DESTROY(self->options);
582611
PHP5TO7_ZVAL_MAYBE_DESTROY(self->partition_key);
612+
PHP5TO7_ZVAL_MAYBE_DESTROY(self->primary_key);
583613
PHP5TO7_ZVAL_MAYBE_DESTROY(self->clustering_key);
584614
PHP5TO7_ZVAL_MAYBE_DESTROY(self->clustering_order);
585615
PHP5TO7_ZVAL_MAYBE_DESTROY(self->base_table);
@@ -603,6 +633,7 @@ php_cassandra_default_materialized_view_new(zend_class_entry *ce TSRMLS_DC)
603633
PHP5TO7_ZVAL_UNDEF(self->name);
604634
PHP5TO7_ZVAL_UNDEF(self->options);
605635
PHP5TO7_ZVAL_UNDEF(self->partition_key);
636+
PHP5TO7_ZVAL_UNDEF(self->primary_key);
606637
PHP5TO7_ZVAL_UNDEF(self->clustering_key);
607638
PHP5TO7_ZVAL_UNDEF(self->clustering_order);
608639
PHP5TO7_ZVAL_UNDEF(self->base_table);

ext/src/Cassandra/DefaultTable.c

+56-25
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,38 @@
2626

2727
zend_class_entry *cassandra_default_table_ce = NULL;
2828

29+
static void
30+
populate_partition_key(cassandra_table *table, zval *result TSRMLS_DC)
31+
{
32+
size_t i, count = cass_table_meta_partition_key_count(table->meta);
33+
for (i = 0; i < count; ++i) {
34+
const CassColumnMeta *column =
35+
cass_table_meta_partition_key(table->meta, i);
36+
if (column) {
37+
php5to7_zval zcolumn = php_cassandra_create_column(table->schema, column TSRMLS_CC);
38+
if (!PHP5TO7_ZVAL_IS_UNDEF(zcolumn)) {
39+
add_next_index_zval(result, PHP5TO7_ZVAL_MAYBE_P(zcolumn));
40+
}
41+
}
42+
}
43+
}
44+
45+
static void
46+
populate_clustering_key(cassandra_table *table, zval *result TSRMLS_DC)
47+
{
48+
size_t i, count = cass_table_meta_clustering_key_count(table->meta);
49+
for (i = 0; i < count; ++i) {
50+
const CassColumnMeta *column =
51+
cass_table_meta_clustering_key(table->meta, i);
52+
if (column) {
53+
php5to7_zval zcolumn = php_cassandra_create_column(table->schema, column TSRMLS_CC);
54+
if (!PHP5TO7_ZVAL_IS_UNDEF(zcolumn)) {
55+
add_next_index_zval(result, PHP5TO7_ZVAL_MAYBE_P(zcolumn));
56+
}
57+
}
58+
}
59+
}
60+
2961
php5to7_zval
3062
php_cassandra_create_table(cassandra_ref* schema,
3163
const CassTableMeta *meta TSRMLS_DC)
@@ -398,7 +430,7 @@ PHP_METHOD(DefaultTable, columns)
398430
cass_iterator_free(iterator);
399431
}
400432

401-
PHP_METHOD(DefaultTable, primaryKey)
433+
PHP_METHOD(DefaultTable, partitionKey)
402434
{
403435
cassandra_table *self;
404436

@@ -407,25 +439,32 @@ PHP_METHOD(DefaultTable, primaryKey)
407439

408440
self = PHP_CASSANDRA_GET_TABLE(getThis());
409441
if (PHP5TO7_ZVAL_IS_UNDEF(self->partition_key)) {
410-
size_t i, count = cass_table_meta_partition_key_count(self->meta);
411442
PHP5TO7_ZVAL_MAYBE_MAKE(self->partition_key);
412443
array_init(PHP5TO7_ZVAL_MAYBE_P(self->partition_key));
413-
for (i = 0; i < count; ++i) {
414-
const CassColumnMeta *column =
415-
cass_table_meta_partition_key(self->meta, i);
416-
if (column) {
417-
php5to7_zval zcolumn = php_cassandra_create_column(self->schema, column TSRMLS_CC);
418-
if (!PHP5TO7_ZVAL_IS_UNDEF(zcolumn)) {
419-
add_next_index_zval(PHP5TO7_ZVAL_MAYBE_P(self->partition_key),
420-
PHP5TO7_ZVAL_MAYBE_P(zcolumn));
421-
}
422-
}
423-
}
444+
populate_partition_key(self, PHP5TO7_ZVAL_MAYBE_P(self->partition_key) TSRMLS_CC);
424445
}
425446

426447
RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->partition_key), 1, 0);
427448
}
428449

450+
PHP_METHOD(DefaultTable, primaryKey)
451+
{
452+
cassandra_table *self;
453+
454+
if (zend_parse_parameters_none() == FAILURE)
455+
return;
456+
457+
self = PHP_CASSANDRA_GET_TABLE(getThis());
458+
if (PHP5TO7_ZVAL_IS_UNDEF(self->primary_key)) {
459+
PHP5TO7_ZVAL_MAYBE_MAKE(self->primary_key);
460+
array_init(PHP5TO7_ZVAL_MAYBE_P(self->primary_key));
461+
populate_partition_key(self, PHP5TO7_ZVAL_MAYBE_P(self->primary_key) TSRMLS_CC);
462+
populate_clustering_key(self, PHP5TO7_ZVAL_MAYBE_P(self->primary_key) TSRMLS_CC);
463+
}
464+
465+
RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->primary_key), 1, 0);
466+
}
467+
429468
PHP_METHOD(DefaultTable, clusteringKey)
430469
{
431470
cassandra_table *self;
@@ -435,20 +474,9 @@ PHP_METHOD(DefaultTable, clusteringKey)
435474

436475
self = PHP_CASSANDRA_GET_TABLE(getThis());
437476
if (PHP5TO7_ZVAL_IS_UNDEF(self->clustering_key)) {
438-
size_t i, count = cass_table_meta_clustering_key_count(self->meta);
439477
PHP5TO7_ZVAL_MAYBE_MAKE(self->clustering_key);
440478
array_init(PHP5TO7_ZVAL_MAYBE_P(self->clustering_key));
441-
for (i = 0; i < count; ++i) {
442-
const CassColumnMeta *column =
443-
cass_table_meta_clustering_key(self->meta, i);
444-
if (column) {
445-
php5to7_zval zcolumn = php_cassandra_create_column(self->schema, column TSRMLS_CC);
446-
if (!PHP5TO7_ZVAL_IS_UNDEF(zcolumn)) {
447-
add_next_index_zval(PHP5TO7_ZVAL_MAYBE_P(self->clustering_key),
448-
PHP5TO7_ZVAL_MAYBE_P(zcolumn));
449-
}
450-
}
451-
}
479+
populate_clustering_key(self, PHP5TO7_ZVAL_MAYBE_P(self->clustering_key) TSRMLS_CC);
452480
}
453481

454482
RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->clustering_key), 1, 0);
@@ -642,6 +670,7 @@ static zend_function_entry cassandra_default_table_methods[] = {
642670
PHP_ME(DefaultTable, minIndexInterval, arginfo_none, ZEND_ACC_PUBLIC)
643671
PHP_ME(DefaultTable, column, arginfo_name, ZEND_ACC_PUBLIC)
644672
PHP_ME(DefaultTable, columns, arginfo_none, ZEND_ACC_PUBLIC)
673+
PHP_ME(DefaultTable, partitionKey, arginfo_none, ZEND_ACC_PUBLIC)
645674
PHP_ME(DefaultTable, primaryKey, arginfo_none, ZEND_ACC_PUBLIC)
646675
PHP_ME(DefaultTable, clusteringKey, arginfo_none, ZEND_ACC_PUBLIC)
647676
PHP_ME(DefaultTable, clusteringOrder, arginfo_none, ZEND_ACC_PUBLIC)
@@ -687,6 +716,7 @@ php_cassandra_default_table_free(php5to7_zend_object_free *object TSRMLS_DC)
687716
PHP5TO7_ZVAL_MAYBE_DESTROY(self->name);
688717
PHP5TO7_ZVAL_MAYBE_DESTROY(self->options);
689718
PHP5TO7_ZVAL_MAYBE_DESTROY(self->partition_key);
719+
PHP5TO7_ZVAL_MAYBE_DESTROY(self->primary_key);
690720
PHP5TO7_ZVAL_MAYBE_DESTROY(self->clustering_key);
691721
PHP5TO7_ZVAL_MAYBE_DESTROY(self->clustering_order);
692722

@@ -709,6 +739,7 @@ php_cassandra_default_table_new(zend_class_entry *ce TSRMLS_DC)
709739
PHP5TO7_ZVAL_UNDEF(self->name);
710740
PHP5TO7_ZVAL_UNDEF(self->options);
711741
PHP5TO7_ZVAL_UNDEF(self->partition_key);
742+
PHP5TO7_ZVAL_UNDEF(self->primary_key);
712743
PHP5TO7_ZVAL_UNDEF(self->clustering_key);
713744
PHP5TO7_ZVAL_UNDEF(self->clustering_order);
714745

ext/src/Cassandra/Table.c

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ static zend_function_entry cassandra_table_methods[] = {
8787
PHP_ABSTRACT_ME(Table, minIndexInterval, arginfo_none)
8888
PHP_ABSTRACT_ME(Table, column, arginfo_name)
8989
PHP_ABSTRACT_ME(Table, columns, arginfo_none)
90+
PHP_ABSTRACT_ME(Table, partitionKey, arginfo_none)
9091
PHP_ABSTRACT_ME(Table, primaryKey, arginfo_none)
9192
PHP_ABSTRACT_ME(Table, clusteringKey, arginfo_none)
9293
PHP_ABSTRACT_ME(Table, clusteringOrder, arginfo_none)

0 commit comments

Comments
 (0)