X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fphp_pqres.c;h=e5c7118daff6ce5f40e52224009e1f7673f293f8;hb=9841e1083e609ada4257bc519cfb33fd463f1824;hp=f2ddf98029497a7d9314a1f82bde1d4a009f8cac;hpb=cb69b6218d9d6e789527b3bd62c3cc37686547a3;p=m6w6%2Fext-pq diff --git a/src/php_pqres.c b/src/php_pqres.c index f2ddf98..e5c7118 100644 --- a/src/php_pqres.c +++ b/src/php_pqres.c @@ -145,7 +145,7 @@ zval *php_pqres_typed_zval(php_pqres_t *res, Oid typ, zval *zv) goto noconversion; } { - long lval; + zend_long lval; double dval; switch (is_numeric_str_function(str, &lval, &dval)) { @@ -374,7 +374,7 @@ static ZEND_RESULT_CODE php_pqres_count_elements(zval *object, long *count) } } -ZEND_RESULT_CODE php_pqres_success(PGresult *res TSRMLS_DC) +ZEND_RESULT_CODE php_pqres_success(PGresult *res) { zval zexc; @@ -477,6 +477,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) +{ + 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); + } else { + add_assoc_null(return_value, diag[i].name); + } + } +} + static void php_pqres_object_read_num_rows(zval *object, void *o, zval *return_value) { php_pqres_object_t *obj = o; @@ -529,7 +602,7 @@ static void php_pqres_object_write_auto_conv(zval *object, void *o, zval *value) obj->intern->auto_convert = zval_get_long(value); } -static ZEND_RESULT_CODE php_pqres_iteration(zval *zobj, php_pqres_object_t *obj, php_pqres_fetch_t fetch_type, zval *row TSRMLS_DC) +static ZEND_RESULT_CODE php_pqres_iteration(zval *zobj, php_pqres_object_t *obj, php_pqres_fetch_t fetch_type, zval *row) { ZEND_RESULT_CODE rv; php_pqres_fetch_t orig_fetch; @@ -561,7 +634,7 @@ typedef struct php_pqres_col { static ZEND_RESULT_CODE column_nn(php_pqres_object_t *obj, zval *zcol, php_pqres_col_t *col) { - long index = -1; + zend_long index = -1; char *name = NULL; if (!zcol) { @@ -1111,7 +1184,7 @@ PHP_MINIT_FUNCTION(pqres) php_pqres_object_handlers.get_properties = php_pq_object_properties; php_pqres_object_handlers.count_elements = php_pqres_count_elements; - zend_hash_init(&php_pqres_object_prophandlers, 8, NULL, php_pq_object_prophandler_dtor, 1); + zend_hash_init(&php_pqres_object_prophandlers, 9, NULL, php_pq_object_prophandler_dtor, 1); zend_declare_property_null(php_pqres_class_entry, ZEND_STRL("status"), ZEND_ACC_PUBLIC); ph.read = php_pqres_object_read_status; @@ -1125,6 +1198,10 @@ PHP_MINIT_FUNCTION(pqres) ph.read = php_pqres_object_read_error_message; zend_hash_str_add_mem(&php_pqres_object_prophandlers, "errorMessage", sizeof("errorMessage")-1, (void *) &ph, sizeof(ph)); + zend_declare_property_null(php_pqres_class_entry, ZEND_STRL("diag"), ZEND_ACC_PUBLIC); + ph.read = php_pqres_object_read_diag; + zend_hash_str_add_mem(&php_pqres_object_prophandlers, "diag", sizeof("diag")-1, (void *) &ph, sizeof(ph)); + zend_declare_property_long(php_pqres_class_entry, ZEND_STRL("numRows"), 0, ZEND_ACC_PUBLIC); ph.read = php_pqres_object_read_num_rows; zend_hash_str_add_mem(&php_pqres_object_prophandlers, "numRows", sizeof("numRows")-1, (void *) &ph, sizeof(ph));