]
Steven Hawkins commented on TEIID-5658:
---------------------------------------
I remember reading the ready as no-op operation by the client. Is
behavior same odbc client?
Haven't debugged the pg odbc code yet.
I've updated the issue. It's more narrow than I thought. It's actually that
we're responding to execute before sync, and the client doesn't like that.
PG transport can sendResults before sync
----------------------------------------
Key: TEIID-5658
URL:
https://issues.jboss.org/browse/TEIID-5658
Project: Teiid
Issue Type: Bug
Components: ODBC
Reporter: Steven Hawkins
Assignee: Steven Hawkins
Priority: Major
Fix For: 12.1, 12.0.1, 11.2.3
The code is allowing for a sequence of events such as:
2019-02-13 14:07:47.613 org.teiid.ODBC TRACE NIO4 invoking server method: prepare [,
select oid from pg_class where relname='pg_class', []]
2019-02-13 14:07:47.615 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 prepareCompleted []
2019-02-13 14:07:47.615 org.teiid.ODBC TRACE NIO4 invoking server method: bindParameters
[, , [], 0, null, UTF-8]
2019-02-13 14:07:47.615 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 bindComplete null
2019-02-13 14:07:47.617 org.teiid.ODBC TRACE NIO4 invoking server method:
getResultSetMetaDataDescription []
2019-02-13 14:07:47.617 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 sendResultSetDescription
[[org.teiid.odbc.PGUtil$PgColInfo@1086babd], null]
2019-02-13 14:07:47.617 org.teiid.ODBC TRACE NIO4 invoking server method: execute [, 0]
2019-02-13 14:07:47.618 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 sendResults [null,
org.teiid.jdbc.ResultSetImpl@1e1aed1a, [org.teiid.odbc.PGUtil$PgColInfo@1086babd],
org.teiid.client.util.ResultsFuture@3b6cff36, FORWARD, -1, false, null]
2019-02-13 14:07:47.619 org.teiid.ODBC TRACE NIO4 invoking server method: sync null
2019-02-13 14:07:47.619 org.teiid.ODBC TRACE Worker0_QueryProcessorQueue368 invoking
client method: org.teiid.transport.ODBCClientInstance$1@d875495 sendCommandComplete
[select oid from pg_class where relname='pg_class', [1]]
2019-02-13 14:07:47.619 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 ready [false, false]
That is after execute we are immediately responding with results. That response ahead of
the sync causes issues in the pg jdbc driver such as reporting that there is no result
set. See TEIID-5425
This does not appear to be a requirement of the flow:
https://www.postgresql.org/docs/9.3/protocol-flow.html#AEN99807