X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-pq;a=blobdiff_plain;f=src%2Fphp_pqconn.c;h=19ea6f05ebcaebd0abb059d475c7bad802f29128;hp=da07ff339a7e1b89dfe9d9f97be983a897e2e592;hb=HEAD;hpb=80a38048f8355392d81e23f4b3a27a8e77d58214 diff --git a/src/php_pqconn.c b/src/php_pqconn.c index da07ff3..19ea6f0 100644 --- a/src/php_pqconn.c +++ b/src/php_pqconn.c @@ -491,6 +491,34 @@ static void php_pqconn_object_write_def_auto_conv(void *o, zval *value) obj->intern->default_auto_convert = zval_get_long(value) & PHP_PQRES_CONV_ALL; } +#ifdef HAVE_PQLIBVERSION +static void php_pqconn_object_read_lib_version(void *o, zval *return_value) +{ + char ver[16]; + + php_pq_version_to_string(PQlibVersion(), ver, sizeof(ver)); + RETVAL_STRING(ver); +} +#endif +#ifdef HAVE_PQPROTOCOLVERSION +static void php_pqconn_object_read_protocol_version(void *o, zval *return_value) +{ + php_pqconn_object_t *obj = o; + + RETVAL_LONG(PQprotocolVersion(obj->intern->conn)); +} +#endif +#ifdef HAVE_PQSERVERVERSION +static void php_pqconn_object_read_server_version(void *o, zval *return_value) +{ + php_pqconn_object_t *obj = o; + char ver[16]; + + php_pq_version_to_string(PQserverVersion(obj->intern->conn), ver, sizeof(ver)); + RETVAL_STRING(ver); +} +#endif + static ZEND_RESULT_CODE php_pqconn_update_socket(zval *zobj, php_pqconn_object_t *obj) { zval zsocket, zmember; @@ -515,9 +543,9 @@ static ZEND_RESULT_CODE php_pqconn_update_socket(zval *zobj, php_pqconn_object_t retval = FAILURE; } #if PHP_VERSION_ID >= 80000 - zend_get_std_object_handlers()->write_property(Z_OBJ_P(zobj), Z_STR(zmember), &zsocket, NULL); + zend_std_write_property(Z_OBJ_P(zobj), Z_STR(zmember), &zsocket, NULL); #else - zend_get_std_object_handlers()->write_property(zobj, &zmember, &zsocket, NULL); + zend_std_write_property(zobj, &zmember, &zsocket, NULL); #endif zval_ptr_dtor(&zsocket); zval_ptr_dtor(&zmember); @@ -590,7 +618,7 @@ static inline PGresult *unlisten(PGconn *conn, const char *channel_str, size_t c smart_str_appends(&cmd, quoted_channel); smart_str_0(&cmd); - res = PQexec(conn, smart_str_v(&cmd)); + res = php_pq_exec(conn, smart_str_v(&cmd)); smart_str_free(&cmd); PQfreemem(quoted_channel); @@ -990,7 +1018,7 @@ static PHP_METHOD(pqconn, notify) { PGresult *res; char *params[2] = {channel_str, message_str}; - res = PQexecParams(obj->intern->conn, "select pg_notify($1, $2)", 2, NULL, (const char *const*) params, NULL, NULL, 0); + res = php_pq_exec_params(obj->intern->conn, "select pg_notify($1, $2)", 2, NULL, (const char *const*) params, NULL, NULL, 0); if (!res) { throw_exce(EX_RUNTIME, "Failed to notify listeners (%s)", PHP_PQerrorMessage(obj->intern->conn)); @@ -1224,7 +1252,7 @@ static PHP_METHOD(pqconn, execParams) { php_pq_params_t *params; params = php_pq_params_init(&obj->intern->converters, ztypes ? Z_ARRVAL_P(ztypes) : NULL, Z_ARRVAL_P(zparams)); - res = PQexecParams(obj->intern->conn, query_str, params->param.count, params->type.oids, (const char *const*) params->param.strings, NULL, NULL, 0); + res = php_pq_exec_params(obj->intern->conn, query_str, params->param.count, params->type.oids, (const char *const*) params->param.strings, NULL, NULL, 0); php_pq_params_free(¶ms); if (!res) { @@ -2131,6 +2159,24 @@ PHP_MINIT_FUNCTION(pqconn) zend_hash_str_add_mem(&php_pqconn_object_prophandlers, "defaultAutoConvert", sizeof("defaultAutoConvert")-1, (void *) &ph, sizeof(ph)); ph.write = NULL; +#ifdef HAVE_PQLIBVERSION + zend_declare_property_null(php_pqconn_class_entry, ZEND_STRL("libraryVersion"), ZEND_ACC_PUBLIC|ZEND_ACC_READONLY); + ph.read = php_pqconn_object_read_lib_version; + zend_hash_str_add_mem(&php_pqconn_object_prophandlers, ZEND_STRL("libraryVersion"), (void *) &ph, sizeof(ph)); +#endif + +#ifdef HAVE_PQPROTOCOLVERSION + zend_declare_property_null(php_pqconn_class_entry, ZEND_STRL("protocolVersion"), ZEND_ACC_PUBLIC|ZEND_ACC_READONLY); + ph.read = php_pqconn_object_read_protocol_version; + zend_hash_str_add_mem(&php_pqconn_object_prophandlers, ZEND_STRL("protocolVersion"), (void *) &ph, sizeof(ph)); +#endif + +#ifdef HAVE_PQSERVERVERSION + zend_declare_property_null(php_pqconn_class_entry, ZEND_STRL("serverVersion"), ZEND_ACC_PUBLIC|ZEND_ACC_READONLY); + ph.read = php_pqconn_object_read_server_version; + zend_hash_str_add_mem(&php_pqconn_object_prophandlers, ZEND_STRL("serverVersion"), (void *) &ph, sizeof(ph)); +#endif + zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("OK"), CONNECTION_OK); zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("BAD"), CONNECTION_BAD); zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("STARTED"), CONNECTION_STARTED); @@ -2139,6 +2185,15 @@ PHP_MINIT_FUNCTION(pqconn) zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("AUTH_OK"), CONNECTION_AUTH_OK); zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("SSL_STARTUP"), CONNECTION_SSL_STARTUP); zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("SETENV"), CONNECTION_SETENV); +#ifdef HAVE_CONNECTION_CHECK_WRITABLE + zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("CHECK_WRITABLE"), CONNECTION_CHECK_WRITABLE); +#endif +#ifdef HAVE_CONNECTION_CONSUME + zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("CONSUME"), CONNECTION_CONSUME); +#endif +#ifdef HAVE_CONNECTION_GSS_STARTUP + zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("GSS_STARTUP"), CONNECTION_GSS_STARTUP); +#endif zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("TRANS_IDLE"), PQTRANS_IDLE); zend_declare_class_constant_long(php_pqconn_class_entry, ZEND_STRL("TRANS_ACTIVE"), PQTRANS_ACTIVE);