pgjdbc/pgjdbc GitHub issues and pull requests (mirror)
help / color / mirror / Atom feedFrom: ShenFeng312 (@ShenFeng312) <[email protected]>
To: pgjdbc/pgjdbc <[email protected]>
Subject: [pgjdbc/pgjdbc] issue #3781: Performance Optimization: PgPreparedStatement.getMetaData Should Not Use QUERY_ONESHOT
Date: Fri, 22 Aug 2025 04:40:35 +0000
Message-ID: <[email protected]> (raw)
Description:
Currently, `PgPreparedStatement.getMetaData` uses `QUERY_ONESHOT` before `execute` is invoked, which results in `query.setStatementName(statementName, deallocateEpoch)` not being executed. Consequently, the binary protocol cannot be used to receive the result set.
```java
if (!oneShot) {
// Generate a statement name to use.
statementName = "S_" + (nextUniqueID++);
// And prepare the new statement.
// NB: Must clone the OID array, as it's a direct reference to
// the SimpleParameterList's internal array that might be modified
// under us.
query.setStatementName(statementName, deallocateEpoch);
query.setPrepareTypes(typeOIDs);
registerParsedQuery(query, statementName);
}
```
```java
public @Nullable ResultSetMetaData getMetaData() throws SQLException {
checkClosed();
ResultSet rs = getResultSet();
if (rs == null || ((PgResultSet) rs).isResultSetClosed()) {
// OK, we haven't executed it yet, or it was closed
// we've got to go to the backend
// for more info. We send the full query, but just don't
// execute it.
int flags = QueryExecutor.QUERY_ONESHOT | QueryExecutor.QUERY_DESCRIBE_ONLY
| QueryExecutor.QUERY_SUPPRESS_BEGIN;
StatementResultHandler handler = new StatementResultHandler();
connection.getQueryExecutor().execute(preparedQuery.query, preparedParameters, handler, 0, 0,
flags);
ResultWrapper wrapper = handler.getResults();
if (wrapper != null) {
rs = wrapper.getResultSet();
}
}
if (rs != null) {
return rs.getMetaData();
}
return null;
}
```
view thread (3+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: github://pgjdbc/pgjdbc
Cc: [email protected], [email protected]
Subject: Re: [pgjdbc/pgjdbc] issue #3781: Performance Optimization: PgPreparedStatement.getMetaData Should Not Use QUERY_ONESHOT
In-Reply-To: <<[email protected]>>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox