diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 27c7363482394..e34ff8686de2a 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -6359,6 +6359,21 @@ PHP_FUNCTION(pg_socket_poll) RETURN_LONG((zend_long)PQsocketPoll(socket, (int)read, (int)write, (int)ts)); } +PHP_FUNCTION(pg_set_single_row_mode) +{ + zval *pgsql_link; + pgsql_link_handle *link; + + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(pgsql_link, pgsql_link_ce) + ZEND_PARSE_PARAMETERS_END(); + + link = Z_PGSQL_LINK_P(pgsql_link); + CHECK_PGSQL_LINK(link); + + RETURN_BOOL(PQsetSingleRowMode(link->conn)); +} + #if defined(HAVE_PG_SET_CHUNKED_ROWS_SIZE) PHP_FUNCTION(pg_set_chunked_rows_size) { diff --git a/ext/pgsql/pgsql.stub.php b/ext/pgsql/pgsql.stub.php index 52ddc3b3748a9..5d30aebcf7103 100644 --- a/ext/pgsql/pgsql.stub.php +++ b/ext/pgsql/pgsql.stub.php @@ -243,6 +243,11 @@ * @cvalue PGRES_TUPLES_OK */ const PGSQL_TUPLES_OK = UNKNOWN; + /** + * @var int + * @cvalue PGRES_SINGLE_TUPLE + */ + const PGSQL_SINGLE_TUPLE = UNKNOWN; #ifdef HAVE_PG_SET_CHUNKED_ROWS_SIZE /** * @var int @@ -952,6 +957,8 @@ function pg_put_copy_end(PgSql\Connection $connection, ?string $error = null): i */ function pg_socket_poll($socket, int $read, int $write, int $timeout = -1): int {} + function pg_set_single_row_mode(Pgsql\Connection $connection): bool {} + #ifdef HAVE_PG_SET_CHUNKED_ROWS_SIZE function pg_set_chunked_rows_size(PgSql\Connection $connection, int $size): bool {} #endif diff --git a/ext/pgsql/pgsql_arginfo.h b/ext/pgsql/pgsql_arginfo.h index 63a1d185d535f..164a82632c33a 100644 --- a/ext/pgsql/pgsql_arginfo.h +++ b/ext/pgsql/pgsql_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit pgsql.stub.php instead. - * Stub hash: f25b5a574c96d4bc2f08b8cacab16f499a164a6b */ + * Stub hash: f6b656d66bf035bb15b2792ab5a71710ad1e3e7b */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_pg_connect, 0, 1, PgSql\\Connection, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, connection_string, IS_STRING, 0) @@ -494,6 +494,10 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_socket_poll, 0, 3, IS_LONG, 0 ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_set_single_row_mode, 0, 1, _IS_BOOL, 0) + ZEND_ARG_OBJ_INFO(0, connection, Pgsql\\Connection, 0) +ZEND_END_ARG_INFO() + #if defined(HAVE_PG_SET_CHUNKED_ROWS_SIZE) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_set_chunked_rows_size, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, connection, PgSql\\Connection, 0) @@ -611,6 +615,7 @@ ZEND_FUNCTION(pg_change_password); ZEND_FUNCTION(pg_put_copy_data); ZEND_FUNCTION(pg_put_copy_end); ZEND_FUNCTION(pg_socket_poll); +ZEND_FUNCTION(pg_set_single_row_mode); #if defined(HAVE_PG_SET_CHUNKED_ROWS_SIZE) ZEND_FUNCTION(pg_set_chunked_rows_size); #endif @@ -745,6 +750,7 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(pg_put_copy_data, arginfo_pg_put_copy_data) ZEND_FE(pg_put_copy_end, arginfo_pg_put_copy_end) ZEND_FE(pg_socket_poll, arginfo_pg_socket_poll) + ZEND_FE(pg_set_single_row_mode, arginfo_pg_set_single_row_mode) #if defined(HAVE_PG_SET_CHUNKED_ROWS_SIZE) ZEND_FE(pg_set_chunked_rows_size, arginfo_pg_set_chunked_rows_size) #endif @@ -801,6 +807,7 @@ static void register_pgsql_symbols(int module_number) REGISTER_LONG_CONSTANT("PGSQL_EMPTY_QUERY", PGRES_EMPTY_QUERY, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PGSQL_COMMAND_OK", PGRES_COMMAND_OK, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PGSQL_TUPLES_OK", PGRES_TUPLES_OK, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("PGSQL_SINGLE_TUPLE", PGRES_SINGLE_TUPLE, CONST_PERSISTENT); #if defined(HAVE_PG_SET_CHUNKED_ROWS_SIZE) REGISTER_LONG_CONSTANT("PGSQL_TUPLES_CHUNK", PGRES_TUPLES_CHUNK, CONST_PERSISTENT); #endif diff --git a/ext/pgsql/tests/pg_set_single_row_mode.phpt b/ext/pgsql/tests/pg_set_single_row_mode.phpt new file mode 100644 index 0000000000000..cafc2ee807be8 --- /dev/null +++ b/ext/pgsql/tests/pg_set_single_row_mode.phpt @@ -0,0 +1,55 @@ +--TEST-- +PostgreSQL pg_set_single_row_mode +--EXTENSIONS-- +pgsql +--SKIPIF-- + +--FILE-- + +--CLEAN-- + +--EXPECT-- +bool(true) +bool(true) +bool(true) +string(1) "0" +bool(true) +string(1) "1" +bool(true) +string(1) "2" +bool(true) +int(0) +bool(false) +bool(false)