diff --git a/BUILD/mdbci/templates/build.json.template b/BUILD/mdbci/templates/build.json.template index b53ecb321..08f93905a 100644 --- a/BUILD/mdbci/templates/build.json.template +++ b/BUILD/mdbci/templates/build.json.template @@ -2,6 +2,7 @@ "build" : { "hostname" : "default", + "memory_size" : "4096", "box" : "$box" } } diff --git a/BUILD/mdbci/templates/install.json.template b/BUILD/mdbci/templates/install.json.template index 81db5a9de..39c265c97 100644 --- a/BUILD/mdbci/templates/install.json.template +++ b/BUILD/mdbci/templates/install.json.template @@ -3,6 +3,7 @@ { "hostname" : "maxscale", "box" : "$box", + "memory_size" : "4096", "product" : { "name": "maxscale" } diff --git a/maxscale-system-test/mariadb_nodes.cpp b/maxscale-system-test/mariadb_nodes.cpp index 388c0fee3..f87a3c7fd 100644 --- a/maxscale-system-test/mariadb_nodes.cpp +++ b/maxscale-system-test/mariadb_nodes.cpp @@ -713,7 +713,7 @@ static bool multi_source_replication(MYSQL *conn, int node) MYSQL_RES *res; if (mysql_query(conn, "SHOW ALL SLAVES STATUS") == 0 && - (res = mysql_store_result(conn))) + (res = mysql_store_result(conn))) { if (mysql_num_rows(res) == 1) { @@ -1293,7 +1293,7 @@ void Mariadb_nodes::close_active_connections() } const char *sql = - "select id from information_schema.processlist where id != @@pseudo_thread_id and user not in ('system user', 'repl')"; + "select id from information_schema.processlist where id != @@pseudo_thread_id and user not in ('system user', 'repl')"; for (int i = 0; i < N; i++) { @@ -1326,7 +1326,7 @@ void Mariadb_nodes::stash_server_settings(int node) void Mariadb_nodes::restore_server_settings(int node) { - ssh_node(node, "sudo mv -f /etc/my.cnf.d.backup/* /etc/my.cnf.d/", true); + ssh_node(node, "sudo mv -f /etc/my.cnf.d.backup/* /etc/my.cnf.d/", true); } void Mariadb_nodes::disable_server_setting(int node, const char* setting) @@ -1336,8 +1336,8 @@ void Mariadb_nodes::disable_server_setting(int node, const char* setting) void Mariadb_nodes::add_server_setting(int node, const char* setting) { - ssh_node_f(node, true, "sudo sed -i '$a [server]' /etc/my.cnf.d/server.cnf", setting); - ssh_node_f(node, true, "sudo sed -i '$a %s' /etc/my.cnf.d/server.cnf", setting); + ssh_node_f(node, true, "sudo sed -i '$a [server]' /etc/my.cnf.d/server*.cnf", setting); + ssh_node_f(node, true, "sudo sed -i '$a %s' /etc/my.cnf.d/server*.cnf", setting); } void Mariadb_nodes::reset_server_settings(int node) @@ -1396,7 +1396,9 @@ int Mariadb_nodes::prepare_server(int i) ssh_node_f(i, true, "%s", stop_db_command[i]); sleep(5); ssh_node(i, "sed -i \"s/bind-address/#bind-address/g\" /etc/mysql/my.cnf.d/*.cnf", true); - ssh_node(i, "ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld; sudo service apparmor restart", true); + ssh_node(i, + "ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld; sudo service apparmor restart", + true); version = ssh_node_output(i, "/usr/sbin/mysqld --version", false, &ec); if (ec == 0) { @@ -1413,7 +1415,8 @@ int Mariadb_nodes::prepare_server(int i) // password in the log and reseting passord to empty string ssh_node(i, "/usr/sbin/mysqld --initialize; sudo chown -R mysql:mysql /var/lib/mysql", true); ssh_node(i, start_db_command[i], true); - tmp_pass = ssh_node_output(i, "cat /var/log/mysqld.log | grep \"temporary password\" | sed -n -e 's/^.*: //p'", true, &ec); + tmp_pass = ssh_node_output(i, + "cat /var/log/mysqld.log | grep \"temporary password\" | sed -n -e 's/^.*: //p'", true, &ec); ssh_node_f(i, true, "mysqladmin -uroot -p'%s' password '%s'", tmp_pass, tmp_pass); ssh_node_f(i, false, "echo \"UNINSTALL PLUGIN validate_password\" | sudo mysql -uroot -p'%s'", tmp_pass); ssh_node(i, stop_db_command[i], true); @@ -1465,13 +1468,13 @@ void Mariadb_nodes::replicate_from(int slave, int master, const char* type) { std::stringstream change_master; change_master << "CHANGE MASTER TO MASTER_HOST = '" << IP[master] - << "', MASTER_PORT = " << port[master] << ", MASTER_USE_GTID = " << type << ", " - "MASTER_USER='repl', MASTER_PASSWORD='repl';"; + << "', MASTER_PORT = " << port[master] << ", MASTER_USE_GTID = " << type << ", " + "MASTER_USER='repl', MASTER_PASSWORD='repl';"; if (verbose) { std::cout << "Server " << slave + 1 << " starting to replicate from server " << master + 1 << std::endl; - std::cout << "Query is '" << change_master.str() << "'" << std::endl; + std::cout << "Query is '" << change_master.str() << "'" << std::endl; } execute_query(nodes[slave], "STOP SLAVE;"); diff --git a/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc b/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc index 50679dc50..8ea9ce177 100644 --- a/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc +++ b/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc @@ -1793,6 +1793,7 @@ static void parsing_info_done(void* ptr) free(field.table); free(field.column); } + free(fi.fields); } free(pi->function_infos); diff --git a/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y b/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y index d4498cf37..21707bee2 100644 --- a/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y +++ b/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y @@ -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). { diff --git a/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c b/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c index 5d51ea86a..18017915c 100644 --- a/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c +++ b/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c @@ -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 diff --git a/query_classifier/test/maxscale.test b/query_classifier/test/maxscale.test index 1bfc4a1db..8c34ceb29 100644 --- a/query_classifier/test/maxscale.test +++ b/query_classifier/test/maxscale.test @@ -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; \ No newline at end of file