Merge branch '2.2' of github.com:mariadb-corporation/MaxScale into 2.2

This commit is contained in:
Timofey Turenko 2018-05-18 12:42:24 +03:00
commit 9d10642cd7
9 changed files with 41 additions and 2 deletions

View File

@ -293,6 +293,7 @@ typedef enum
MXS_COM_STMT_RESET = 26,
MXS_COM_SET_OPTION = 27,
MXS_COM_STMT_FETCH = 28,
MXS_COM_STMT_BULK_EXECUTE = 0xfa,
MXS_COM_DAEMON,
MXS_COM_END
} mxs_mysql_cmd_t;

View File

@ -654,6 +654,10 @@ add_test_executable(mxs1824_double_cursor.cpp mxs1824_double_cursor replication
# https://jira.mariadb.org/browse/MXS-1831
add_test_executable(mxs1831_unknown_param.cpp mxs1831_unknown_param replication LABELS REPL_BACKEND)
# MXS-1873: Large session commands cause errors
# https://jira.mariadb.org/browse/MXS-1873
add_test_executable(mxs1873_large_sescmd.cpp mxs1873_large_sescmd replication LABELS readwritesplit REPL_BACKEND)
# 'namedserverfilter' test
add_test_executable(namedserverfilter.cpp namedserverfilter namedserverfilter LABELS namedserverfilter LIGHT REPL_BACKEND)

View File

@ -0,0 +1,20 @@
/**
* MXS-1873: Large session commands cause errors
*
* https://jira.mariadb.org/browse/MXS-1873
*/
#include "testconnections.h"
int main(int argc, char** argv)
{
TestConnections test(argc, argv);
test.maxscales->connect();
test.try_query(test.maxscales->conn_rwsplit[0],
"SET STATEMENT max_statement_time=30 FOR SELECT seq FROM seq_0_to_100000");
test.try_query(test.maxscales->conn_rwsplit[0], "SELECT 1");
test.maxscales->disconnect();
return test.global_result;
}

View File

@ -1793,6 +1793,7 @@ static void parsing_info_done(void* ptr)
free(field.table);
free(field.column);
}
free(fi.fields);
}
free(pi->function_infos);

View File

@ -629,7 +629,7 @@ columnid(A) ::= nm(X). {
PREVIOUS
QUICK
RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESTRICT ROLLBACK ROLLUP ROW
SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SLAVE /*START*/ STATUS
SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SLAVE /*START*/ STATEMENT STATUS
TABLES TEMP TEMPTABLE /*TRIGGER*/
/*TRUNCATE*/
// TODO: UNSIGNED is a reserved word and should not automatically convert into an identifer.
@ -3157,6 +3157,14 @@ cmd ::= SET set_scope(X) TRANSACTION transaction_characteristics. {
maxscaleSet(pParse, X, MXS_SET_TRANSACTION, 0);
}
cmd ::= SET STATEMENT variable_assignments(X) FOR cmd. {
// The parsing of cmd will cause the relevant maxscale-callback to
// be called, so we neither need to call it here, nor free cmd (as
// it will be freed by that callback). The variable definitions we
// just throw away, as they are of no interest.
sqlite3ExprListDelete(pParse->db, X);
}
//////////////////////// The USE statement ////////////////////////////////////
//
cmd ::= use(X). {

View File

@ -442,6 +442,7 @@ static Keyword aKeywordTable[] = {
{ "SET", "TK_SET", ALWAYS },
#ifdef MAXSCALE
{ "START", "TK_START", ALWAYS },
{ "STATEMENT", "TK_STATEMENT", ALWAYS },
{ "STATUS", "TK_STATUS", ALWAYS },
{ "STRAIGHT_JOIN", "TK_STRAIGHT_JOIN",ALWAYS },
#endif

View File

@ -106,3 +106,6 @@ CALL p1((SELECT f1()), ?);
# MXS-1829
SELECT PREVIOUS VALUE FOR SEQ;
# MXS-1874
SET STATEMENT max_statement_time=30 FOR SELECT seq FROM seq_0_to_100000;

View File

@ -34,6 +34,7 @@ do{ \
static inline bool is_ps_command(uint8_t cmd)
{
return cmd == MXS_COM_STMT_EXECUTE ||
cmd == MXS_COM_STMT_BULK_EXECUTE ||
cmd == MXS_COM_STMT_SEND_LONG_DATA ||
cmd == MXS_COM_STMT_CLOSE ||
cmd == MXS_COM_STMT_FETCH ||

View File

@ -337,11 +337,11 @@ bool route_session_write(RWSplitSession *rses, GWBUF *querybuf,
bool expecting_response = mxs_mysql_command_will_respond(command);
int nsucc = 0;
uint64_t lowest_pos = id;
gwbuf_set_type(querybuf, GWBUF_TYPE_COLLECT_RESULT);
if (qc_query_is_type(type, QUERY_TYPE_PREPARE_NAMED_STMT) ||
qc_query_is_type(type, QUERY_TYPE_PREPARE_STMT))
{
gwbuf_set_type(querybuf, GWBUF_TYPE_COLLECT_RESULT);
rses->ps_manager.store(querybuf, id);
}