X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fphp_pqres.c;h=2b983685658730bc5e024a029648138e241a181c;hb=6332e6d158454bbcb884e61ae493f85f2c289ea9;hp=c050898bcc46965f0829854bd7974449cfe4ceab;hpb=74657a40eda33c53f79fb132b64fe1a045232fd9;p=m6w6%2Fext-pq diff --git a/src/php_pqres.c b/src/php_pqres.c index c050898..2b98368 100644 --- a/src/php_pqres.c +++ b/src/php_pqres.c @@ -77,7 +77,7 @@ static void php_pqres_iterator_dtor(zend_object_iterator *i TSRMLS_DC) efree(iter); } -static STATUS php_pqres_iterator_valid(zend_object_iterator *i TSRMLS_DC) +static ZEND_RESULT_CODE php_pqres_iterator_valid(zend_object_iterator *i TSRMLS_DC) { php_pqres_iterator_t *iter = (php_pqres_iterator_t *) i; php_pqres_object_t *obj = i->data; @@ -387,7 +387,7 @@ static int php_pqres_count_elements(zval *object, long *count TSRMLS_DC) } } -STATUS php_pqres_success(PGresult *res TSRMLS_DC) +ZEND_RESULT_CODE php_pqres_success(PGresult *res TSRMLS_DC) { zval *zexc; @@ -511,6 +511,79 @@ static void php_pqres_object_read_error_message(zval *object, void *o, zval *ret } } +static void php_pqres_object_read_diag(zval *object, void *o, zval *return_value TSRMLS_DC) +{ + php_pqres_object_t *obj = o; + int i; + struct { + char code; + const char *const name; + } diag[] = { +#ifdef PG_DIAG_SEVERITY + {PG_DIAG_SEVERITY, "severity"}, +#endif +#ifdef PG_DIAG_SQLSTATE + {PG_DIAG_SQLSTATE, "sqlstate"}, +#endif +#ifdef PG_DIAG_MESSAGE_PRIMARY + {PG_DIAG_MESSAGE_PRIMARY, "message_primary"}, +#endif +#ifdef PG_DIAG_MESSAGE_DETAIL + {PG_DIAG_MESSAGE_DETAIL, "message_detail"}, +#endif +#ifdef PG_DIAG_MESSAGE_HINT + {PG_DIAG_MESSAGE_HINT, "message_hint"}, +#endif +#ifdef PG_DIAG_STATEMENT_POSITION + {PG_DIAG_STATEMENT_POSITION,"statement_position"}, +#endif +#ifdef PG_DIAG_INTERNAL_POSITION + {PG_DIAG_INTERNAL_POSITION, "internal_position"}, +#endif +#ifdef PG_DIAG_INTERNAL_QUERY + {PG_DIAG_INTERNAL_QUERY, "internal_query"}, +#endif +#ifdef PG_DIAG_CONTEXT + {PG_DIAG_CONTEXT, "context"}, +#endif +#ifdef PG_DIAG_SCHEMA_NAME + {PG_DIAG_SCHEMA_NAME, "schema_name"}, +#endif +#ifdef PG_DIAG_TABLE_NAME + {PG_DIAG_TABLE_NAME, "table_name"}, +#endif +#ifdef PG_DIAG_COLUMN_NAME + {PG_DIAG_COLUMN_NAME, "column_name"}, +#endif +#ifdef PG_DIAG_DATATYPE_NAME + {PG_DIAG_DATATYPE_NAME, "datatype_name"}, +#endif +#ifdef PG_DIAG_CONSTRAINT_NAME + {PG_DIAG_CONSTRAINT_NAME, "constraint_name"}, +#endif +#ifdef PG_DIAG_SOURCE_FILE + {PG_DIAG_SOURCE_FILE, "source_file"}, +#endif +#ifdef PG_DIAG_SOURCE_LINE + {PG_DIAG_SOURCE_LINE, "source_line"}, +#endif +#ifdef PG_DIAG_SOURCE_FUNCTION + {PG_DIAG_SOURCE_FUNCTION, "source_function"}, +#endif + }; + + array_init_size(return_value, 32); + for (i = 0; i < sizeof(diag)/sizeof(diag[0]); ++i) { + char *value = PQresultErrorField(obj->intern->res, diag[i].code); + + if (value) { + add_assoc_string(return_value, diag[i].name, value, 1); + } else { + add_assoc_null(return_value, diag[i].name); + } + } +} + static void php_pqres_object_read_num_rows(zval *object, void *o, zval *return_value TSRMLS_DC) { php_pqres_object_t *obj = o; @@ -598,9 +671,9 @@ static void php_pqres_object_write_auto_conv(zval *object, void *o, zval *value } } -static STATUS php_pqres_iteration(zval *this_ptr, php_pqres_object_t *obj, php_pqres_fetch_t fetch_type, zval ***row TSRMLS_DC) +static ZEND_RESULT_CODE php_pqres_iteration(zval *this_ptr, php_pqres_object_t *obj, php_pqres_fetch_t fetch_type, zval ***row TSRMLS_DC) { - STATUS rv; + ZEND_RESULT_CODE rv; php_pqres_fetch_t orig_fetch; if (!obj) { @@ -628,7 +701,7 @@ typedef struct php_pqres_col { int num; } php_pqres_col_t; -static STATUS column_nn(php_pqres_object_t *obj, zval *zcol, php_pqres_col_t *col TSRMLS_DC) +static ZEND_RESULT_CODE column_nn(php_pqres_object_t *obj, zval *zcol, php_pqres_col_t *col TSRMLS_DC) { long index = -1; char *name = NULL; @@ -683,7 +756,7 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(pqres, bind) { zval *zcol, *zref; zend_error_handling zeh; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/z", &zcol, &zref); @@ -718,7 +791,7 @@ static int apply_bound(void *p TSRMLS_DC, int argc, va_list argv, zend_hash_key { zval **zvalue, **zbound = p; zval **zrow = va_arg(argv, zval **); - STATUS *rv = va_arg(argv, STATUS *); + ZEND_RESULT_CODE *rv = va_arg(argv, ZEND_RESULT_CODE *); if (SUCCESS != zend_hash_index_find(Z_ARRVAL_PP(zrow), key->h, (void *) &zvalue)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to find column ad index %lu", key->h); @@ -740,7 +813,7 @@ ZEND_BEGIN_ARG_INFO_EX(ai_pqres_fetch_bound, 0, 0, 0) ZEND_END_ARG_INFO(); static PHP_METHOD(pqres, fetchBound) { zend_error_handling zeh; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters_none(); @@ -776,7 +849,7 @@ static PHP_METHOD(pqres, fetchRow) { zend_error_handling zeh; php_pqres_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); long fetch_type = -1; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &fetch_type); @@ -828,7 +901,7 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(pqres, fetchCol) { zend_error_handling zeh; zval *zcol = NULL, *zref; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|z/!", &zref, &zcol); @@ -872,7 +945,7 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(pqres, fetchAllCols) { zend_error_handling zeh; zval *zcol = NULL; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z!", &zcol); @@ -903,7 +976,7 @@ static PHP_METHOD(pqres, fetchAllCols) { struct apply_to_col_arg { php_pqres_object_t *obj; php_pqres_col_t *cols; - STATUS status; + ZEND_RESULT_CODE status; }; static int apply_to_col(void *p, void *a TSRMLS_DC) @@ -948,7 +1021,7 @@ static PHP_METHOD(pqres, map) { zend_error_handling zeh; zval *zkeys = 0, *zvals = 0; long fetch_type = -1; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z/!z/!l", &zkeys, &zvals, &fetch_type); @@ -1068,7 +1141,7 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(pqres, fetchAll) { zend_error_handling zeh; long fetch_type = -1; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &fetch_type); @@ -1097,7 +1170,7 @@ ZEND_BEGIN_ARG_INFO_EX(ai_pqres_count, 0, 0, 0) ZEND_END_ARG_INFO(); static PHP_METHOD(pqres, count) { zend_error_handling zeh; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters_none(); @@ -1118,7 +1191,7 @@ ZEND_BEGIN_ARG_INFO_EX(ai_pqres_desc, 0, 0, 0) ZEND_END_ARG_INFO(); static PHP_METHOD(pqres, desc) { zend_error_handling zeh; - STATUS rv; + ZEND_RESULT_CODE rv; zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); rv = zend_parse_parameters_none(); @@ -1195,6 +1268,10 @@ PHP_MINIT_FUNCTION(pqres) ph.read = php_pqres_object_read_error_message; zend_hash_add(&php_pqres_object_prophandlers, "errorMessage", sizeof("errorMessage"), (void *) &ph, sizeof(ph), NULL); + zend_declare_property_null(php_pqres_class_entry, ZEND_STRL("diag"), ZEND_ACC_PUBLIC TSRMLS_CC); + ph.read = php_pqres_object_read_diag; + zend_hash_add(&php_pqres_object_prophandlers, "diag", sizeof("diag"), (void *) &ph, sizeof(ph), NULL); + zend_declare_property_long(php_pqres_class_entry, ZEND_STRL("numRows"), 0, ZEND_ACC_PUBLIC TSRMLS_CC); ph.read = php_pqres_object_read_num_rows; zend_hash_add(&php_pqres_object_prophandlers, "numRows", sizeof("numRows"), (void *) &ph, sizeof(ph), NULL);