diff --git a/vertx-pg-client/src/test/java/io/vertx/pgclient/PreparedStatementTestBase.java b/vertx-pg-client/src/test/java/io/vertx/pgclient/PreparedStatementTestBase.java index 96bfe746b2..4aec882e01 100644 --- a/vertx-pg-client/src/test/java/io/vertx/pgclient/PreparedStatementTestBase.java +++ b/vertx-pg-client/src/test/java/io/vertx/pgclient/PreparedStatementTestBase.java @@ -509,6 +509,14 @@ private void testInferDataType42P18(TestContext ctx, Class type, T value, ctx.assertEquals("HELLO " + suffix2, str); })); })); + PgConnection.connect(vertx, options()).onComplete(ctx.asyncAssertSuccess(conn -> { + conn.begin() + .flatMap(tx -> conn.preparedQuery("SELECT CONCAT('HELLO ', $1)").execute(Tuple.of(value)) + .eventually(() -> conn.close()) + .onComplete(ctx.asyncAssertFailure(failure -> { + ctx.assertTrue(hasSqlstateCode(failure, "42P18")); + }))); + })); } @Test diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SocketConnectionBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SocketConnectionBase.java index 5e4d8e59ec..0c7503f387 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SocketConnectionBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SocketConnectionBase.java @@ -303,7 +303,7 @@ private PrepareStatementCommand prepareCommand(ExtendedQueryCommand queryCmd, } } else { Throwable cause = ar.cause(); - if (isIndeterminatePreparedStatementError(cause) && !sendParameterTypes) { + if (queryCmd.autoCommit() && isIndeterminatePreparedStatementError(cause) && !sendParameterTypes) { ChannelHandlerContext ctx = socket.channelHandlerContext(); // We cannot cache this prepared statement because it might be executed with another type ctx.write(prepareCommand(queryCmd, false, true), ctx.voidPromise()); diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java index 35fb8500e5..e8852cfad0 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java @@ -76,7 +76,7 @@ public Future prepare(String sql, PrepareOptions options) { .compose( cr -> Future.succeededFuture(PreparedStatementImpl.create(conn, context, cr, autoCommit())), err -> { - if (conn.isIndeterminatePreparedStatementError(err)) { + if (autoCommit() && conn.isIndeterminatePreparedStatementError(err)) { return Future.succeededFuture(PreparedStatementImpl.create(conn, context, options, sql, autoCommit())); } else { return Future.failedFuture(err);