Skip to content

Commit 7ec8ae1

Browse files
committed
ext/pgsql: pg_trace allow to refine its trace mode via 2 new constants.
- PGSQL_TRACE_SUPPRESS_TIMESTAMPS. - PGSQL_TRACE_REGRESS_MODE to have a more verbose and observable output to check possible regressions. Close GH-11041
1 parent 84c185c commit 7ec8ae1

File tree

6 files changed

+74
-7
lines changed

6 files changed

+74
-7
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ PHP NEWS
124124
(David Carlier)
125125
. Added GH-9344, pipeline mode support. (David Carlier)
126126
. pg_cancel use thread safe PQcancel api instead. (David Carlier)
127+
. pg_trace new PGSQL_TRACE_SUPPRESS_TIMESTAMPS/PGSQL_TRACE_REGRESS_MODE
128+
contants support. (David Carlier)
127129

128130
- Phar:
129131
. Fix memory leak in phar_rename_archive(). (stkeke)

UPGRADING

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,15 @@ PHP 8.3 UPGRADE NOTES
214214
- PCNTL:
215215
. SIGINFO
216216

217+
- PGSQL:
218+
. PGSQL_TRACE_SUPPRESS_TIMESTAMPS.
219+
. PGSQL_TRACE_REGRESS_MODE.
220+
217221
- Posix:
218-
. POSIX_SC_ARG_MAX
219-
. POSIX_SC_PAGESIZE
220-
. POSIX_SC_NPROCESSORS_CONF
221-
. POSIX_SC_NPROCESSORS_ONLN
222+
. POSIX_SC_ARG_MAX.
223+
. POSIX_SC_PAGESIZE.
224+
. POSIX_SC_NPROCESSORS_CONF.
225+
. POSIX_SC_NPROCESSORS_ONLN.
222226

223227
- Sockets:
224228
. SO_ATTACH_REUSEPORT_CBPF (Linux only).

ext/pgsql/pgsql.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2115,13 +2115,14 @@ PHP_FUNCTION(pg_trace)
21152115
{
21162116
char *z_filename, *mode = "w";
21172117
size_t z_filename_len, mode_len;
2118+
zend_long trace_mode = 0;
21182119
zval *pgsql_link = NULL;
21192120
PGconn *pgsql;
21202121
FILE *fp = NULL;
21212122
php_stream *stream;
21222123
pgsql_link_handle *link;
21232124

2124-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|sO!", &z_filename, &z_filename_len, &mode, &mode_len, &pgsql_link, pgsql_link_ce) == FAILURE) {
2125+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|sO!l", &z_filename, &z_filename_len, &mode, &mode_len, &pgsql_link, pgsql_link_ce, &trace_mode) == FAILURE) {
21252126
RETURN_THROWS();
21262127
}
21272128

@@ -2147,6 +2148,19 @@ PHP_FUNCTION(pg_trace)
21472148
}
21482149
php_stream_auto_cleanup(stream);
21492150
PQtrace(pgsql, fp);
2151+
if (trace_mode > 0) {
2152+
#ifdef PQTRACE_REGRESS_MODE
2153+
if (!(trace_mode & (PQTRACE_SUPPRESS_TIMESTAMPS|PQTRACE_REGRESS_MODE))) {
2154+
zend_argument_value_error(4, "must be PGSQL_TRACE_SUPPRESS_TIMESTAMPS and/or PGSQL_TRACE_REGRESS_MODE");
2155+
RETURN_THROWS();
2156+
} else {
2157+
PQsetTraceFlags(pgsql, trace_mode);
2158+
}
2159+
#else
2160+
zend_argument_value_error(4, "cannot set as trace is unsupported");
2161+
RETURN_THROWS();
2162+
#endif
2163+
}
21502164
RETURN_TRUE;
21512165
}
21522166
/* }}} */

ext/pgsql/pgsql.stub.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,20 @@
412412
* @cvalue PGSQL_DML_STRING
413413
*/
414414
const PGSQL_DML_STRING = UNKNOWN;
415+
#ifdef PQTRACE_SUPPPRESS_TIMESTAMPS
416+
/**
417+
* @var int
418+
* @cvalue PQTRACE_SUPPRESS_TIMESTAMPS
419+
*/
420+
const PGSQL_TRACE_SUPPRESS_TIMESTAMPS = UNKNOWN;
421+
#endif
422+
#ifdef PQTRACE_REGRESS_MODE
423+
/**
424+
* @var int
425+
* @cvalue PQTRACE_REGRESS_MODE
426+
*/
427+
const PGSQL_TRACE_REGRESS_MODE = UNKNOWN;
428+
#endif
415429

416430
#ifdef LIBPQ_HAS_PIPELINING
417431
/**
@@ -662,7 +676,7 @@ function pg_last_oid(PgSql\Result $result): string|int|false {}
662676
*/
663677
function pg_getlastoid(PgSql\Result $result): string|int|false {}
664678

665-
function pg_trace(string $filename, string $mode = "w", ?PgSql\Connection $connection = null): bool {}
679+
function pg_trace(string $filename, string $mode = "w", ?PgSql\Connection $connection = null, int $trace_mode = 0): bool {}
666680

667681
function pg_untrace(?PgSql\Connection $connection = null): bool {}
668682

ext/pgsql/pgsql_arginfo.h

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/pgsql/tests/pg_trace.phpt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
pg_trace
3+
--EXTENSIONS--
4+
pgsql
5+
--SKIPIF--
6+
<?php include("skipif.inc"); ?>
7+
--FILE--
8+
<?php
9+
10+
include('config.inc');
11+
12+
$db = pg_connect($conn_str);
13+
$tracefile = __DIR__ . '/trace.tmp';
14+
15+
try {
16+
pg_trace($tracefile, 'w', $db, 56432);
17+
} catch (ValueError $e) {
18+
echo $e->getMessage() . PHP_EOL;
19+
}
20+
var_dump(pg_trace($tracefile, 'w', $db, 0));
21+
$res = pg_query($db, 'select 1');
22+
23+
?>
24+
--EXPECT--
25+
pg_trace(): Argument #4 ($trace_mode) cannot set as trace is unsupported
26+
bool(true)

0 commit comments

Comments
 (0)