Skip to content

Commit a3ee5d6

Browse files
committed
Make phongo_throw_exception variadic to improve error messages
1 parent 9fbc609 commit a3ee5d6

File tree

6 files changed

+30
-12
lines changed

6 files changed

+30
-12
lines changed

php_phongo.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,21 @@ zend_class_entry* phongo_exception_from_mongoc_domain(uint32_t /* mongoc_error_d
140140
return spl_ce_RuntimeException;
141141
}
142142
}
143-
PHONGO_API zval* phongo_throw_exception(php_phongo_error_domain_t domain, const char *message TSRMLS_DC)
143+
PHONGO_API zval* phongo_throw_exception(php_phongo_error_domain_t domain TSRMLS_DC, const char *format, ...)
144144
{
145-
return zend_throw_exception(phongo_exception_from_phongo_domain(domain), message, 0 TSRMLS_CC);
145+
zval *return_value;
146+
va_list args;
147+
char *message;
148+
int message_len;
149+
150+
va_start(args, format);
151+
message_len = vspprintf(&message, 0, format, args);
152+
return_value = zend_throw_exception(phongo_exception_from_phongo_domain(domain), message, 0 TSRMLS_CC);
153+
efree(message);
154+
va_end(args);
155+
156+
157+
return return_value;
146158
}
147159
PHONGO_API zval* phongo_throw_exception_from_bson_error_t(bson_error_t *error TSRMLS_DC)
148160
{
@@ -155,7 +167,7 @@ static void php_phongo_log(mongoc_log_level_t log_level, const char *log_domain,
155167
switch(log_level) {
156168
case MONGOC_LOG_LEVEL_ERROR:
157169
case MONGOC_LOG_LEVEL_CRITICAL:
158-
phongo_throw_exception(PHONGO_ERROR_MONGOC_FAILED, message TSRMLS_CC);
170+
phongo_throw_exception(PHONGO_ERROR_MONGOC_FAILED TSRMLS_CC, "%s", message);
159171
return;
160172

161173
case MONGOC_LOG_LEVEL_WARNING:
@@ -529,7 +541,7 @@ bool phongo_execute_write(mongoc_client_t *client, char *namespace, mongoc_bulk_
529541
int hint;
530542

531543
if (!phongo_split_namespace(namespace, &dbname, &collname)) {
532-
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Invalid namespace provided" TSRMLS_CC);
544+
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid namespace provided");
533545
return false;
534546
}
535547

@@ -547,7 +559,7 @@ bool phongo_execute_write(mongoc_client_t *client, char *namespace, mongoc_bulk_
547559
hint = mongoc_bulk_operation_execute(batch, &reply, &error);
548560

549561
if (!hint) {
550-
zval *e = phongo_throw_exception(PHONGO_ERROR_WRITE_FAILED, error.message TSRMLS_CC);
562+
zval *e = phongo_throw_exception(PHONGO_ERROR_WRITE_FAILED TSRMLS_CC, "%s", error.message);
551563

552564
if (return_value_used) {
553565
if (Z_OBJCE_P(e) == php_phongo_writeexception_ce) {
@@ -579,7 +591,7 @@ int phongo_execute_query(mongoc_client_t *client, char *namespace, php_phongo_qu
579591
mongoc_collection_t *collection;
580592

581593
if (!phongo_split_namespace(namespace, &dbname, &collname)) {
582-
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Invalid namespace provided" TSRMLS_CC);
594+
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid namespace provided");
583595
return false;
584596
}
585597
collection = mongoc_client_get_collection(client, dbname, collname);

php_phongo.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,13 @@ typedef struct
9090

9191
PHONGO_API zend_class_entry* phongo_exception_from_mongoc_domain(uint32_t /* mongoc_error_domain_t */ domain, uint32_t /* mongoc_error_code_t */ code);
9292
PHONGO_API zend_class_entry* phongo_exception_from_phongo_domain(php_phongo_error_domain_t domain);
93-
PHONGO_API zval* phongo_throw_exception(php_phongo_error_domain_t domain, const char *message TSRMLS_DC);
93+
PHONGO_API zval* phongo_throw_exception(php_phongo_error_domain_t domain TSRMLS_DC, const char *format, ...)
94+
#ifdef ZTS
95+
__attribute__ ((format(printf, 3, 4)))
96+
#else
97+
__attribute__ ((format(printf, 2, 3)))
98+
#endif
99+
;
94100

95101
PHONGO_API zend_object_handlers *phongo_get_std_object_handlers(void);
96102

src/BSON/ObjectID.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ PHP_METHOD(ObjectID, __construct)
7474
bson_oid_init_from_string(&oid, id);
7575
bson_oid_to_string(&oid, intern->oid);
7676
} else {
77-
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Invalid BSON ID provided" TSRMLS_CC);
77+
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid BSON ID provided");
7878
}
7979
} else {
8080
bson_oid_t oid;

src/MongoDB/Manager.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ PHP_METHOD(Manager, __construct)
7171

7272
intern->client = mongoc_client_new(uri);
7373
if (!intern->client) {
74-
phongo_throw_exception(PHONGO_ERROR_RUNTIME, "Failed to parse MongoDB URI" TSRMLS_CC);
74+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to parse MongoDB URI");
7575
return;
7676
}
7777
mongoc_client_set_stream_initiator(intern->client, phongo_stream_initiator, ctx);

src/MongoDB/ReadPreference.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,13 @@ PHP_METHOD(ReadPreference, __construct)
8080
mongoc_read_prefs_set_tags(intern->read_preference, tags);
8181
bson_destroy(tags);
8282
if (!mongoc_read_prefs_is_valid(intern->read_preference)) {
83-
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Invalid tagSet" TSRMLS_CC);
83+
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid tagSet");
8484
return;
8585
}
8686
}
8787
break;
8888
default:
89-
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Invalid ReadPreference" TSRMLS_CC);
89+
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid ReadPreference");
9090
return;
9191
}
9292
}

src/MongoDB/Server.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ PHP_METHOD(Server, __construct)
7777
intern->client = mongoc_client_new_from_uri(uri);
7878

7979
if (!intern->client) {
80-
phongo_throw_exception(PHONGO_ERROR_RUNTIME, "Failed to parse MongoDB URI" TSRMLS_CC);
80+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s" "Failed to parse MongoDB URI");
8181
return;
8282
}
8383

0 commit comments

Comments
 (0)