From: Michael Wallner Date: Mon, 5 Feb 2024 18:56:09 +0000 (+0100) Subject: prepare v2.2.3 X-Git-Tag: v2.2.3 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-pq;a=commitdiff_plain;h=HEAD;hp=64cc2702825f663e8da413dab235d18145f073b7 prepare v2.2.3 --- diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62c3b35..fd250c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,14 +8,14 @@ on: jobs: old-matrix-0: - name: old-matrix-0 + name: "old-matrix-0 (7.0)" env: PHP: "7.0" enable_debug: "yes" enable_maintainer_zts: "yes" enable_json: "yes" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -44,14 +44,14 @@ jobs: make -f scripts/ci/Makefile test old-matrix-1: - name: old-matrix-1 + name: "old-matrix-1 (7.1)" env: PHP: "7.1" enable_debug: "yes" enable_maintainer_zts: "yes" enable_json: "yes" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -80,14 +80,14 @@ jobs: make -f scripts/ci/Makefile test old-matrix-2: - name: old-matrix-2 + name: "old-matrix-2 (7.2)" env: PHP: "7.2" enable_debug: "yes" enable_maintainer_zts: "yes" enable_json: "yes" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -116,14 +116,14 @@ jobs: make -f scripts/ci/Makefile test old-matrix-3: - name: old-matrix-3 + name: "old-matrix-3 (7.3)" env: PHP: "7.3" enable_debug: "yes" enable_maintainer_zts: "yes" enable_json: "yes" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -152,14 +152,14 @@ jobs: make -f scripts/ci/Makefile test old-matrix-4: - name: old-matrix-4 + name: "old-matrix-4 (7.4)" env: PHP: "7.4" enable_debug: "yes" enable_maintainer_zts: "yes" enable_json: "yes" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -187,15 +187,87 @@ jobs: run: | make -f scripts/ci/Makefile test - master-0: - name: master-0 + old-matrix-5: + name: "old-matrix-5 (8.0)" + env: + PHP: "8.0" + enable_debug: "yes" + enable_maintainer_zts: "yes" + enable_json: "yes" + PQ_DSN: "postgres:///runner" + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Install + run: | + sudo apt-get install -y \ + php-cli \ + php-pear \ + libpq-dev \ + re2c + - name: Prepare + run: | + make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php + make -f scripts/ci/Makefile pecl PECL=m6w6/ext-raphf.git:raphf:master + - name: Build + run: | + make -f scripts/ci/Makefile ext PECL=pq + - name: Prepare Test + run: | + sudo systemctl start postgresql + sudo -u postgres createuser --login runner + sudo -u postgres createdb -O runner runner + - name: Test + run: | + make -f scripts/ci/Makefile test + + old-matrix-6: + name: "old-matrix-6 (8.1)" + env: + PHP: "8.1" + enable_debug: "yes" + enable_maintainer_zts: "yes" + enable_json: "yes" + PQ_DSN: "postgres:///runner" + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Install + run: | + sudo apt-get install -y \ + php-cli \ + php-pear \ + libpq-dev \ + re2c + - name: Prepare + run: | + make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php + make -f scripts/ci/Makefile pecl PECL=m6w6/ext-raphf.git:raphf:master + - name: Build + run: | + make -f scripts/ci/Makefile ext PECL=pq + - name: Prepare Test + run: | + sudo systemctl start postgresql + sudo -u postgres createuser --login runner + sudo -u postgres createdb -O runner runner + - name: Test + run: | + make -f scripts/ci/Makefile test + + next-0: + name: "next-0 (master)" continue-on-error: true env: PHP: "master" enable_debug: "yes" enable_zts: "yes" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -224,13 +296,13 @@ jobs: make -f scripts/ci/Makefile test cur-dbg-zts-0: - name: cur-dbg-zts-0 + name: "cur-dbg-zts-0 (8.2)" env: - PHP: "8.0" + PHP: "8.2" enable_debug: "yes" enable_zts: "yes" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -259,13 +331,13 @@ jobs: make -f scripts/ci/Makefile test cur-dbg-zts-1: - name: cur-dbg-zts-1 + name: "cur-dbg-zts-1 (8.2)" env: - PHP: "8.0" + PHP: "8.2" enable_debug: "no" enable_zts: "yes" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -294,13 +366,13 @@ jobs: make -f scripts/ci/Makefile test cur-dbg-zts-2: - name: cur-dbg-zts-2 + name: "cur-dbg-zts-2 (8.2)" env: - PHP: "8.0" + PHP: "8.2" enable_debug: "yes" enable_zts: "no" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -329,13 +401,13 @@ jobs: make -f scripts/ci/Makefile test cur-dbg-zts-3: - name: cur-dbg-zts-3 + name: "cur-dbg-zts-3 (8.2)" env: - PHP: "8.0" + PHP: "8.2" enable_debug: "no" enable_zts: "no" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: @@ -364,13 +436,13 @@ jobs: make -f scripts/ci/Makefile test cur-cov-0: - name: cur-cov-0 + name: "cur-cov-0 (8.2)" env: CFLAGS: "-O0 -g --coverage" CXXFLAGS: "-O0 -g --coverage" - PHP: "8.0" + PHP: "8.2" PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: diff --git a/README.md b/README.md index a7d54c3..c823ddd 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ This is a modern binding to the mature [libpq](http://www.postgresql.org/docs/cu ### Highlights: -* Nearly 100% support for [asynchronous usage](https://mdref.m6w6.name/pq/Connection/:+Asynchronous+Usage). -* Extended [type support by pg_type](https://mdref.m6w6.name/pq/Types/:+Overview). +* Nearly 100% support for [asynchronous usage](https://mdref.m6w6.name/pq/Connection/:%20Asynchronous%20Usage). +* Extended [type support by pg_type](https://mdref.m6w6.name/pq/Types/:%20Overview). * Fetching simple [multi-dimensional array maps](https://mdref.m6w6.name/pq/Result/map). * Working [Gateway implementation](https://github.com/m6w6/pq-gateway). diff --git a/config9.m4 b/config9.m4 index 9782d18..d845e28 100644 --- a/config9.m4 +++ b/config9.m4 @@ -7,7 +7,7 @@ if test "$PHP_PQ" != "no"; then if test "$PHP_PQ" != "yes"; then SEARCH_PATH="$PHP_PQ $SEARCH_PATH" fi - + AC_MSG_CHECKING(for pg_config) for i in $SEARCH_PATH; do if test -x "$i/bin/pg_config"; then @@ -15,20 +15,20 @@ if test "$PHP_PQ" != "no"; then break fi done - + if test -z "$PG_CONFIG"; then AC_PATH_PROG(PG_CONFIG, pg_config, no) fi - + AC_MSG_RESULT($PG_CONFIG) - + if test "$PG_CONFIG" = "no"; then AC_MSG_ERROR(could not find a usable pg_config in $SEARCH_PATH) else if test "$PHP_PQ" != "yes" -a "$PHP_PQ/bin/pg_config" != "$PG_CONFIG"; then AC_MSG_WARN(Found pg_config is not in $PHP_PQ) fi - + AC_MSG_CHECKING(for PostgreSQL version) PQ_VERSION=$($PG_CONFIG --version | $SED 's/PostgreSQL //') @@ -39,7 +39,7 @@ if test "$PHP_PQ" != "no"; then AC_MSG_RESULT($PQ_VERSION) AC_DEFINE_UNQUOTED(PHP_PQ_LIBVERSION, "$PQ_VERSION", [ ]) fi - + PQ_INCDIR=$($PG_CONFIG --includedir) PQ_LIBDIR=$($PG_CONFIG --libdir) fi @@ -76,19 +76,22 @@ if test "$PHP_PQ" != "no"; then dnl PQ_CHECK_FUNC(sym, fail-hard) dnl AC_DEFUN([PQ_CHECK_FUNC], [ + PQ_SYM=$1 FAIL_HARD=$2 - + save_LIBS="$LIBS" + LIBS= PHP_CHECK_LIBRARY(pq, $1, [ AC_DEFINE([HAVE_]translit($1,a-z,A-Z), 1, Have $1) ], [ if test -n "$FAIL_HARD"; then - if "$FAIL_HARD"; then - AC_MSG_ERROR(could not find $PQ_SYM in -lpq) + if $FAIL_HARD; then + AC_MSG_ERROR(could not find $PQ_SYM in -lpq -L$PQ_LIBDIR) fi fi ], [ -L$PQ_LIBDIR ]) + LIBS="$save_LIBS" ]) PQ_CHECK_FUNC(PQregisterEventProc, true) @@ -96,6 +99,8 @@ if test "$PHP_PQ" != "no"; then PHP_SUBST(PQ_SHARED_LIBADD) PQ_CHECK_FUNC(PQlibVersion) + PQ_CHECK_FUNC(PQprotocolVersion) + PQ_CHECK_FUNC(PQserverVersion) PQ_CHECK_FUNC(PQconninfo) PQ_CHECK_FUNC(PQsetSingleRowMode) @@ -175,26 +180,4 @@ if test "$PHP_PQ" != "no"; then AC_MSG_ERROR([Please install pecl/raphf and activate extension=raphf.$SHLIB_DL_SUFFIX_NAME in your php.ini]) ]) PHP_ADD_EXTENSION_DEP(pq, raphf, true) - PQ_HAVE_PHP_EXT([json], [ - AC_MSG_CHECKING([for php_json.h]) - PQ_EXT_JSON_INCDIR= - for i in `echo $INCLUDES | $SED -e's/-I//g'` $abs_srcdir ../json ../jsonc ../jsond; do - if test -d $i; then - if test -f $i/php_json.h; then - PQ_EXT_JSON_INCDIR=$i - break - elif test -f $i/ext/json/php_json.h; then - PQ_EXT_JSON_INCDIR=$i/ext/json - break - fi - fi - done - if test "x$PQ_EXT_JSON_INCDIR" = "x"; then - AC_MSG_ERROR([not found]) - else - AC_MSG_RESULT([$PQ_EXT_JSON_INCDIR]) - AC_DEFINE([PHP_PQ_HAVE_PHP_JSON_H], [1], [Have ext/json support]) - PHP_ADD_INCLUDE([$PQ_EXT_JSON_INCDIR]) - fi - ]) fi diff --git a/package.xml b/package.xml index 5209743..e6b668e 100644 --- a/package.xml +++ b/package.xml @@ -41,9 +41,9 @@ remi@php.net yes - 2021-08-30 + 2024-02-05 - 2.2.0 + 2.2.3 2.1.0 @@ -52,11 +52,7 @@ BSD-2-Clause @@ -122,6 +118,7 @@ + @@ -142,6 +139,7 @@ + diff --git a/php_pq.h b/php_pq.h index d887a9c..022c553 100644 --- a/php_pq.h +++ b/php_pq.h @@ -14,7 +14,7 @@ #ifndef PHP_PQ_H #define PHP_PQ_H -#define PHP_PQ_VERSION "2.2.0" +#define PHP_PQ_VERSION "2.2.3" #ifdef PHP_WIN32 # define PHP_PQ_API __declspec(dllexport) diff --git a/scripts/gen_github_workflow_ci.php b/scripts/gen_github_workflow_ci.php index 4b95237..78d770a 100755 --- a/scripts/gen_github_workflow_ci.php +++ b/scripts/gen_github_workflow_ci.php @@ -11,24 +11,24 @@ jobs: github([ "old-matrix" => [ - "PHP" => ["7.0", "7.1", "7.2", "7.3", "7.4"], + "PHP" => ["7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1"], "enable_debug" => "yes", "enable_maintainer_zts" => "yes", "enable_json" => "yes", -], -"master" => [ +], +"next" => [ "PHP" => ["master"], "enable_debug" => "yes", "enable_zts" => "yes", -], +], "cur-dbg-zts" => [ "PHP" => $cur, "enable_debug", "enable_zts", -], +], "cur-cov" => [ "CFLAGS" => "-O0 -g --coverage", "CXXFLAGS" => "-O0 -g --coverage", @@ -36,7 +36,7 @@ $job = $gen->github([ ]]); foreach ($job as $id => $env) { printf(" %s:\n", $id); - printf(" name: %s\n", $id); + printf(" name: \"%s (%s)\"\n", $id, $env["PHP"]); if ($env["PHP"] == "master") { printf(" continue-on-error: true\n"); } @@ -46,7 +46,7 @@ foreach ($job as $id => $env) { } ?> PQ_DSN: "postgres:///runner" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 with: diff --git a/src/php_pq_misc.c b/src/php_pq_misc.c index 9acef34..4d251d2 100644 --- a/src/php_pq_misc.c +++ b/src/php_pq_misc.c @@ -29,6 +29,14 @@ #undef PHP_PQ_TYPE #include "php_pq_type.h" +/* convert version to string */ +extern void php_pq_version_to_string(int version, char *buffer, int len) { + if (version < 100000) { + slprintf(buffer, len, "%d.%d.%d", version/10000, version/100%100, version%100); + } else { /* since version 10 */ + slprintf(buffer, len, "%d.%d", version/10000, version%100); + } +} /* clear result object associated with a result handle */ void php_pqres_clear(PGresult *r) { diff --git a/src/php_pq_misc.h b/src/php_pq_misc.h index 34ab6c1..dab24ec 100644 --- a/src/php_pq_misc.h +++ b/src/php_pq_misc.h @@ -33,6 +33,8 @@ extern PGresult *php_pq_exec_params(PGconn *conn, const char *command, int nPara extern PGresult *php_pq_prepare(PGconn *conn, const char *stmtName, const char *query, int nParams, const Oid *paramTypes); extern PGresult *php_pq_exec_prepared(PGconn *conn, const char *stmtName, int nParams, const char *const * paramValues, const int *paramLengths, const int *paramFormats, int resultFormat); +/* convert version to string */ +extern void php_pq_version_to_string(int version, char *buffer, int len); /* trim LF from EOL */ extern char *php_pq_rtrim(char *e); @@ -99,6 +101,9 @@ extern int php_pq_compare_index(const void *lptr, const void *rptr); ZEND_BEGIN_ARG_INFO_EX(name, 0, return_reference, required_num_args) #endif +#ifndef ZEND_ACC_READONLY +#define ZEND_ACC_READONLY 0 +#endif extern PHP_MINIT_FUNCTION(pq_misc); diff --git a/src/php_pq_module.c b/src/php_pq_module.c index cd99217..7385b0b 100644 --- a/src/php_pq_module.c +++ b/src/php_pq_module.c @@ -105,7 +105,7 @@ static PHP_MINFO_FUNCTION(pq) php_info_print_table_header(3, "Used Library", "Compiled", "Linked"); #ifdef HAVE_PQLIBVERSION libpq_v = PQlibVersion(); - slprintf(libpq_version, sizeof(libpq_version), "%d.%d.%d", libpq_v/10000%100, libpq_v/100%100, libpq_v%100); + php_pq_version_to_string(libpq_v, libpq_version, sizeof(libpq_version)); #endif php_info_print_table_row(3, "libpq", PHP_PQ_LIBVERSION, libpq_version); php_info_print_table_end(); diff --git a/src/php_pq_params.c b/src/php_pq_params.c index 259fbb9..9e92226 100644 --- a/src/php_pq_params.c +++ b/src/php_pq_params.c @@ -16,9 +16,7 @@ #include #include -#if PHP_PQ_HAVE_PHP_JSON_H -#include /* we've added the include directory to INCLUDES */ -#endif +#include #include #include @@ -75,12 +73,12 @@ unsigned php_pq_params_add_type_oid(php_pq_params_t *p, Oid type) static zend_string *object_param_to_string(php_pq_params_t *p, zval *zobj, Oid type) { -#if PHP_PQ_HAVE_PHP_JSON_H && defined(PHP_PQ_OID_JSON) +#ifdef PHP_PQ_OID_JSON smart_str str = {0}; #endif switch (type) { -#if PHP_PQ_HAVE_PHP_JSON_H && defined(PHP_PQ_OID_JSON) +#ifdef PHP_PQ_OID_JSON # ifdef PHP_PQ_OID_JSONB case PHP_PQ_OID_JSONB: # endif @@ -207,7 +205,7 @@ static zend_string *array_param_to_string(php_pq_params_t *p, zval *zarr, Oid ty struct apply_to_param_from_array_arg arg = {NULL}; switch (type) { -#if PHP_PQ_HAVE_PHP_JSON_H && defined(PHP_PQ_OID_JSON) +#ifdef PHP_PQ_OID_JSON # ifdef PHP_PQ_OID_JSONB case PHP_PQ_OID_JSONB: # endif diff --git a/src/php_pqconn.c b/src/php_pqconn.c index 6278323..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; @@ -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); diff --git a/src/php_pqlob.c b/src/php_pqlob.c index 0cb44a8..a419390 100644 --- a/src/php_pqlob.c +++ b/src/php_pqlob.c @@ -169,7 +169,7 @@ static int php_pqlob_stream_flush(php_stream *stream) return SUCCESS; } -static ZEND_RESULT_CODE php_pqlob_stream_seek(php_stream *stream, off_t offset, int whence, off_t *newoffset) +static ZEND_RESULT_CODE php_pqlob_stream_seek(php_stream *stream, zend_off_t offset, int whence, zend_off_t *newoffset) { ZEND_RESULT_CODE rv = FAILURE; php_pqlob_object_t *obj = stream->abstract; diff --git a/src/php_pqres.c b/src/php_pqres.c index 5406ebf..802fcf4 100644 --- a/src/php_pqres.c +++ b/src/php_pqres.c @@ -17,9 +17,7 @@ #include #include -#if PHP_PQ_HAVE_PHP_JSON_H -#include /* we've added the include directory to INCLUDES */ -#endif +#include #include @@ -215,7 +213,7 @@ zval *php_pqres_typed_zval(php_pqres_t *res, Oid typ, zval *zv) php_pqdt_from_string(zv, NULL, str->val, str->len, "Y-m-d H:i:s.uO", NULL); break; -#if PHP_PQ_HAVE_PHP_JSON_H && defined(PHP_PQ_OID_JSON) +#ifdef PHP_PQ_OID_JSON # ifdef PHP_PQ_OID_JSONB case PHP_PQ_OID_JSONB: # endif @@ -400,24 +398,24 @@ static zend_object_iterator_funcs php_pqres_iterator_funcs = { #endif }; -static inline ZEND_RESULT_CODE php_pqres_count_elements_ex(zend_object *object, long *count) +static inline ZEND_RESULT_CODE php_pqres_count_elements_ex(zend_object *object, zend_long *count) { php_pqres_object_t *obj = PHP_PQ_OBJ(NULL, object); if (!obj->intern) { return FAILURE; } else { - *count = (long) PQntuples(obj->intern->res); + *count = (zend_long) PQntuples(obj->intern->res); return SUCCESS; } } #if PHP_VERSION_ID >= 80000 -static ZEND_RESULT_CODE php_pqres_count_elements(zend_object *object, long *count) +static ZEND_RESULT_CODE php_pqres_count_elements(zend_object *object, zend_long *count) { return php_pqres_count_elements_ex(object, count); } #else -static ZEND_RESULT_CODE php_pqres_count_elements(zval *object, long *count) +static ZEND_RESULT_CODE php_pqres_count_elements(zval *object, zend_long *count) { return php_pqres_count_elements_ex(Z_OBJ_P(object), count); } @@ -738,7 +736,7 @@ static ZEND_RESULT_CODE column_nn(php_pqres_object_t *obj, zval *zcol, php_pqres } if (!col->name) { - php_error_docref(NULL, E_WARNING, "Failed to find column at index %ld", index); + php_error_docref(NULL, E_WARNING, "Failed to find column at index " ZEND_LONG_FMT, index); return FAILURE; } if (col->num == -1) { @@ -793,7 +791,7 @@ static int apply_bound(zval *zbound, int argc, va_list argv, zend_hash_key *key) ZEND_RESULT_CODE *rv = va_arg(argv, ZEND_RESULT_CODE *); if (!(zvalue = zend_hash_index_find(Z_ARRVAL_P(zrow), key->h))) { - php_error_docref(NULL, E_WARNING, "Failed to find column ad index %lu", key->h); + php_error_docref(NULL, E_WARNING, "Failed to find column ad index " ZEND_ULONG_FMT, key->h); *rv = FAILURE; return ZEND_HASH_APPLY_STOP; } else { @@ -1174,7 +1172,7 @@ static PHP_METHOD(pqres, count) { zend_restore_error_handling(&zeh); if (SUCCESS == rv) { - long count; + zend_long count; if (SUCCESS != php_pqres_count_elements_ex(Z_OBJ_P(getThis()), &count)) { throw_exce(EX_UNINITIALIZED, "pq\\Result not initialized"); @@ -1350,9 +1348,7 @@ PHP_MINIT_FUNCTION(pqres) zend_declare_class_constant_long(php_pqres_class_entry, ZEND_STRL("CONV_SCALAR"), PHP_PQRES_CONV_SCALAR); zend_declare_class_constant_long(php_pqres_class_entry, ZEND_STRL("CONV_ARRAY"), PHP_PQRES_CONV_ARRAY); zend_declare_class_constant_long(php_pqres_class_entry, ZEND_STRL("CONV_DATETIME"), PHP_PQRES_CONV_DATETIME); -#if PHP_PQ_HAVE_PHP_JSON_H zend_declare_class_constant_long(php_pqres_class_entry, ZEND_STRL("CONV_JSON"), PHP_PQRES_CONV_JSON); -#endif zend_declare_class_constant_long(php_pqres_class_entry, ZEND_STRL("CONV_BYTEA"), PHP_PQRES_CONV_BYTEA); zend_declare_class_constant_long(php_pqres_class_entry, ZEND_STRL("CONV_ALL"), PHP_PQRES_CONV_ALL); diff --git a/tests/_skipif.inc b/tests/_skipif.inc index 9bf235c..0391d77 100644 --- a/tests/_skipif.inc +++ b/tests/_skipif.inc @@ -6,7 +6,10 @@ _ext("pq"); include "_setup.inc"; defined("PQ_DSN") or die("skip PQ_DSN undefined"); try { - new pq\Connection(PQ_DSN); + $c = new pq\Connection(PQ_DSN); + if (defined("SERVER_MIN") && version_compare(SERVER_MIN, $c->serverVersion) > 0) { + die("skip server {$c->serverVersion} is too old, needed " . SERVER_MIN); + } } catch (pq\Exception $e) { die("skip could not connect to PQ_DSN ".$e->getMessage()); } diff --git a/tests/basic003.phpt b/tests/basic003.phpt new file mode 100644 index 0000000..4645e8c --- /dev/null +++ b/tests/basic003.phpt @@ -0,0 +1,22 @@ +--TEST-- +basic functionality +--SKIPIF-- + +--FILE-- +libraryVersion); +var_dump($c->protocolVersion); +var_dump($c->serverVersion); +?> +DONE +--EXPECTF-- +Test +string(%d) "%s" +int(%d) +string(%d) "%s" +DONE diff --git a/tests/crash_cur_reverse_dep.phpt b/tests/crash_cur_reverse_dep.phpt index a9f4d19..c97d73a 100644 --- a/tests/crash_cur_reverse_dep.phpt +++ b/tests/crash_cur_reverse_dep.phpt @@ -3,6 +3,8 @@ crash txn reverse dependency from connection --SKIPIF-- =")) + echo "skip PHP_VERSION>=8.2 (dynamic properties deprecated)\n"; ?> --FILE-- =")) + echo "skip PHP_VERSION>=8.2 (dynamic properties deprecated)\n"; ?> --FILE-- -=")) + echo "skip PHP_VERSION>=8.2 (dynamic properties deprecated)\n"; ?> --FILE-- +--INI-- +date.timezone=UTC +--FILE-- +defaultFetchType = \pq\Result::FETCH_ASSOC; + +$q = <<exec($q); + +var_dump($r->fetchAll()); +?> +===DONE=== +--EXPECT-- +Test +array(2) { + [0]=> + array(1) { + ["jsonb"]=> + string(4) "text" + } + [1]=> + array(1) { + ["jsonb"]=> + int(0) + } +} +===DONE===