MXS-1346: Only parse text queries
Only text format queries (COM_QUERY, COM_STMT_PREPARE) can be parsed by the query classifier. Also fixed invalid use of a NULL value in a string constructor.
This commit is contained in:
parent
2ccdd93d44
commit
a955e4a623
@ -1232,11 +1232,17 @@ static bool command_is_mandatory(const GWBUF *buffer)
|
||||
|
||||
static std::string get_sql(GWBUF* buffer)
|
||||
{
|
||||
std::string rval;
|
||||
char *sql;
|
||||
int len;
|
||||
modutil_extract_SQL(buffer, &sql, &len);
|
||||
len = MXS_MIN(len, FW_MAX_SQL_LEN);
|
||||
return std::string(sql, len);
|
||||
|
||||
if (modutil_extract_SQL(buffer, &sql, &len))
|
||||
{
|
||||
len = MXS_MIN(len, FW_MAX_SQL_LEN);
|
||||
rval.assign(sql, len);
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
DbfwSession::DbfwSession(Dbfw* instance, MXS_SESSION* session):
|
||||
@ -1250,9 +1256,12 @@ DbfwSession::~DbfwSession()
|
||||
{
|
||||
}
|
||||
|
||||
void DbfwSession::set_error(std::string error)
|
||||
void DbfwSession::set_error(const char* error)
|
||||
{
|
||||
m_error = error;
|
||||
if (error)
|
||||
{
|
||||
m_error = error;
|
||||
}
|
||||
}
|
||||
|
||||
std::string DbfwSession::get_error()const
|
||||
|
@ -174,7 +174,7 @@ public:
|
||||
DbfwSession(Dbfw* instance, MXS_SESSION* session);
|
||||
~DbfwSession();
|
||||
|
||||
void set_error(std::string error);
|
||||
void set_error(const char* error);
|
||||
std::string get_error() const;
|
||||
void clear_error();
|
||||
int send_error();
|
||||
|
@ -48,12 +48,23 @@ bool Rule::matches_query(DbfwSession* session, GWBUF* buffer, char** msg) const
|
||||
|
||||
bool Rule::matches_query_type(GWBUF* buffer) const
|
||||
{
|
||||
qc_query_op_t optype = qc_get_operation(buffer);
|
||||
bool rval = true;
|
||||
|
||||
return on_queries == FW_OP_UNDEFINED ||
|
||||
(on_queries & qc_op_to_fw_op(optype)) ||
|
||||
(MYSQL_IS_COM_INIT_DB(GWBUF_DATA(buffer)) &&
|
||||
(on_queries & FW_OP_CHANGE_DB));
|
||||
if (on_queries != FW_OP_UNDEFINED)
|
||||
{
|
||||
rval = false;
|
||||
|
||||
if (query_is_sql(buffer))
|
||||
{
|
||||
qc_query_op_t optype = qc_get_operation(buffer);
|
||||
|
||||
rval = (on_queries & qc_op_to_fw_op(optype)) ||
|
||||
(MYSQL_IS_COM_INIT_DB(GWBUF_DATA(buffer)) &&
|
||||
(on_queries & FW_OP_CHANGE_DB));
|
||||
}
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
const std::string& Rule::name() const
|
||||
|
Loading…
x
Reference in New Issue
Block a user