150 lines
3.0 KiB
Plaintext
150 lines
3.0 KiB
Plaintext
|
|
## Test polarx rpc template
|
|
|
|
--let $TEMP_FILE = polarx_rpc_template
|
|
|
|
--source include/polarx_rpc_preamble.inc
|
|
--source include/polarx_rpc_create_user.inc
|
|
## Test starts here
|
|
--write_file $MYSQL_TMP_DIR/$TEMP_FILE.tmp
|
|
|
|
## do sth with sql in auto commit session
|
|
-->switchsid -1
|
|
-->sql
|
|
drop schema if exists xtest;
|
|
create schema xtest;
|
|
use xtest;
|
|
create table mytable (pk int primary key auto_increment, data varchar(100));
|
|
-->endsql
|
|
|
|
|
|
## do sth with polarx_rpc msg
|
|
|
|
## switch Session ID to 1
|
|
-->switchsid 1
|
|
|
|
## first start new session
|
|
Polarx.Session.NewSession {
|
|
}
|
|
## expect Polarx.Ok
|
|
-->recvok
|
|
|
|
Polarx.Sql.StmtExecute {
|
|
stmt: "insert into mytable values (DEFAULT, \'one\')"
|
|
schema_name: "xtest"
|
|
}
|
|
## expect Polarx.Sql.StmtExecuteOk
|
|
-->recvresult
|
|
|
|
Polarx.Sql.StmtExecute {
|
|
stmt: "insert into mytable values (DEFAULT, \'two\')"
|
|
}
|
|
## expect Polarx.Sql.StmtExecuteOk
|
|
-->recvresult
|
|
|
|
Polarx.Sql.StmtExecute {
|
|
stmt: "insert into mytable values (DEFAULT, \'three\')"
|
|
}
|
|
## expect Polarx.Sql.StmtExecuteOk
|
|
-->recvresult
|
|
|
|
## switch to another session and lock the record
|
|
-->switchsid 2
|
|
|
|
Polarx.Session.NewSession {
|
|
}
|
|
## expect Polarx.Ok
|
|
-->recvok
|
|
|
|
Polarx.Sql.StmtExecute {
|
|
stmt: "begin"
|
|
schema_name: "xtest"
|
|
token: 10000
|
|
}
|
|
## expect Polarx.Sql.StmtExecuteOk
|
|
-->recvresult
|
|
|
|
Polarx.Sql.StmtExecute {
|
|
stmt: "select data from mytable where pk=1 for update"
|
|
token: 10000
|
|
}
|
|
## expect Polarx.Sql.StmtExecuteOk
|
|
-->recvresult
|
|
|
|
## Now data is locked, switch back to session 1 and read.
|
|
-->switchsid 1
|
|
|
|
## Test pipeline and cancel, enqueue blocking query first.
|
|
Polarx.Sql.StmtExecute {
|
|
stmt: "select data from mytable where pk=1 for update"
|
|
token: 10000
|
|
}
|
|
|
|
## Then enqueue normal query.
|
|
Polarx.Sql.StmtExecute {
|
|
stmt: "select * from mytable"
|
|
token: 10000
|
|
}
|
|
|
|
## sleep to make sure lock wait happens
|
|
-->sleep 0.1
|
|
|
|
## Do cancel on first request.
|
|
Polarx.Session.KillSession {
|
|
type: QUERY
|
|
x_session_id: 1
|
|
}
|
|
|
|
## expect Notice warning Query execution was interrupted(5.7 will get this)
|
|
-->recvtype Polarx.Notice.Frame
|
|
## expect Notice warning Got error 168 from storage engine(5.7 will get this)
|
|
-->recvtype Polarx.Notice.Frame
|
|
-->recverror ER_QUERY_INTERRUPTED
|
|
|
|
## But next request will continue.
|
|
|
|
-->recvtype Polarx.Resultset.ColumnMetaData
|
|
-->recvtype Polarx.Resultset.ColumnMetaData
|
|
-->recvtype Polarx.Resultset.Row
|
|
-->recvtype Polarx.Resultset.Row
|
|
-->recvtype Polarx.Resultset.Row
|
|
-->recvtype Polarx.Resultset.FetchDone
|
|
-->recvtype Polarx.Notice.Frame
|
|
-->recvtype Polarx.Sql.StmtExecuteOk
|
|
|
|
## close session.
|
|
Polarx.Session.Close {
|
|
}
|
|
## expect Polarx.Ok
|
|
-->recvok
|
|
|
|
## Close session 2.
|
|
-->switchsid 2
|
|
|
|
Polarx.Sql.StmtExecute {
|
|
stmt: "rollback"
|
|
token: 10000
|
|
}
|
|
## expect Polarx.Sql.StmtExecuteOk
|
|
-->recvresult
|
|
|
|
Polarx.Session.Close {
|
|
}
|
|
## expect Polarx.Ok
|
|
-->recvok
|
|
|
|
|
|
## switch back to auto commit session and cleanup
|
|
-->switchsid -1
|
|
-->sql
|
|
drop schema if exists xtest;
|
|
-->endsql
|
|
|
|
EOF
|
|
|
|
--exec $POLARX_RPC_TEST -upolarx_root --password='' --file=$MYSQL_TMP_DIR/$TEMP_FILE.tmp 2>&1
|
|
|
|
## Cleanup
|
|
--remove_file $MYSQL_TMP_DIR/$TEMP_FILE.tmp
|
|
--source include/polarx_rpc_drop_user.inc
|