pfree(qcache);
/*
- * If we are doing extended query, forward sync message from frontend to
- * backend. This is necessary to prevent receiving Sync message after
- * Sending Ready for query.
+ * Send a "READY FOR QUERY" if not in extended query.
*/
- if (pool_is_doing_extended_query_message())
- {
- char kind;
- int32 len;
- POOL_SESSION_CONTEXT *session_context;
- POOL_CONNECTION *target_backend;
- char buf[5];
-
- if (pool_flush(frontend))
- return POOL_END;
- if (pool_read(frontend, &kind, 1))
- return POOL_END;
-
- ereport(DEBUG2,
- (errmsg("memcache: fetching from memory cache: expecting sync: kind '%c'", kind)));
- if (pool_read(frontend, &len, sizeof(len)))
- return POOL_END;
-
- /* Forward "Sync" message to backend */
- session_context = pool_get_session_context(true);
- target_backend = CONNECTION(backend, session_context->load_balance_node_id);
- pool_write(target_backend, &kind, 1);
- pool_write_and_flush(target_backend, &len, sizeof(len));
-
- /* Read and discard "Ready for query" message from backend */
- pool_read(target_backend, &kind, 1);
- pool_read(target_backend, buf, sizeof(buf));
- }
-
- /*
- * send a "READY FOR QUERY"
- */
- if (MAJOR(backend) == PROTO_MAJOR_V3)
+ if (!pool_is_doing_extended_query_message() && MAJOR(backend) == PROTO_MAJOR_V3)
{
signed char state;
state = MASTER(backend)->tstate;
send_message(frontend, 'Z', 5, (char *)&state);
}
- else
- {
- pool_write(frontend, "Z", 1);
- }
+
if (pool_flush(frontend))
{
return POOL_END;