
Using the same implementation of the Backend and SessionCommand classes in both schemarouter and readwritesplit will prevent duplication of code. This commit only splits the generic parts of the class to a Backend class which the schemarouter then extends. The session commands for both routers are similar so they require no special handling.
80 lines
1.5 KiB
C++
80 lines
1.5 KiB
C++
/*
|
|
* Copyright (c) 2016 MariaDB Corporation Ab
|
|
*
|
|
* Use of this software is governed by the Business Source License included
|
|
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
|
|
*
|
|
* Change Date: 2020-01-01
|
|
*
|
|
* On the date above, in accordance with the Business Source License, use
|
|
* of this software will be governed by version 2 or later of the General
|
|
* Public License.
|
|
*/
|
|
|
|
#include <maxscale/session_command.hh>
|
|
|
|
#include <maxscale/modutil.h>
|
|
#include <maxscale/protocol/mysql.h>
|
|
|
|
using namespace maxscale;
|
|
|
|
void SessionCommand::mark_reply_received()
|
|
{
|
|
m_reply_sent = true;
|
|
}
|
|
|
|
bool SessionCommand::is_reply_received() const
|
|
{
|
|
return m_reply_sent;
|
|
}
|
|
|
|
uint8_t SessionCommand::get_command() const
|
|
{
|
|
return m_command;
|
|
}
|
|
|
|
uint64_t SessionCommand::get_position() const
|
|
{
|
|
return m_pos;
|
|
}
|
|
|
|
Buffer SessionCommand::copy_buffer() const
|
|
{
|
|
return m_buffer;
|
|
}
|
|
|
|
SessionCommand::SessionCommand(GWBUF *buffer, uint64_t id):
|
|
m_buffer(buffer),
|
|
m_command(0),
|
|
m_pos(id),
|
|
m_reply_sent(false)
|
|
{
|
|
if (buffer)
|
|
{
|
|
gwbuf_copy_data(buffer, MYSQL_HEADER_LEN, 1, &m_command);
|
|
}
|
|
}
|
|
|
|
SessionCommand::~SessionCommand()
|
|
{
|
|
}
|
|
|
|
std::string SessionCommand::to_string()
|
|
{
|
|
std::string str;
|
|
char *sql;
|
|
int sql_len;
|
|
|
|
/** TODO: Create C++ versions of modutil functions */
|
|
GWBUF *buf = m_buffer.release();
|
|
|
|
if (modutil_extract_SQL(buf, &sql, &sql_len))
|
|
{
|
|
str.append(sql, sql_len);
|
|
}
|
|
|
|
m_buffer.reset(buf);
|
|
|
|
return str;
|
|
}
|