Skip to content

Commit 1eb9430

Browse files
alcaeusCopilot
andauthored
PHPC-2699: Add readonly properties to WriteConcernError class (#1990)
* PHPC-2699: Add readonly properties to WriteConcernError class * Use properties for classes in test utils * Update tests/utils/tools.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent b50c5ee commit 1eb9430

7 files changed

Lines changed: 65 additions & 37 deletions

src/MongoDB/WriteConcernError.c

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -92,25 +92,16 @@ static zend_object* phongo_writeconcernerror_create_object(zend_class_entry* cla
9292
return &intern->std;
9393
}
9494

95-
static HashTable* phongo_writeconcernerror_get_debug_info(zend_object* object, int* is_temp)
95+
static void phongo_writeconcernerror_update_properties(phongo_writeconcernerror_t* intern)
9696
{
97-
PHONGO_INTERN_FROM_Z_OBJ(writeconcernerror, object);
98-
99-
zval retval = ZVAL_STATIC_INIT;
100-
101-
*is_temp = 1;
97+
zend_update_property_string(phongo_writeconcernerror_ce, &intern->std, ZEND_STRL("message"), intern->message ? intern->message : "");
98+
zend_update_property_long(phongo_writeconcernerror_ce, &intern->std, ZEND_STRL("code"), intern->code);
10299

103-
array_init_size(&retval, 3);
104-
ADD_ASSOC_STRING(&retval, "message", intern->message ? intern->message : "");
105-
ADD_ASSOC_LONG_EX(&retval, "code", intern->code);
106100
if (!Z_ISUNDEF(intern->info)) {
107-
Z_ADDREF(intern->info);
108-
ADD_ASSOC_ZVAL_EX(&retval, "info", &intern->info);
101+
zend_update_property(phongo_writeconcernerror_ce, &intern->std, ZEND_STRL("info"), &intern->info);
109102
} else {
110-
ADD_ASSOC_NULL_EX(&retval, "info");
103+
zend_update_property_null(phongo_writeconcernerror_ce, &intern->std, ZEND_STRL("info"));
111104
}
112-
113-
return Z_ARRVAL(retval);
114105
}
115106

116107
void phongo_writeconcernerror_init_ce(INIT_FUNC_ARGS)
@@ -119,9 +110,8 @@ void phongo_writeconcernerror_init_ce(INIT_FUNC_ARGS)
119110
phongo_writeconcernerror_ce->create_object = phongo_writeconcernerror_create_object;
120111

121112
memcpy(&phongo_handler_writeconcernerror, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
122-
phongo_handler_writeconcernerror.get_debug_info = phongo_writeconcernerror_get_debug_info;
123-
phongo_handler_writeconcernerror.free_obj = phongo_writeconcernerror_free_object;
124-
phongo_handler_writeconcernerror.offset = XtOffsetOf(phongo_writeconcernerror_t, std);
113+
phongo_handler_writeconcernerror.free_obj = phongo_writeconcernerror_free_object;
114+
phongo_handler_writeconcernerror.offset = XtOffsetOf(phongo_writeconcernerror_t, std);
125115
}
126116

127117
/* Initializes a new WriteConcernError in return_value using the BSON document.
@@ -166,5 +156,7 @@ bool phongo_writeconcernerror_init(zval* return_value, const bson_t* bson)
166156
}
167157
}
168158

159+
phongo_writeconcernerror_update_properties(intern);
160+
169161
return true;
170162
}

src/MongoDB/WriteConcernError.stub.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ final class WriteConcernError
1212
{
1313
final private function __construct() {}
1414

15+
public readonly string $message;
16+
17+
public readonly int $code;
18+
19+
public readonly object|null $info;
20+
1521
final public function getCode(): int {}
1622

1723
final public function getInfo(): ?object {}

src/MongoDB/WriteConcernError_arginfo.h

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/utils/tools.php

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -713,21 +713,21 @@ function printWriteResult(WriteResult $result, $details = true)
713713
{
714714
printServer($result->getServer());
715715

716-
printf("insertedCount: %d\n", $result->getInsertedCount());
717-
printf("matchedCount: %d\n", $result->getMatchedCount());
718-
printf("modifiedCount: %d\n", $result->getModifiedCount());
719-
printf("upsertedCount: %d\n", $result->getUpsertedCount());
720-
printf("deletedCount: %d\n", $result->getDeletedCount());
716+
printf("insertedCount: %d\n", $result->insertedCount);
717+
printf("matchedCount: %d\n", $result->matchedCount);
718+
printf("modifiedCount: %d\n", $result->modifiedCount);
719+
printf("upsertedCount: %d\n", $result->upsertedCount);
720+
printf("deletedCount: %d\n", $result->deletedCount);
721721

722-
foreach ($result->getUpsertedIds() as $index => $id) {
722+
foreach ($result->upsertedIds as $index => $id) {
723723
printf("upsertedId[%d]: ", $index);
724724
var_dump($id);
725725
}
726726

727-
$writeConcernError = $result->getWriteConcernError();
727+
$writeConcernError = $result->writeConcernError;
728728
printWriteConcernError($writeConcernError ? $writeConcernError : null, $details);
729729

730-
foreach ($result->getWriteErrors() as $writeError) {
730+
foreach ($result->writeErrors as $writeError) {
731731
printWriteError($writeError);
732732
}
733733
}
@@ -737,38 +737,38 @@ function printWriteConcernError(?WriteConcernError $error = null, $details = nul
737737
if ($error) {
738738
/* This stuff is generated by the server, no need for us to test it */
739739
if (!$details) {
740-
printf("writeConcernError: %s (%d)\n", $error->getMessage(), $error->getCode());
740+
printf("writeConcernError: %s (%d)\n", $error->message, $error->code);
741741
return;
742742
}
743743
var_dump($error);
744-
printf("writeConcernError.message: %s\n", $error->getMessage());
745-
printf("writeConcernError.code: %d\n", $error->getCode());
744+
printf("writeConcernError.message: %s\n", $error->message);
745+
printf("writeConcernError.code: %d\n", $error->code);
746746
printf("writeConcernError.info: ");
747-
var_dump($error->getInfo());
747+
var_dump($error->info);
748748
}
749749
}
750750

751751
function printWriteError(WriteError $error)
752752
{
753753
var_dump($error);
754-
printf("writeError[%d].message: %s\n", $error->getIndex(), $error->getMessage());
755-
printf("writeError[%d].code: %d\n", $error->getIndex(), $error->getCode());
754+
printf("writeError[%d].message: %s\n", $error->index, $error->message);
755+
printf("writeError[%d].code: %d\n", $error->index, $error->code);
756756
}
757757

758758
function getInsertCount($retval) {
759-
return $retval->getInsertedCount();
759+
return $retval->insertedCount;
760760
}
761761
function getModifiedCount($retval) {
762-
return $retval->getModifiedCount();
762+
return $retval->modifiedCount;
763763
}
764764
function getDeletedCount($retval) {
765-
return $retval->getDeletedCount();
765+
return $retval->deletedCount;
766766
}
767767
function getUpsertedCount($retval) {
768-
return $retval->getUpsertedCount();
768+
return $retval->upsertedCount;
769769
}
770770
function getWriteErrors($retval) {
771-
return (array)$retval->getWriteErrors();
771+
return $retval->writeErrors;
772772
}
773773

774774
function def($arr) {

tests/writeConcernError/writeconcernerror-getcode-001.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ try {
1818
$manager->executeBulkWrite(NS, $bulk, ['writeConcern' => new MongoDB\Driver\WriteConcern(12)]);
1919
} catch(MongoDB\Driver\Exception\BulkWriteException $e) {
2020
var_dump($e->getWriteResult()->getWriteConcernError()->getCode());
21+
var_dump($e->getWriteResult()->getWriteConcernError()->code);
2122
}
2223

2324
?>
2425
===DONE===
2526
<?php exit(0); ?>
2627
--EXPECT--
2728
int(100)
29+
int(100)
2830
===DONE===

tests/writeConcernError/writeconcernerror-getinfo-001.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ try {
4545
$server->executeBulkWrite(NS, $bulk);
4646
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
4747
var_dump($e->getWriteResult()->getWriteConcernError()->getInfo());
48+
var_dump($e->getWriteResult()->getWriteConcernError()->info);
4849
}
4950

5051
?>
@@ -61,4 +62,15 @@ object(stdClass)#%d (%d) {
6162
string(14) "clientSupplied"
6263
}
6364
}
65+
object(stdClass)#%d (%d) {
66+
["writeConcern"]=>
67+
object(stdClass)#%d (%d) {
68+
["w"]=>
69+
int(2)
70+
["wtimeout"]=>
71+
int(0)
72+
["provenance"]=>
73+
string(14) "clientSupplied"
74+
}
75+
}
6476
===DONE===

tests/writeConcernError/writeconcernerror-getmessage-001.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ try {
1818
$manager->executeBulkWrite(NS, $bulk, ['writeConcern' => new MongoDB\Driver\WriteConcern(12)]);
1919
} catch(MongoDB\Driver\Exception\BulkWriteException $e) {
2020
var_dump($e->getWriteResult()->getWriteConcernError()->getMessage());
21+
var_dump($e->getWriteResult()->getWriteConcernError()->message);
2122
}
2223

2324
?>
2425
===DONE===
2526
<?php exit(0); ?>
2627
--EXPECT--
2728
string(29) "Not enough data-bearing nodes"
29+
string(29) "Not enough data-bearing nodes"
2830
===DONE===

0 commit comments

Comments
 (0)