本記事では、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;
disableWarnings/enableWarnings
サーバーで未フィルタリングの警告を出力しない/出力するかどうかを設定します。デフォルトは enable_warnings です。
例:
--disable_warnings
real_sleep/sleep
待機時間です。
例:
real_sleep 20;
replace_column
クエリ結果の特定の列の値を置き換えます。一部の結果は実行時間に応じて変化します(例:createtime または modifytime 型)。比較のために、このコマンドを使用してその値を一定の定数に置き換えることができます。
例:
--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
接続を確立および切断するコマンドです。
セッションのテスト時に connect/disconnect の2つのコマンドを使用することがあります。これらは接続の確立または切断を行います。connection は SQL ステートメントを実行する接続を表し、複数の connection 間で切り替えることができます。トランザクションの並行処理でよく使用されます。
disable_abort_on_error/enableAbortOnError
デフォルトで enable の場合、SQLの実行に失敗するとmysqltestは終了し、その後の処理は実行されず、rejectファイルも生成されません。disableコマンドを実行すると、SQLの実行に失敗しても後続の処理を続行し、rejectファイルを生成します。
disable_query_log/enableQueryLog
デフォルトで 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/enableResultLog
実行結果を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判断で使用されます。