Move large query processing inside RWBackend

The knowledge of which function to call can be internal to RWBackend. This
make the use of the class easier as one can simply write to the backend.
This commit is contained in:
Markus Mäkelä 2019-04-18 13:14:45 +03:00
parent 3e41a601f8
commit 24fc82e160
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19
3 changed files with 11 additions and 18 deletions

View File

@ -115,21 +115,6 @@ public:
*/
bool write(GWBUF* buffer, response_type type = EXPECT_RESPONSE);
/**
* Continue a previously started write
*
* This should only be used when RWBackend::write has been called to start
* a new query.
*
* @param buffer Buffer to write
*
* @return True if writing was successful
*/
bool continue_write(GWBUF* buffer)
{
return mxs::Backend::write(buffer, Backend::NO_RESPONSE);
}
void close(close_type type = CLOSE_NORMAL);
// For COM_STMT_FETCH processing
@ -181,6 +166,7 @@ private:
bool m_local_infile_requested; /**< Whether a LOCAL INFILE was requested */
ResponseStat m_response_stat;
uint64_t m_num_coldefs = 0;
bool m_large_query = false;
inline bool is_opening_cursor() const
{

View File

@ -75,6 +75,15 @@ uint32_t RWBackend::get_ps_handle(uint32_t id) const
bool RWBackend::write(GWBUF* buffer, response_type type)
{
uint32_t len = mxs_mysql_get_packet_len(buffer);
bool was_large_query = m_large_query;
m_large_query = len == MYSQL_PACKET_LENGTH_MAX;
if (was_large_query)
{
return mxs::Backend::write(buffer, Backend::NO_RESPONSE);
}
if (type == mxs::Backend::EXPECT_RESPONSE)
{
/** The server will reply to this command */

View File

@ -1176,9 +1176,7 @@ bool RWSplitSession::handle_got_target(GWBUF* querybuf, RWBackend* target, bool
* will do the replacement of PS IDs which must not be done if we are
* continuing an ongoing query.
*/
bool success = !m_qc.large_query() ?
target->write(send_buf, response) :
target->continue_write(send_buf);
bool success = target->write(send_buf, response);
if (success)
{