本記事では、case作成時によく使用されるいくつかのコマンドについて説明します。
error
予想される失敗を検証します。一部のケースでは、SQLが失敗した場合を検証する必要があります。そのため、SQL文の前に --error エラーコードを追加できます。 --error の後ろには2種類の値を続けることができます。1つは error no、もう1つは sql state です。後者の場合は、S を接頭辞として付ける必要があります。
例:
--error 65535
create table t1(pk createtime primary key, a int);
--error SHY000
select a from t1 union select * from t2;
let
変数に値を代入します。値の型は数値または文字列にすることができます。
例:
let $var_name = value
inc/dec
inc は整数に対して + 1、dec は整数に対して - 1 を実行します。これは mysqltest が唯一サポートする演算です。
例:
inc $varname
dec $varname
eval
SQL文を実行し、変数の渡しをサポートします。
例:
eval insert intot1(i,c1,c256,dt,d) values(0,'1','$i','2012-10-10 12:00:00','2012-10-10');
echo
ターミナルに変数を出力します。結果ファイルにコメントを追加するためによく使用されます。
例:
echo $tableName;
--echo merge happens
alter system major freeze;
while
ループ制御を行います。
例:
let $cnt=10000;
while($cnt)
{
eval create table tt_$cnt (pk int primary key, c1 int);
dec $cnt;
}
select pk,b from t1;
disable_warnings/enable_warnings
サーバーでフィルタリングされていない警告を出力しない/出力する。デフォルトは enable_warnings です。
例:
--disable_warnings
real_sleep/sleep
スリープ時間です。
例:
real_sleep 20;
replace_column
クエリ結果の特定の列の値を置き換えます。一部の結果は実行時間に応じて変化します。例えば、create_timeやmodify_time型などです。比較するために、このコマンドを使用してこの値を一定の定数に置き換えることができます。
例:
--replace_column 2 searched
#一度に複数のマッチングが可能
--replace_column 1 create_time 2modify_time 3 tenant_id 6 zone 8 zone 7 zone
query_get_value(query,col_name,row_num)
query が返す結果の特定の行の特定の列の値を取得します。
例:
let $idx1 =query_get_value(select a.table_name from oceanbase.__all_table as a innerjoin (select * from oceanbase.__all_table where table_name='t1') b ona.data_table_id=b.table_id, table_name, 1);
let $idx2 =query_get_value(select a.table_name from oceanbase.__all_table as a innerjoin (select * from oceanbase.__all_table where table_name='t1') b ona.data_table_id=b.table_id, table_name, 2);
connect/disconnect/connection
接続を確立および切断するコマンドです。
session テスト時には、接続を確立または切断するために connect/disconnect の2つのコマンドを使用する可能性があります。connection は、SQL文を実行するために使用する接続を表します。複数の connection 間で切り替えることができ、トランザクションの並行処理によく使用されます。
disable_abort_on_error/enable_abort_on_error
デフォルトでは、enableの場合、SQL実行に失敗するとmysqltestは終了し、その後の処理は実行されず、rejectファイルも生成されません。disableコマンドを実行すると、SQL実行に失敗してもその後の処理を続行し、rejectファイルを生成します。
disable_query_log/enable_query_log
デフォルトでは、enableの場合、すべてのSQL文がresultファイルに記録されます。特定の状況(例えば、ループ処理などで特に多くのクエリが発生する場合)で、この機能を無効にしたい場合は、disableコマンドを呼び出すだけです。
例:
--disable_query_log
let $cnt5=74;
while ($cnt5)
{
eval drop table ttl$cnt5;
dec $cnt5;
}
--enable_query_log
if(exptr){do sql}
exptrが0以外の場合、大括弧内の部分を実行します。
注意
mysqltestはelse ifやelseを提供していません。また、古いバージョンのmysqltestでは、exptrが比較式であることをサポートしていません。
例:
if($valuenow== $valueorig)
{
--echo succeed
}
disable_result_log/enable_result_log
実行結果をresultファイルに書き込みません。デフォルトでは、すべてのSQL実行結果が結果ファイルに書き込まれます。結果ファイルが非常に長く、検証価値がない、または検証が不便な場合は、このコマンドを追加して、実行結果をresultファイルに書き込まないようにします。
例:
--disable_result_log
select count(*) from oceanbase.__all_server_table_stat where table_id>0;
select count(*) from oceanbase.__all_server_table_stat where table_id<=0;
select count(*) from oceanbase.__all_server_table_stat ;
--enable_result_log
exit
終了し、その後の処理は実行されません。これは、ループ処理やif判断でよく使用されます。