@@ -45,6 +45,10 @@ static bool php_phongo_bulkwritecommandresult_get_writeconcernerrors(php_phongo_
4545
4646 array_init (return_value );
4747
48+ if (!intern -> write_concern_errors ) {
49+ return true;
50+ }
51+
4852 for (bson_iter_init (& iter , intern -> write_concern_errors ); bson_iter_next (& iter );) {
4953 bson_t bson ;
5054 uint32_t len ;
@@ -78,6 +82,10 @@ static bool php_phongo_bulkwritecommandresult_get_writeerrors(php_phongo_bulkwri
7882
7983 array_init (return_value );
8084
85+ if (!intern -> write_errors ) {
86+ return true;
87+ }
88+
8189 for (bson_iter_init (& iter , intern -> write_errors ); bson_iter_next (& iter );) {
8290 bson_t bson ;
8391 uint32_t len ;
@@ -246,7 +254,6 @@ static PHP_METHOD(MongoDB_Driver_BulkWriteCommandResult, getWriteConcernErrors)
246254
247255 PHONGO_PARSE_PARAMETERS_NONE ();
248256
249- // TODO: null handling
250257 php_phongo_bulkwritecommandresult_get_writeconcernerrors (intern , return_value );
251258}
252259
@@ -259,7 +266,6 @@ static PHP_METHOD(MongoDB_Driver_BulkWriteCommandResult, getWriteErrors)
259266
260267 PHONGO_PARSE_PARAMETERS_NONE ();
261268
262- // TODO: null handling
263269 php_phongo_bulkwritecommandresult_get_writeerrors (intern , return_value );
264270}
265271
@@ -271,8 +277,9 @@ static PHP_METHOD(MongoDB_Driver_BulkWriteCommandResult, getErrorReply)
271277
272278 PHONGO_PARSE_PARAMETERS_NONE ();
273279
274- // TODO: null handling
275- phongo_document_new (return_value , intern -> error_reply , true);
280+ if (intern -> error_reply ) {
281+ phongo_document_new (return_value , intern -> error_reply , true);
282+ }
276283}
277284
278285/* Returns whether the write operation was acknowledged (based on the write
@@ -364,22 +371,18 @@ static HashTable* php_phongo_bulkwritecommandresult_get_debug_info(zend_object*
364371 ADD_ASSOC_NULL_EX (& retval , "deleteResults" );
365372 }
366373
367- if ( intern -> write_errors ) {
374+ {
368375 zval writeerrors ;
369376
370377 php_phongo_bulkwritecommandresult_get_writeerrors (intern , & writeerrors );
371378 ADD_ASSOC_ZVAL_EX (& retval , "writeErrors" , & writeerrors );
372- } else {
373- ADD_ASSOC_NULL_EX (& retval , "writeErrors" );
374379 }
375380
376- if ( intern -> write_concern_errors ) {
381+ {
377382 zval writeconcernerrors ;
378383
379384 php_phongo_bulkwritecommandresult_get_writeconcernerrors (intern , & writeconcernerrors );
380385 ADD_ASSOC_ZVAL_EX (& retval , "writeConcernErrors" , & writeconcernerrors );
381- } else {
382- ADD_ASSOC_NULL_EX (& retval , "writeConcernErrors" );
383386 }
384387
385388 if (intern -> error_reply ) {
@@ -416,6 +419,11 @@ void php_phongo_bulkwritecommandresult_init_ce(INIT_FUNC_ARGS)
416419 php_phongo_handler_bulkwritecommandresult .offset = XtOffsetOf (php_phongo_bulkwritecommandresult_t , std );
417420}
418421
422+ static inline bson_t * _bson_copy_or_null (const bson_t * bson )
423+ {
424+ return bson_empty0 (bson ) ? NULL : bson_copy (bson );
425+ }
426+
419427php_phongo_bulkwritecommandresult_t * phongo_bulkwritecommandresult_init (zval * return_value , mongoc_bulkwritereturn_t * bw_ret , zval * manager )
420428{
421429 php_phongo_bulkwritecommandresult_t * bwcr ;
@@ -433,20 +441,18 @@ php_phongo_bulkwritecommandresult_t* phongo_bulkwritecommandresult_init(zval* re
433441 bwcr -> modified_count = mongoc_bulkwriteresult_modifiedcount (bw_ret -> res );
434442 bwcr -> deleted_count = mongoc_bulkwriteresult_deletedcount (bw_ret -> res );
435443
436- #define BSON_COPY_OR_NULL (bson ) ((bson) ? bson_copy(bson) : NULL)
437- bwcr -> insert_results = BSON_COPY_OR_NULL (mongoc_bulkwriteresult_insertresults (bw_ret -> res ));
438- bwcr -> update_results = BSON_COPY_OR_NULL (mongoc_bulkwriteresult_updateresults (bw_ret -> res ));
439- bwcr -> delete_results = BSON_COPY_OR_NULL (mongoc_bulkwriteresult_deleteresults (bw_ret -> res ));
440- #undef BSON_COPY_OR_NULL
444+ bwcr -> insert_results = _bson_copy_or_null (mongoc_bulkwriteresult_insertresults (bw_ret -> res ));
445+ bwcr -> update_results = _bson_copy_or_null (mongoc_bulkwriteresult_updateresults (bw_ret -> res ));
446+ bwcr -> delete_results = _bson_copy_or_null (mongoc_bulkwriteresult_deleteresults (bw_ret -> res ));
441447
442448 bwcr -> server_id = mongoc_bulkwriteresult_serverid (bw_ret -> res );
443449 }
444450
445451 // Copy mongoc_bulkwriteexception_t fields
446452 if (bw_ret -> exc ) {
447- bwcr -> error_reply = bson_copy (mongoc_bulkwriteexception_errorreply (bw_ret -> exc ));
448- bwcr -> write_errors = bson_copy (mongoc_bulkwriteexception_writeerrors (bw_ret -> exc ));
449- bwcr -> write_concern_errors = bson_copy (mongoc_bulkwriteexception_writeconcernerrors (bw_ret -> exc ));
453+ bwcr -> error_reply = _bson_copy_or_null (mongoc_bulkwriteexception_errorreply (bw_ret -> exc ));
454+ bwcr -> write_errors = _bson_copy_or_null (mongoc_bulkwriteexception_writeerrors (bw_ret -> exc ));
455+ bwcr -> write_concern_errors = _bson_copy_or_null (mongoc_bulkwriteexception_writeconcernerrors (bw_ret -> exc ));
450456 }
451457
452458 ZVAL_ZVAL (& bwcr -> manager , manager , 1 , 0 );
0 commit comments