Merge branch '2.2' of github.com:mariadb-corporation/MaxScale into 2.2
This commit is contained in:
@ -293,6 +293,7 @@ typedef enum
|
|||||||
MXS_COM_STMT_RESET = 26,
|
MXS_COM_STMT_RESET = 26,
|
||||||
MXS_COM_SET_OPTION = 27,
|
MXS_COM_SET_OPTION = 27,
|
||||||
MXS_COM_STMT_FETCH = 28,
|
MXS_COM_STMT_FETCH = 28,
|
||||||
|
MXS_COM_STMT_BULK_EXECUTE = 0xfa,
|
||||||
MXS_COM_DAEMON,
|
MXS_COM_DAEMON,
|
||||||
MXS_COM_END
|
MXS_COM_END
|
||||||
} mxs_mysql_cmd_t;
|
} mxs_mysql_cmd_t;
|
||||||
|
|||||||
@ -654,6 +654,10 @@ add_test_executable(mxs1824_double_cursor.cpp mxs1824_double_cursor replication
|
|||||||
# https://jira.mariadb.org/browse/MXS-1831
|
# https://jira.mariadb.org/browse/MXS-1831
|
||||||
add_test_executable(mxs1831_unknown_param.cpp mxs1831_unknown_param replication LABELS REPL_BACKEND)
|
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
|
# 'namedserverfilter' test
|
||||||
add_test_executable(namedserverfilter.cpp namedserverfilter namedserverfilter LABELS namedserverfilter LIGHT REPL_BACKEND)
|
add_test_executable(namedserverfilter.cpp namedserverfilter namedserverfilter LABELS namedserverfilter LIGHT REPL_BACKEND)
|
||||||
|
|
||||||
|
|||||||
20
maxscale-system-test/mxs1873_large_sescmd.cpp
Normal file
20
maxscale-system-test/mxs1873_large_sescmd.cpp
Normal 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;
|
||||||
|
}
|
||||||
@ -1793,6 +1793,7 @@ static void parsing_info_done(void* ptr)
|
|||||||
free(field.table);
|
free(field.table);
|
||||||
free(field.column);
|
free(field.column);
|
||||||
}
|
}
|
||||||
|
free(fi.fields);
|
||||||
}
|
}
|
||||||
free(pi->function_infos);
|
free(pi->function_infos);
|
||||||
|
|
||||||
|
|||||||
@ -629,7 +629,7 @@ columnid(A) ::= nm(X). {
|
|||||||
PREVIOUS
|
PREVIOUS
|
||||||
QUICK
|
QUICK
|
||||||
RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESTRICT ROLLBACK ROLLUP ROW
|
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*/
|
TABLES TEMP TEMPTABLE /*TRIGGER*/
|
||||||
/*TRUNCATE*/
|
/*TRUNCATE*/
|
||||||
// TODO: UNSIGNED is a reserved word and should not automatically convert into an identifer.
|
// 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);
|
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 ////////////////////////////////////
|
//////////////////////// The USE statement ////////////////////////////////////
|
||||||
//
|
//
|
||||||
cmd ::= use(X). {
|
cmd ::= use(X). {
|
||||||
|
|||||||
@ -442,6 +442,7 @@ static Keyword aKeywordTable[] = {
|
|||||||
{ "SET", "TK_SET", ALWAYS },
|
{ "SET", "TK_SET", ALWAYS },
|
||||||
#ifdef MAXSCALE
|
#ifdef MAXSCALE
|
||||||
{ "START", "TK_START", ALWAYS },
|
{ "START", "TK_START", ALWAYS },
|
||||||
|
{ "STATEMENT", "TK_STATEMENT", ALWAYS },
|
||||||
{ "STATUS", "TK_STATUS", ALWAYS },
|
{ "STATUS", "TK_STATUS", ALWAYS },
|
||||||
{ "STRAIGHT_JOIN", "TK_STRAIGHT_JOIN",ALWAYS },
|
{ "STRAIGHT_JOIN", "TK_STRAIGHT_JOIN",ALWAYS },
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -106,3 +106,6 @@ CALL p1((SELECT f1()), ?);
|
|||||||
|
|
||||||
# MXS-1829
|
# MXS-1829
|
||||||
SELECT PREVIOUS VALUE FOR SEQ;
|
SELECT PREVIOUS VALUE FOR SEQ;
|
||||||
|
|
||||||
|
# MXS-1874
|
||||||
|
SET STATEMENT max_statement_time=30 FOR SELECT seq FROM seq_0_to_100000;
|
||||||
@ -34,6 +34,7 @@ do{ \
|
|||||||
static inline bool is_ps_command(uint8_t cmd)
|
static inline bool is_ps_command(uint8_t cmd)
|
||||||
{
|
{
|
||||||
return cmd == MXS_COM_STMT_EXECUTE ||
|
return cmd == MXS_COM_STMT_EXECUTE ||
|
||||||
|
cmd == MXS_COM_STMT_BULK_EXECUTE ||
|
||||||
cmd == MXS_COM_STMT_SEND_LONG_DATA ||
|
cmd == MXS_COM_STMT_SEND_LONG_DATA ||
|
||||||
cmd == MXS_COM_STMT_CLOSE ||
|
cmd == MXS_COM_STMT_CLOSE ||
|
||||||
cmd == MXS_COM_STMT_FETCH ||
|
cmd == MXS_COM_STMT_FETCH ||
|
||||||
|
|||||||
@ -337,11 +337,11 @@ bool route_session_write(RWSplitSession *rses, GWBUF *querybuf,
|
|||||||
bool expecting_response = mxs_mysql_command_will_respond(command);
|
bool expecting_response = mxs_mysql_command_will_respond(command);
|
||||||
int nsucc = 0;
|
int nsucc = 0;
|
||||||
uint64_t lowest_pos = id;
|
uint64_t lowest_pos = id;
|
||||||
|
gwbuf_set_type(querybuf, GWBUF_TYPE_COLLECT_RESULT);
|
||||||
|
|
||||||
if (qc_query_is_type(type, QUERY_TYPE_PREPARE_NAMED_STMT) ||
|
if (qc_query_is_type(type, QUERY_TYPE_PREPARE_NAMED_STMT) ||
|
||||||
qc_query_is_type(type, QUERY_TYPE_PREPARE_STMT))
|
qc_query_is_type(type, QUERY_TYPE_PREPARE_STMT))
|
||||||
{
|
{
|
||||||
gwbuf_set_type(querybuf, GWBUF_TYPE_COLLECT_RESULT);
|
|
||||||
rses->ps_manager.store(querybuf, id);
|
rses->ps_manager.store(querybuf, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user