diff --git a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgSocketConnection.java b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgSocketConnection.java index 0820a4c3c..6b2bfb843 100644 --- a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgSocketConnection.java +++ b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgSocketConnection.java @@ -19,23 +19,17 @@ import io.netty.channel.ChannelPipeline; import io.netty.handler.codec.DecoderException; -import io.vertx.core.impl.ContextInternal; +import io.vertx.core.AsyncResult; +import io.vertx.core.Future; +import io.vertx.core.Handler; +import io.vertx.core.Promise; +import io.vertx.core.buffer.Buffer; import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.net.impl.NetSocketInternal; import io.vertx.pgclient.PgException; import io.vertx.pgclient.impl.codec.PgCodec; -import io.vertx.sqlclient.impl.Connection; -import io.vertx.sqlclient.impl.Notice; -import io.vertx.sqlclient.impl.Notification; -import io.vertx.sqlclient.impl.QueryResultHandler; -import io.vertx.sqlclient.impl.SocketConnectionBase; -import io.vertx.sqlclient.impl.command.CommandBase; -import io.vertx.sqlclient.impl.command.InitCommand; -import io.vertx.core.*; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.net.impl.NetSocketInternal; -import io.vertx.sqlclient.impl.command.QueryCommandBase; -import io.vertx.sqlclient.impl.command.SimpleQueryCommand; -import io.vertx.sqlclient.impl.command.TxCommand; +import io.vertx.sqlclient.impl.*; +import io.vertx.sqlclient.impl.command.*; import io.vertx.sqlclient.spi.DatabaseMetadata; import java.util.Map; @@ -161,8 +155,8 @@ protected void doSchedule(CommandBase cmd, Handler> handle @Override public boolean isIndeterminatePreparedStatementError(Throwable error) { if (error instanceof PgException) { - PgException e = (PgException) error; - return "42P18".equals(e.getCode()); + String code = ((PgException) error).getCode(); + return "42P18".equals(code) || "42804".equals(code); } return false; } 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 a84ef22d9..8b7cd99a1 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 @@ -24,31 +24,14 @@ import io.vertx.core.json.JsonObject; import io.vertx.ext.unit.Async; import io.vertx.ext.unit.TestContext; -import io.vertx.pgclient.data.Box; -import io.vertx.pgclient.data.Circle; -import io.vertx.pgclient.data.Interval; -import io.vertx.pgclient.data.Line; -import io.vertx.pgclient.data.LineSegment; -import io.vertx.pgclient.data.Path; -import io.vertx.pgclient.data.Point; -import io.vertx.pgclient.data.Polygon; -import io.vertx.sqlclient.Cursor; -import io.vertx.sqlclient.Row; -import io.vertx.sqlclient.RowIterator; -import io.vertx.sqlclient.RowSet; -import io.vertx.sqlclient.RowStream; -import io.vertx.sqlclient.Tuple; +import io.vertx.pgclient.data.*; +import io.vertx.sqlclient.*; import org.junit.After; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import java.lang.reflect.Array; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.OffsetDateTime; -import java.time.ZoneOffset; +import java.time.*; import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.List; @@ -552,4 +535,16 @@ public void testInferDataTypeLazyFailure(TestContext ctx) { })); })); } + + @Test + public void testInferDataTypeLazyPolymorphic(TestContext ctx) { + PgConnection.connect(vertx, options(), ctx.asyncAssertSuccess(conn -> { + conn.prepare("SELECT to_jsonb($1)", ctx.asyncAssertSuccess(ps -> { + ps.query().execute(Tuple.of("foo"), ctx.asyncAssertSuccess(result -> { + ctx.assertEquals("foo", result.iterator().next().getString(0)); + conn.close(); + })); + })); + })); + } }