Skip to content

Commit 4b5a94a

Browse files
committed
add metadat property
1 parent ada97c6 commit 4b5a94a

File tree

5 files changed

+106
-8
lines changed

5 files changed

+106
-8
lines changed

php_simple_kafka_client_int.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ typedef struct _kafka_topic_partition_intern {
6969
char *topic;
7070
int32_t partition;
7171
int64_t offset;
72+
zval metadata;
7273
zend_object std;
7374
} kafka_topic_partition_intern;
7475

@@ -113,6 +114,9 @@ typedef void (*kafka_metadata_collection_ctor_t)(zval *renurn_value, zval *zmeta
113114
#define Z_PARAM_STRING_OR_NULL(dest, dest_len) \
114115
Z_PARAM_STRING_EX(dest, dest_len, 1, 0)
115116

117+
#define Z_PARAM_ZVAL_OR_NULL(dest) \
118+
Z_PARAM_ZVAL_EX(dest, 1, 0)
119+
116120
#endif
117121

118122
#ifdef PHP_WIN32
@@ -208,7 +212,7 @@ void kafka_metadata_topic_init(INIT_FUNC_ARGS);
208212
void kafka_metadata_topic_ctor(zval *return_value, zval *zmetadata, const void *metadata_topic);
209213
void kafka_topic_init(INIT_FUNC_ARGS);
210214
void kafka_metadata_topic_partition_init(INIT_FUNC_ARGS);
211-
void kafka_topic_partition_init(zval *z, char *topic, int32_t partition, int64_t offset);
215+
void kafka_topic_partition_init(zval *z, char *topic, int32_t partition, int64_t offset, zval *metadata);
212216
void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_partition_list_t *list);
213217

214218
kafka_topic_partition_intern * get_topic_partition_object(zval *z);

tests/topic_partition.phpt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@ $topar = new SimpleKafkaClient\TopicPartition("test", RD_KAFKA_PARTITION_UA, 42)
1111

1212
var_dump($topar);
1313

14+
$topar = new SimpleKafkaClient\TopicPartition("test", RD_KAFKA_PARTITION_UA, 42, ['test']);
15+
16+
var_dump($topar);
17+
1418
var_dump(array(
1519
"topic" => $topar->getTopicName(),
1620
"partition" => $topar->getPartition(),
1721
"offset" => $topar->getOffset(),
22+
"metadata" => $topar->getMetadata()
1823
));
1924

2025
$topar
@@ -31,6 +36,18 @@ object(SimpleKafkaClient\TopicPartition)#1 (3) {
3136
int(-1)
3237
["offset"]=>
3338
int(0)
39+
["metadata"]=>
40+
NULL
41+
}
42+
object(SimpleKafkaClient\TopicPartition)#2 (3) {
43+
["topic"]=>
44+
string(4) "test"
45+
["partition"]=>
46+
int(-1)
47+
["offset"]=>
48+
int(42)
49+
["metadata"]=>
50+
NULL
3451
}
3552
object(SimpleKafkaClient\TopicPartition)#2 (3) {
3653
["topic"]=>
@@ -39,6 +56,8 @@ object(SimpleKafkaClient\TopicPartition)#2 (3) {
3956
int(-1)
4057
["offset"]=>
4158
int(42)
59+
["metadata"]=>
60+
NULL
4261
}
4362
array(3) {
4463
["topic"]=>
@@ -47,6 +66,11 @@ array(3) {
4766
int(-1)
4867
["offset"]=>
4968
int(42)
69+
["metadata"]=>
70+
array(1) {
71+
[0]=>
72+
string(4) "test"
73+
}
5074
}
5175
object(SimpleKafkaClient\TopicPartition)#2 (3) {
5276
["topic"]=>

topic_partition.c

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,13 @@ static HashTable *get_debug_info(Z_KAFKA_OBJ *object, int *is_temp) /* {{{ */
118118

119119
add_assoc_long(&ary, "partition", intern->partition);
120120
add_assoc_long(&ary, "offset", intern->offset);
121+
add_assoc_zval(&ary, "metadata", &intern->metadata);
121122

122123
return Z_ARRVAL(ary);
123124
}
124125
/* }}} */
125126

126-
void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int64_t offset) /* {{{ */
127+
void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int64_t offset, zval *metadata) /* {{{ */
127128
{
128129
object_intern *intern;
129130

@@ -139,6 +140,12 @@ void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int
139140

140141
intern->partition = partition;
141142
intern->offset = offset;
143+
144+
if (!metadata) {
145+
ZVAL_NULL(&intern->metadata);
146+
} else {
147+
intern->metadata = *metadata;
148+
}
142149
} /* }}} */
143150

144151
void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_partition_list_t *list) /* {{{ */
@@ -153,7 +160,7 @@ void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_part
153160
topar = &list->elems[i];
154161
ZVAL_NULL(&ztopar);
155162
object_init_ex(&ztopar, ce_kafka_topic_partition);
156-
kafka_topic_partition_init(&ztopar, topar->topic, topar->partition, topar->offset);
163+
kafka_topic_partition_init(&ztopar, topar->topic, topar->partition, topar->offset, topar->metadata);
157164
add_next_index_zval(return_value, &ztopar);
158165
}
159166
} /* }}} */
@@ -199,23 +206,25 @@ rd_kafka_topic_partition_list_t * array_arg_to_kafka_topic_partition_list(int ar
199206
} /* }}} */
200207

201208

202-
/* {{{ proto void SimpleKafkaClient\TopicPartition::__construct(string $topic, int $partition[, int $offset])
209+
/* {{{ proto void SimpleKafkaClient\TopicPartition::__construct(string $topic, int $partition[, int $offset, mixed $metadata])
203210
Constructor */
204211
ZEND_METHOD(SimpleKafkaClient_TopicPartition, __construct)
205212
{
206213
char *topic;
207214
size_t topic_len;
208215
zend_long partition;
209216
zend_long offset = 0;
217+
zval *metadata = NULL;
210218

211-
ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 2, 3)
219+
ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 2, 4)
212220
Z_PARAM_STRING(topic, topic_len)
213221
Z_PARAM_LONG(partition)
214222
Z_PARAM_OPTIONAL
215223
Z_PARAM_LONG(offset)
224+
Z_PARAM_ZVAL_OR_NULL(metadata)
216225
ZEND_PARSE_PARAMETERS_END();
217226

218-
kafka_topic_partition_init(getThis(), topic, partition, offset);
227+
kafka_topic_partition_init(getThis(), topic, partition, offset, metadata);
219228
}
220229
/* }}} */
221230

@@ -348,6 +357,50 @@ ZEND_METHOD(SimpleKafkaClient_TopicPartition, setOffset)
348357
}
349358
/* }}} */
350359

360+
/* {{{ proto int SimpleKafkaClient\TopicPartition::getMetadata()
361+
Returns offset */
362+
ZEND_METHOD(SimpleKafkaClient_TopicPartition, getMetadata)
363+
{
364+
object_intern *intern;
365+
366+
ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 0, 0)
367+
ZEND_PARSE_PARAMETERS_END();
368+
369+
intern = get_object(getThis());
370+
if (!intern) {
371+
return;
372+
}
373+
374+
RETURN_ZVAL(&intern->metadata, 1, 0);
375+
}
376+
/* }}} */
377+
378+
/* {{{ proto TopicPartition SimpleKafkaClient\TopicPartition::setMetadata($metadata)
379+
Sets metadata */
380+
ZEND_METHOD(SimpleKafkaClient_TopicPartition, setMetadata)
381+
{
382+
zval *metadata = NULL;
383+
object_intern *intern;
384+
385+
ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 1, 1)
386+
Z_PARAM_ZVAL(metadata)
387+
ZEND_PARSE_PARAMETERS_END();
388+
389+
intern = get_object(getThis());
390+
if (!intern) {
391+
return;
392+
}
393+
394+
if(Z_TYPE(intern->metadata) == IS_UNDEF) {
395+
RETURN_NULL();
396+
}
397+
398+
intern->metadata = *metadata;
399+
400+
RETURN_ZVAL(getThis(), 1, 0);
401+
}
402+
/* }}} */
403+
351404
void kafka_metadata_topic_partition_init(INIT_FUNC_ARGS) /* {{{ */
352405
{
353406
zend_class_entry tmpce;

topic_partition.stub.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
class TopicPartition
88
{
9-
public function __construct(string $topicName, int $partition, int $offset = 0) {}
9+
public function __construct(string $topicName, int $partition, int $offset = 0, mixed $metadata = null) {}
1010

1111
public function getTopicName(): ?string {}
1212

@@ -19,4 +19,9 @@ public function setPartition(int $partition): TopicPartition {}
1919
public function getOffset(): int {}
2020

2121
public function setOffset(int $offset): TopicPartition {}
22+
23+
/** @param mixed $metadata */
24+
public function setMetadata($metadata): TopicPartition {}
25+
26+
public function getMetadata(): mixed {}
2227
}

topic_partition_arginfo.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 95f09c698079d00927dd2d02910325d6aff76157 */
2+
* Stub hash: d4e875b35492e4e54e47a1beb90522d6a5fe1118 */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition___construct, 0, 0, 2)
55
ZEND_ARG_TYPE_INFO(0, topicName, IS_STRING, 0)
66
ZEND_ARG_TYPE_INFO(0, partition, IS_LONG, 0)
77
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0")
8+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, metadata, IS_MIXED, 0, "null")
89
ZEND_END_ARG_INFO()
910

1011
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition_getTopicName, 0, 0, IS_STRING, 1)
@@ -27,6 +28,13 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPart
2728
ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
2829
ZEND_END_ARG_INFO()
2930

31+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition_setMetadata, 0, 1, SimpleKafkaClient\\TopicPartition, 0)
32+
ZEND_ARG_INFO(0, metadata)
33+
ZEND_END_ARG_INFO()
34+
35+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition_getMetadata, 0, 0, IS_MIXED, 0)
36+
ZEND_END_ARG_INFO()
37+
3038

3139
ZEND_METHOD(SimpleKafkaClient_TopicPartition, __construct);
3240
ZEND_METHOD(SimpleKafkaClient_TopicPartition, getTopicName);
@@ -35,6 +43,8 @@ ZEND_METHOD(SimpleKafkaClient_TopicPartition, getPartition);
3543
ZEND_METHOD(SimpleKafkaClient_TopicPartition, setPartition);
3644
ZEND_METHOD(SimpleKafkaClient_TopicPartition, getOffset);
3745
ZEND_METHOD(SimpleKafkaClient_TopicPartition, setOffset);
46+
ZEND_METHOD(SimpleKafkaClient_TopicPartition, setMetadata);
47+
ZEND_METHOD(SimpleKafkaClient_TopicPartition, getMetadata);
3848

3949

4050
static const zend_function_entry class_SimpleKafkaClient_TopicPartition_methods[] = {
@@ -45,5 +55,7 @@ static const zend_function_entry class_SimpleKafkaClient_TopicPartition_methods[
4555
ZEND_ME(SimpleKafkaClient_TopicPartition, setPartition, arginfo_class_SimpleKafkaClient_TopicPartition_setPartition, ZEND_ACC_PUBLIC)
4656
ZEND_ME(SimpleKafkaClient_TopicPartition, getOffset, arginfo_class_SimpleKafkaClient_TopicPartition_getOffset, ZEND_ACC_PUBLIC)
4757
ZEND_ME(SimpleKafkaClient_TopicPartition, setOffset, arginfo_class_SimpleKafkaClient_TopicPartition_setOffset, ZEND_ACC_PUBLIC)
58+
ZEND_ME(SimpleKafkaClient_TopicPartition, setMetadata, arginfo_class_SimpleKafkaClient_TopicPartition_setMetadata, ZEND_ACC_PUBLIC)
59+
ZEND_ME(SimpleKafkaClient_TopicPartition, getMetadata, arginfo_class_SimpleKafkaClient_TopicPartition_getMetadata, ZEND_ACC_PUBLIC)
4860
ZEND_FE_END
4961
};

0 commit comments

Comments
 (0)