Merged new tests and fix in query classifier in develop into release-0.5.
Merge branch 'develop' into release-0.5
This commit is contained in:
@ -396,6 +396,44 @@ static skygw_query_type_t resolve_query_type(
|
|||||||
type = QUERY_TYPE_SESSION_WRITE;
|
type = QUERY_TYPE_SESSION_WRITE;
|
||||||
goto return_qtype;
|
goto return_qtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (skygw_stmt_causes_implicit_commit(lex, CF_AUTO_COMMIT_TRANS))
|
||||||
|
{
|
||||||
|
if (LOG_IS_ENABLED(LOGFILE_TRACE))
|
||||||
|
{
|
||||||
|
if (sql_command_flags[lex->sql_command] &
|
||||||
|
CF_IMPLICT_COMMIT_BEGIN)
|
||||||
|
{
|
||||||
|
skygw_log_write(
|
||||||
|
LOGFILE_TRACE,
|
||||||
|
"Implicit COMMIT before executing the "
|
||||||
|
"next command.");
|
||||||
|
}
|
||||||
|
else if (sql_command_flags[lex->sql_command] &
|
||||||
|
CF_IMPLICIT_COMMIT_END)
|
||||||
|
{
|
||||||
|
skygw_log_write(
|
||||||
|
LOGFILE_TRACE,
|
||||||
|
"Implicit COMMIT after executing the "
|
||||||
|
"next command.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
type |= QUERY_TYPE_COMMIT;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* REVOKE ALL, ASSIGN_TO_KEYCACHE,
|
||||||
|
* PRELOAD_KEYS, FLUSH, RESET, CREATE|ALTER|DROP SERVER
|
||||||
|
*/
|
||||||
|
if (lex->option_type == OPT_GLOBAL)
|
||||||
|
{
|
||||||
|
type |= QUERY_TYPE_GLOBAL_WRITE;
|
||||||
|
goto return_qtype;
|
||||||
|
}
|
||||||
|
else if (lex->option_type == OPT_SESSION)
|
||||||
|
{
|
||||||
|
type |= QUERY_TYPE_SESSION_WRITE;
|
||||||
|
goto return_qtype;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 1:ALTER TABLE, TRUNCATE, REPAIR, OPTIMIZE, ANALYZE, CHECK.
|
* 1:ALTER TABLE, TRUNCATE, REPAIR, OPTIMIZE, ANALYZE, CHECK.
|
||||||
* 2:CREATE|ALTER|DROP|TRUNCATE|RENAME TABLE, LOAD, CREATE|DROP|ALTER DB,
|
* 2:CREATE|ALTER|DROP|TRUNCATE|RENAME TABLE, LOAD, CREATE|DROP|ALTER DB,
|
||||||
@ -419,48 +457,9 @@ static skygw_query_type_t resolve_query_type(
|
|||||||
goto return_qtype;
|
goto return_qtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* REVOKE ALL, ASSIGN_TO_KEYCACHE,
|
|
||||||
* PRELOAD_KEYS, FLUSH, RESET, CREATE|ALTER|DROP SERVER
|
|
||||||
* SET autocommit, various other SET commands.
|
|
||||||
*/
|
|
||||||
if (skygw_stmt_causes_implicit_commit(lex, CF_AUTO_COMMIT_TRANS))
|
|
||||||
{
|
|
||||||
if (LOG_IS_ENABLED(LOGFILE_TRACE))
|
|
||||||
{
|
|
||||||
if (sql_command_flags[lex->sql_command] &
|
|
||||||
CF_IMPLICT_COMMIT_BEGIN)
|
|
||||||
{
|
|
||||||
skygw_log_write(
|
|
||||||
LOGFILE_TRACE,
|
|
||||||
"Implicit COMMIT before executing the "
|
|
||||||
"next command.");
|
|
||||||
}
|
|
||||||
else if (sql_command_flags[lex->sql_command] &
|
|
||||||
CF_IMPLICIT_COMMIT_END)
|
|
||||||
{
|
|
||||||
skygw_log_write(
|
|
||||||
LOGFILE_TRACE,
|
|
||||||
"Implicit COMMIT after executing the "
|
|
||||||
"next command.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
type |= QUERY_TYPE_COMMIT;
|
|
||||||
|
|
||||||
if (lex->option_type == OPT_GLOBAL)
|
|
||||||
{
|
|
||||||
type |= QUERY_TYPE_GLOBAL_WRITE;
|
|
||||||
}
|
|
||||||
else if (lex->option_type == OPT_SESSION)
|
|
||||||
{
|
|
||||||
type |= QUERY_TYPE_SESSION_WRITE;
|
|
||||||
}
|
|
||||||
goto return_qtype;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Try to catch session modifications here */
|
/** Try to catch session modifications here */
|
||||||
switch (lex->sql_command) {
|
switch (lex->sql_command) {
|
||||||
case SQLCOM_SET_OPTION:
|
case SQLCOM_SET_OPTION: /*< SET commands. */
|
||||||
if (lex->option_type == OPT_GLOBAL)
|
if (lex->option_type == OPT_GLOBAL)
|
||||||
{
|
{
|
||||||
type |= QUERY_TYPE_GLOBAL_WRITE;
|
type |= QUERY_TYPE_GLOBAL_WRITE;
|
||||||
@ -672,6 +671,7 @@ static bool skygw_stmt_causes_implicit_commit(LEX* lex, uint mask)
|
|||||||
succp = lex->autocommit ? true : false;
|
succp = lex->autocommit ? true : false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
succp = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -670,6 +670,13 @@ static int routeQuery(
|
|||||||
"Packet type\t%s",
|
"Packet type\t%s",
|
||||||
STRPACKETTYPE(packet_type))));
|
STRPACKETTYPE(packet_type))));
|
||||||
|
|
||||||
|
if (QUERY_IS_TYPE(qtype,QUERY_TYPE_COMMIT) &&
|
||||||
|
transaction_active)
|
||||||
|
{
|
||||||
|
transaction_active = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
switch (qtype) {
|
switch (qtype) {
|
||||||
case QUERY_TYPE_WRITE:
|
case QUERY_TYPE_WRITE:
|
||||||
LOGIF(LT, (skygw_log_write(
|
LOGIF(LT, (skygw_log_write(
|
||||||
@ -724,12 +731,6 @@ static int routeQuery(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case QUERY_TYPE_SESSION_WRITE:
|
case QUERY_TYPE_SESSION_WRITE:
|
||||||
case (QUERY_TYPE_SESSION_WRITE|QUERY_TYPE_COMMIT):
|
|
||||||
if (QUERY_IS_TYPE(qtype,QUERY_TYPE_COMMIT) &&
|
|
||||||
transaction_active)
|
|
||||||
{
|
|
||||||
transaction_active = false;
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Execute in backends used by current router session.
|
* Execute in backends used by current router session.
|
||||||
* Save session variable commands to router session property
|
* Save session variable commands to router session property
|
||||||
|
|||||||
@ -49,3 +49,67 @@ if [ "$a" != "$TRETVAL" ]; then
|
|||||||
else
|
else
|
||||||
echo "$TINPUT PASSED">>$TLOG ;
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit1.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit2.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit3.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit4.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" != "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit5.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit6.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit7.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|||||||
@ -0,0 +1,8 @@
|
|||||||
|
DROP DATABASE If EXISTS FOO;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE DATABASE FOO; -- implicit commit
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP DATABASE If EXISTS FOO;
|
||||||
|
COMMIT;
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
DROP EVENT IF EXISTS myevent;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE TABLE T1 (id integer);
|
||||||
|
CREATE EVENT myevent
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
|
||||||
|
DO
|
||||||
|
UPDATE t1 SET id = id + 1;
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
DROP EVENT IF EXISTS myevent;
|
||||||
|
COMMIT;
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE TABLE T1 (id integer); -- implicit commit
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
COMMIT;
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE TEMPORARY TABLE T1 (id integer); -- NO implicit commit
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from master
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
COMMIT;
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
USE test;
|
||||||
|
DROP PROCEDURE IF EXISTS simpleproc;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
DELIMITER //
|
||||||
|
CREATE PROCEDURE simpleproc (OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t;
|
||||||
|
END //
|
||||||
|
DELIMITER ;
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP PROCEDURE IF EXISTS simpleproc;
|
||||||
|
COMMIT;
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
USE test;
|
||||||
|
DROP FUNCTION IF EXISTS hello;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE FUNCTION hello (s CHAR(20))
|
||||||
|
RETURNS CHAR(50) DETERMINISTIC
|
||||||
|
RETURN CONCAT('Hello, ',s,'!'); -- implicit COMMIT
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP FUNCTION IF EXISTS hello;
|
||||||
|
COMMIT;
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
CREATE TABLE T1 (id integer); -- implicit commit
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE INDEX foo_t1 on T1 (id); -- implicit commit
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
COMMIT;
|
||||||
Reference in New Issue
Block a user