Skip to content

Commit 2599607

Browse files
committed
PHPC-635: WriteResult debug handler should return objects
1 parent c2065c5 commit 2599607

9 files changed

+192
-172
lines changed

php_phongo.c

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -354,35 +354,35 @@ void phongo_writeconcern_init(zval *return_value, const mongoc_write_concern_t *
354354
zend_bool phongo_writeconcernerror_init(zval *return_value, bson_t *bson TSRMLS_DC) /* {{{ */
355355
{
356356
bson_iter_t iter;
357-
php_phongo_writeconcernerror_t *writeconcernerror;
357+
php_phongo_writeconcernerror_t *intern;
358358

359-
writeconcernerror = Z_WRITECONCERNERROR_OBJ_P(return_value);
359+
object_init_ex(return_value, php_phongo_writeconcernerror_ce);
360+
361+
intern = Z_WRITECONCERNERROR_OBJ_P(return_value);
360362

361363
if (bson_iter_init_find(&iter, bson, "code") && BSON_ITER_HOLDS_INT32(&iter)) {
362-
writeconcernerror->code = bson_iter_int32(&iter);
364+
intern->code = bson_iter_int32(&iter);
363365
}
366+
364367
if (bson_iter_init_find(&iter, bson, "errmsg") && BSON_ITER_HOLDS_UTF8(&iter)) {
365368
uint32_t errmsg_len;
366369
const char *err_msg = bson_iter_utf8(&iter, &errmsg_len);
367370

368-
writeconcernerror->message = estrndup(err_msg, errmsg_len);
371+
intern->message = estrndup(err_msg, errmsg_len);
369372
}
373+
370374
if (bson_iter_init_find(&iter, bson, "errInfo") && BSON_ITER_HOLDS_DOCUMENT(&iter)) {
371-
uint32_t len;
372-
const uint8_t *data;
375+
uint32_t len;
376+
const uint8_t *data = NULL;
373377

374378
bson_iter_document(&iter, &len, &data);
375379

376-
if (!data) {
377-
return false;
378-
}
379-
380-
if (!phongo_bson_to_zval(data, len, &writeconcernerror->info)) {
381-
zval_ptr_dtor(&writeconcernerror->info);
380+
if (!phongo_bson_to_zval(data, len, &intern->info)) {
381+
zval_ptr_dtor(&intern->info);
382382
#if PHP_VERSION_ID >= 70000
383-
ZVAL_UNDEF(&writeconcernerror->info);
383+
ZVAL_UNDEF(&intern->info);
384384
#else
385-
writeconcernerror->info = NULL;
385+
intern->info = NULL;
386386
#endif
387387

388388
return false;
@@ -395,38 +395,43 @@ zend_bool phongo_writeconcernerror_init(zval *return_value, bson_t *bson TSRMLS_
395395
zend_bool phongo_writeerror_init(zval *return_value, bson_t *bson TSRMLS_DC) /* {{{ */
396396
{
397397
bson_iter_t iter;
398-
php_phongo_writeerror_t *writeerror;
398+
php_phongo_writeerror_t *intern;
399399

400-
writeerror = Z_WRITEERROR_OBJ_P(return_value);
400+
object_init_ex(return_value, php_phongo_writeerror_ce);
401+
402+
intern = Z_WRITEERROR_OBJ_P(return_value);
401403

402404
if (bson_iter_init_find(&iter, bson, "code") && BSON_ITER_HOLDS_INT32(&iter)) {
403-
writeerror->code = bson_iter_int32(&iter);
405+
intern->code = bson_iter_int32(&iter);
404406
}
407+
405408
if (bson_iter_init_find(&iter, bson, "errmsg") && BSON_ITER_HOLDS_UTF8(&iter)) {
406409
uint32_t errmsg_len;
407410
const char *err_msg = bson_iter_utf8(&iter, &errmsg_len);
408411

409-
writeerror->message = estrndup(err_msg, errmsg_len);
412+
intern->message = estrndup(err_msg, errmsg_len);
410413
}
411-
if (bson_iter_init_find(&iter, bson, "errInfo")) {
412-
bson_t info;
413414

414-
bson_init(&info);
415-
bson_append_iter(&info, NULL, 0, &iter);
415+
if (bson_iter_init_find(&iter, bson, "errInfo") && BSON_ITER_HOLDS_DOCUMENT(&iter)) {
416+
uint32_t len;
417+
const uint8_t *data = NULL;
418+
419+
bson_iter_document(&iter, &len, &data);
416420

417-
if (!phongo_bson_to_zval(bson_get_data(&info), info.len, &writeerror->info)) {
418-
zval_ptr_dtor(&writeerror->info);
421+
if (!phongo_bson_to_zval(data, len, &intern->info)) {
422+
zval_ptr_dtor(&intern->info);
419423
#if PHP_VERSION_ID >= 70000
420-
ZVAL_UNDEF(&writeerror->info);
424+
ZVAL_UNDEF(&intern->info);
421425
#else
422-
writeerror->info = NULL;
426+
intern->info = NULL;
423427
#endif
424428

425429
return false;
426430
}
427431
}
432+
428433
if (bson_iter_init_find(&iter, bson, "index") && BSON_ITER_HOLDS_INT32(&iter)) {
429-
writeerror->index = bson_iter_int32(&iter);
434+
intern->index = bson_iter_int32(&iter);
430435
}
431436

432437
return true;

0 commit comments

Comments
 (0)