
Session commands that span multiple packets are now allowed and will work. However, if one is executed the session command history is disabled as no interface for appending to session commands exists. The backend protocol modules now also correctly track the current command. This was a pre-requisite for large session commands as they needed to be gathered into a single buffer and to do this the current command had to be accurate. Updated tests to expect success instead of failure for large prepared statements.
42 lines
1.0 KiB
C++
42 lines
1.0 KiB
C++
/**
|
|
* MXS-1804: request 16M-1 stmt_prepare command packet connect hang
|
|
*
|
|
* https://jira.mariadb.org/browse/MXS-1804
|
|
*/
|
|
|
|
#include "testconnections.h"
|
|
|
|
int sql_str_size(int sqlsize)
|
|
{
|
|
char prefx[] = "select ''";
|
|
return sqlsize - strlen(prefx) - 1;
|
|
}
|
|
|
|
void gen_select_sqlstr(char *sqlstr, unsigned int strsize, int sqlsize)
|
|
{
|
|
strcpy(sqlstr, "select '");
|
|
memset(sqlstr + strlen("select '"), 'f', strsize);
|
|
sqlstr[sqlsize - 2] = '\'';
|
|
sqlstr[sqlsize - 1] = '\0';
|
|
}
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
TestConnections test(argc, argv);
|
|
int sqlsize = 16777215;
|
|
int strsize = sql_str_size(sqlsize);
|
|
|
|
char* sqlstr = (char *)malloc(sqlsize);
|
|
gen_select_sqlstr(sqlstr, strsize, sqlsize);
|
|
|
|
test.set_timeout(30);
|
|
test.maxscales->connect();
|
|
|
|
MYSQL_STMT* stmt = mysql_stmt_init(test.maxscales->conn_rwsplit[0]);
|
|
test.assert(mysql_stmt_prepare(stmt, sqlstr, strlen(sqlstr)) == 0, "Prepare should not fail",
|
|
mysql_stmt_error(stmt));
|
|
mysql_stmt_close(stmt);
|
|
|
|
return test.global_result;
|
|
}
|