From 388556558c80fb8878815dabbc023eae7852d621 Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Wed, 8 Jul 2020 21:23:17 -0500 Subject: [PATCH] inlining --- .../src/main/scala/net/protocol/Bind.scala | 35 ++++++++----------- .../main/scala/net/protocol/Describe.scala | 8 ++--- .../src/main/scala/net/protocol/Execute.scala | 30 ++++++++-------- 3 files changed, 31 insertions(+), 42 deletions(-) diff --git a/modules/core/src/main/scala/net/protocol/Bind.scala b/modules/core/src/main/scala/net/protocol/Bind.scala index eb166fdf..b204551a 100644 --- a/modules/core/src/main/scala/net/protocol/Bind.scala +++ b/modules/core/src/main/scala/net/protocol/Bind.scala @@ -46,32 +46,25 @@ object Bind { _ <- send(Flush) _ <- flatExpect { case BindComplete => ().pure[F] - case ErrorResponse(info) => syncAndFail(statement, args, argsOrigin, info) + case ErrorResponse(info) => + for { + hi <- history(Int.MaxValue) + _ <- send(Sync) + _ <- expect { case ReadyForQuery(_) => } + a <- PostgresErrorException.raiseError[F, Unit]( + sql = statement.statement.sql, + sqlOrigin = Some(statement.statement.origin), + info = info, + history = hi, + arguments = statement.statement.encoder.types.zip(statement.statement.encoder.encode(args)), + argumentsOrigin = Some(argsOrigin) + ) + } yield a } } yield pn } } { Close[F].apply } - def syncAndFail[A]( - statement: PreparedStatement[F, A], - args: A, - argsOrigin: Origin, - info: Map[Char, String] - ): F[Unit] = - for { - hi <- history(Int.MaxValue) - _ <- send(Sync) - _ <- expect { case ReadyForQuery(_) => } - a <- PostgresErrorException.raiseError[F, Unit]( - sql = statement.statement.sql, - sqlOrigin = Some(statement.statement.origin), - info = info, - history = hi, - arguments = statement.statement.encoder.types.zip(statement.statement.encoder.encode(args)), - argumentsOrigin = Some(argsOrigin) - ) - } yield a - } } \ No newline at end of file diff --git a/modules/core/src/main/scala/net/protocol/Describe.scala b/modules/core/src/main/scala/net/protocol/Describe.scala index 2e0e406b..da0a5b78 100644 --- a/modules/core/src/main/scala/net/protocol/Describe.scala +++ b/modules/core/src/main/scala/net/protocol/Describe.scala @@ -25,10 +25,6 @@ object Describe { def apply[F[_]: MonadError[?[_], Throwable]: Exchange: MessageSocket: Trace]: Describe[F] = new Describe[F] { - // promote a command to a query ... weird case, see below - def promote[A](cmd: skunk.Command[A]): skunk.Query[A, skunk.Void] = - skunk.Query(cmd.sql, cmd.origin, cmd.encoder, skunk.Void.codec) - override def apply(cmd: skunk.Command[_], id: StatementId, ty: Typer): F[Unit] = exchange("describe") { for { @@ -44,7 +40,9 @@ object Describe { // types then *that's* the error we will raise; only if we decode it // successfully we will raise the underlying error. Seems a little confusing // but it's a very unlikely case so I think we're ok for the time being. - case Left(err) => UnknownOidException(promote(cmd), err, ty.strategy).raiseError[F, Unit] + case Left(err) => + val promoted = skunk.Query(cmd.sql, cmd.origin, cmd.encoder, skunk.Void.codec) + UnknownOidException(promoted, err, ty.strategy).raiseError[F, Unit] case Right(td) => UnexpectedRowsException(cmd, td).raiseError[F, Unit] } } diff --git a/modules/core/src/main/scala/net/protocol/Execute.scala b/modules/core/src/main/scala/net/protocol/Execute.scala index 689d4d29..43f2ca31 100644 --- a/modules/core/src/main/scala/net/protocol/Execute.scala +++ b/modules/core/src/main/scala/net/protocol/Execute.scala @@ -31,7 +31,20 @@ object Execute { _ <- send(Flush) c <- flatExpect { case CommandComplete(c) => send(Sync) *> expect { case ReadyForQuery(_) => c } // https://github.com/tpolecat/skunk/issues/210 - case ErrorResponse(info) => syncAndFail[A](portal, info) + case ErrorResponse(info) => + for { + hi <- history(Int.MaxValue) + _ <- send(Sync) + _ <- expect { case ReadyForQuery(_) => } + a <- new PostgresErrorException( + sql = portal.preparedCommand.command.sql, + sqlOrigin = Some(portal.preparedCommand.command.origin), + info = info, + history = hi, + arguments = portal.preparedCommand.command.encoder.types.zip(portal.preparedCommand.command.encoder.encode(portal.arguments)), + argumentsOrigin = Some(portal.argumentsOrigin) + ).raiseError[F, Completion] + } yield a } } yield c } @@ -49,21 +62,6 @@ object Execute { } yield rs } - def syncAndFail[A](portal: Protocol.CommandPortal[F, A], info: Map[Char, String]): F[Completion] = - for { - hi <- history(Int.MaxValue) - _ <- send(Sync) - _ <- expect { case ReadyForQuery(_) => } - a <- new PostgresErrorException( - sql = portal.preparedCommand.command.sql, - sqlOrigin = Some(portal.preparedCommand.command.origin), - info = info, - history = hi, - arguments = portal.preparedCommand.command.encoder.types.zip(portal.preparedCommand.command.encoder.encode(portal.arguments)), - argumentsOrigin = Some(portal.argumentsOrigin) - ).raiseError[F, Completion] - } yield a - } }