Обсуждение: Parse message is not generating a ParseOk response

Поиск
Список
Период
Сортировка

Parse message is not generating a ParseOk response

От
Maurício Linhares
Дата:
Hello everyone,

I'm writing an async driver for PosgreSQL in Scala (
https://github.com/mauricio/postgresql-netty ) and I'm now working on
getting the prepared statements to work. Following the protocol
documentation for extended queries (
http://www.postgresql.org/docs/9.1/static/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY
) it says I should first send a Parse message and wait for a
ParseComplete message back, but this isn't working for me.

I send the Parse message and nothing is sent back to me nor the server
says anything.

Thinking it could be something wrong with my parse format, I wrote
tests for the format itself, but it seems like everything is correct
->
https://github.com/mauricio/postgresql-netty/blob/master/src/test/scala/com/github/mauricio/postgresql/encoders/ParseMessageEncoderSpec.scala

Am I missing something here?

BTW, looking at the JDBC driver, it doesn't look like it waits for the
ParseOk message. Is it how I should go by doing it?

-
Maurício Linhares
http://techbot.me/ - http://twitter.com/#!/mauriciojr

Re: Parse message is not generating a ParseOk response

От
Tom Lane
Дата:
=?ISO-8859-1?Q?Maur=EDcio_Linhares?= <mauricio.linhares@gmail.com> writes:
> I'm writing an async driver for PosgreSQL in Scala (
> https://github.com/mauricio/postgresql-netty ) and I'm now working on
> getting the prepared statements to work. Following the protocol
> documentation for extended queries (
> http://www.postgresql.org/docs/9.1/static/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY
> ) it says I should first send a Parse message and wait for a
> ParseComplete message back, but this isn't working for me.

> I send the Parse message and nothing is sent back to me nor the server
> says anything.

You need to add a Sync message if you're going to wait for the Parse to
come back (think of it as being like fflush).  Usually, though, people
don't wait for mere ParseComplete, but send additional messages before
waiting; perhaps do a Describe, or proceed directly with execution.
The idea is that if a step fails, the server will send an error and then
skip any subsequent messages till Sync, so you can optimistically assume
the Parse succeeds and do whatever you'd have done next, thus saving
network round-trips.

            regards, tom lane