このセクションでは、メッセージ レスポンダー ツールおよび SQL レスポンダー ツールで値の照合に使用される条件式について説明します。このセクションの内容: 条件式は、以下の照合を行うための簡潔な構文です。 条件式の構文は、文字列や数字の比較、およびワイルドカードや正規表現を使用した照合をサポートします。この構文は次の目的で使用されます。 Virtualize はレスポンダーが提供した入力値に対して条件式を評価します。 条件式が true を返す場合に値は一致したと考えられます。 構文とその有用性を理解するために、簡単な SQL レスポンダーで考えてみましょう。 Virtualize がデータベーストラフィックの記録中に次の 2 つの SQL クエリーをキャプチャしたと仮定します。 これらの SQL 文は両方とも次の SQLレスポンダーの SQL クエリーテンプレートに対応します。 記録されたデータを使用して、Virtualize は 1 つのクエリー テンプレートと次のパラメーター判定条件のテーブルを生成しました。興味深いのは、 SQL 文の WHERE 節の値に対応する "yearCreated" と "category"列です。 構成されたように、SQL レスポンダーは Virtualize が記録中にキャプチャした 2 つの SQL 文のみに結果セットを返すことができます。Virtualize は、記録中に見つけた値に正確に一致するようにパラメーター判定条件を構成します。レスポンダーは、 2005 年に作成された widget の "tool-metal" の結果セットを持っていません。また、 2011 年に作成された widgetの "construction-molding" に分類されたもの以外の結果セットも持っていません。 すべての "tool-metal" widget をレスポンダーで処理したい場合は、作成された年で widget をグループ化することで実施可能です。 2008 年より前に作成されたすべての "tool-metal" widget に結果セットを 1 つ返し、2008 年以降に作成されたすべての "tool-metal" widget に別の結果セット (Virtualize が記録中にキャプチャしたもの ) を返すには、"yearCreated" パラメーターに数値比較を使用します。2008 年より前に作成された widget のために、レスポンダーに別の結果セットを手動で追加する必要があります。最終的に、パラメーター判定条件テーブルは次のようになります。 "category"が "tool-metal" である行の "yearCreated" 列のエントリに注意してください。両方のエントリが大括弧で囲まれています。大括弧は、エントリをリテラル文字列として照合するのではなく、より高性能な応答条件として扱われるべきである、ということを示します。大括弧内の式は true または false に評価されます。[< 2008] という式は入力値が 2008 より小さい数の場合に true を返します。入力値は着信 SQL 文から取得されます。 SQL レスポンダーは SQL をパースし、クエリーテンプレートの "${yearCreated}" に対応する値を見つけて、その値を [< 2008] 式に入力値として提供します。 ほとんどのプログラミング言語の小なりの比較は、variable1 < variable2 のように、小なり演算子の両側に値があります。条件式では、演算子の左に値がありません。演算子の左の値は暗黙的に入力値です。 [< 2008] 式は入力値が 2008 より小さいかをチェックし、[>= 2008] は入力値が 2008 以上かをチェックします。 < や >= に加えて、条件式は <=、 >、 == (等しい)、および != (等しくない) をサポートしています。数値の比較にも文字列の比較にも同じ比較演算子を使用できます。 パラメーター判定条件テーブルの最初の 2 行では、 "category"の値は tool-metal です。tool-metal という式は [== "tool-metal"] という式と同等です。簡単にするために、 Virtualize は式が "[" 文字で始まらない限り、式をリテラル文字列の照合に使用します。副作用として、 "[" で始まるリテラル文字列を照合するには、明示的に == 演算子を使用する必要があります。"[xyz"というリテラル文字列を照合するには、[== "[xyz"] という式を使用する必要があります。 数値と文字列に使用できる比較演算子に加えて、Virtualize は文字列を分析するために更なる演算子をサポートします。2011 年に作成され、categoryが "construction-" で始まるすべての widget に別の結果セットを使用したいと仮定します。これを行うには、レスポンダーに別の結果セットを追加し、 "category" パラメーターに [like "construction-*"] という式を使用します。この式は、construction-support や construction-something-misc といった入力に一致します。like 演算子はワイルドカードとして * および ? を使用します。* ワイルドカードは 0 以上の文字に一致します。? ワイルドカードは正確に 1 文字に一致します。 category が "circuit" または "circuit-" の後に任意の文字列が続くもので、かつ 2011 年に作成されたすべての widget に別の結果セットを使用したいと仮定します。"circuitbreaker" のような category は対象外です。これを行うには、レスポンダーに別の結果セットを追加して、正規表現で "category" パラメーターを照合するようにします。条件式 [=~ /^circuit(-.+)?$/] を使用できます。正規表現は circuit、または circuit-electric のように circuit の後に - と 1 つ以上の文字が続くことを照合します。 パラメーター判定条件テーブルは次のようになります。 ユーザーが使用しているクエリーテンプレートに一致するどんな SQL 文にも、SQL レスポンダーが結果セットを返すように設定したいと仮定します。 他のパラメーター条件には一致せず、 2000 年から 2007 年の間に作成された widget 用に結果セットを 1 つ用意します。他の一致しない widget には、最終的な結果セットを用意します。 2000 から 2007 の間の "yearCreated" に一致させるには、 2 つの数値比較演算子と and 演算子を組み合わせて使用します。 この式は、次の範囲に一致します: [>= 2000 および <= 2007]。and 演算子は 2 つの条件式を結合し、両方の式が true を返すときに限り true を返します。or 演算子も同じような動きをしますが、どちらか 1 つまたは両方の式が true を返すときに限り true を返します。 "category" パラメーターのどんな値にも一致させるには、条件式 [*] を使用できます。条件式 [*] はどんな入力にも一致します。あるいは、[] 式を使用できます。[] は条件がないことを意味するので、true と評価されます。より意味が明確なので Virtualize は [*] をサポートします。空の式 (パラメーター判定条件のテーブルで空のテーブルセルとして表現される) はどんな入力にも一致しません。むしろ、文字列の長さが 0 の入力に一致します。 最後に、 widget に一致しなかったものに一致させるには、最終的な結果セットを判定テーブルの最終行として追加します。 "yearCreated" と "category" パラメーターそれぞれに [*] 式を使用します。 パラメーター判定条件テーブルは次のようになります。 データソース応答条件の設定は SQL レスポンダーの構成とは異なりますが、 Virtualize のデータソース応答条件は同じ条件式の構文をサポートします。 条件式はリテラル文字列に一致させるか、より高度な式かのいずれかに解釈されます。 式が [ で始まらない場合、Virtualize は式をリテラル文字列に一致させるものと解釈します。[ で始まり、] で終わらない式は不正な式なのでパースされません。 大括弧で囲まれた式は、入力値に対して評価をするいくつかの演算子 (比較演算子、like 演算子および正規表現を使用した文字列のパターンマッチング) および条件式を結合するための boolean 演算子をサポートしています。 Virtualize は入力値に対して式を評価します。入力値は数値または文字列のいずれかを使用できます。各条件は true または false に評価されます。true は照合に成功したことを示します。 Virtualize は数値の比較にも文字列の比較にも使用できる、いくつかの比較演算子をサポートします。サポートしている演算子は次のとおりです。 たとえば、数値と推定される入力が 57 より小さいことをチェックするには、[< 57] を使用します。入力値は暗黙的に左オペランドです。右オペランドは入力値と比較する値です。 文字列は二重引用符で囲みます。例: Virtualize は文字列を辞書順に比較します。たとえば、 A < AA < Z < Zoo < a < aa < z < zoo です。比較では大文字と小文字が区別されることに注意してください。Virtualize は各文字の Unicode 値を比較します。2 つの文字列があり、1 つの文字列の方がもう 1 つの文字列より長いこと以外 2 つの文字列が同じであるとしたら、短い文字列は長い文字列より小さいです。 二重引用符内の文字列は、次のエスケープシーケンスを含むことができます。 Java は同じエスケープ シーケンスをサポートします。一重引用符のエスケープシーケンス \' は厳密には必要ありません。しかし、Java 文字列の構文との互換性のために提供されています。 数値と文字列の扱いは異なります。式 [== "30"] は 30 という入力文字列には一致しますが、30.0 という入力文字列には一致しません。しかし、[== 30] は両方の入力文字列に一致します。右オペランドと入力値の両方とも、数値か文字列のいずれかのタイプがあります。両方とも数値の場合、Virtualize は数値比較を実行します。どちらか一方だけが数値の場合、Virtualize はもう一方のオペランドを数値に変換しようと試みます。成功した場合、Virtualize は数値比較を実行します。失敗した場合は、数値のオペランドを文字列に変換し、文字列比較を実行します。 二重引用符の有無によって、右オペランドが数値かどうか判断されます。二重引用符の有無によって、右オペランドが数値かどうか判断されます。 SQL レスポンダーは SQL 文をパースすることで入力値のタイプを判断します。 SQL 文内の一重引用符内の値は文字列です。一重引用符内にない数字は数値です。メッセージレスポンダーのデータソース応答条件では、すべての入力値が文字列となります。数値比較を行うためには、右オペランドが数字である必要があります。 次のテーブルは、比較演算子の使用方法と一致する入力値を表します。 数値または文字列: 55, 55.0 数値: 55, 55.0 文字列: 55 数値: 60 文字列: 55.0, 60 数値: 56, 56.0, 3.1e24 数値: 55, 55.0, 10 文字列: 55, 050, 3.1e24, abc 構文をさらに詳しく説明するために、次のテーブルではいくつかのパース不可能な式を表します。 比較演算子に加えて、より高度な文字列照合を行うために like 演算子と正規表現を使用できます。 like 演算子は、[like "alpha?beta*"] 形式の式を使用した簡単なパターン マッチングをサポートします。ワイルドカード文字 ? は任意の 1 文字に一致します。ワイルドカード文字 * は 1 つ以上の文字に一致します。入力文字が数値の場合、 Virtualize は入力を文字列に変換します。 正規表現は、 [=~ /pat-tern/] の形式の式を使用して、より強力なパターン マッチングをサポートします。入力文字が数値の場合、 Virtualize は入力を文字列に変換します。Perl と同様に、 =~ は正規表現による比較を表し、パターン自身はスラッシュで囲まれます。Virtualize は Java の正規表現で使用されるものと同じパターン構文を使用します。Java のパターン構文に関する詳細なドキュメントについては、Javadoc で java.util.regex.Pattern クラスを参照してください。Java のパターン構文と異なる点は、 / 文字に一致することです。そのため、バックスラッシュでエスケープする必要があります。 入力文字列のいくつかの部分文字列がパターンに一致する場合、正規表現による比較は true を返します。abc123 や 123abc でははく abc に一致させたい場合、[=~ /abc/ ] ではなく [=~ /^abc$/] を使用する必要があります。^ および $ はそれぞれ文字列の最初と最後を照合します。 次のテーブルは、比較演算子の使用方法と一致する入力値を表します。 Virtualize は and および or 演算子による条件式の結合をサポートします。たとえば、入力値が 0 から 9 の間の場合、[>= 0 and <= 9] は true を返します。 and 演算子は or 演算子よりも優先順位が高くなります。式を囲むのに括弧を使用できます。[like "*b*" or like "*a*" and like "*z*"] という式は [like "*b*" or (like "*a*" and like "*z*")] と同等です。 演算子名は大文字と小文字を区別します。次の式は AND が有効な演算子ではないため、パースエラーとなります: [> 0 AND < 10] 次のテーブルは、比較演算子の使用方法と一致する入力値を表します。 メッセージ レスポンダーでデータソース応答条件を設定する一般的なプロセス (リクエスト内の値をデータソース列の値に対して比較するように構成) については、「[データソース応答条件] タブ」 に記述しています。条件式の概要
SQL レスポンダーでの条件式の使用
select id, name from widget where yearCreated = 2008 and category = 'tool-metal'
select id, name from widget where yearCreated = 2011 and category = 'construction-molding'
select id, name from widget where yearCreated = ${yearCreated} and category = ${category}
yearCreated category ResultSet File Response Time (ms) 2008 tool-metal database_widgets\file1.csv 0 2011 construction-molding database_widgets\file2.csv 0 yearCreated category ResultSet File Response Response [< 2008] tool-metal database_widgets\file3.csv 0 [>= 2008] tool-metal database_widgets\file1.csv 0 2011 construction-molding database_widgets\file2.csv 0 yearCreated category ResultSet File Response Time (ms) [< 2008] tool-metal database_widgets\file3.csv 0 [>= 2008] tool-metal database_widgets\file1.csv 0 2011 construction-molding database_widgets\file2.csv 0 2011 [like "construction-*"] database_widgets\file4.csv 0 2011 [=~ /^circuit(-.+)?$/] database_widgets\file5.csv 0 yearCreated category ResultSet File Response Time (ms) [< 2008] tool-metal database_widgets\file3.csv 0 [>= 2008] tool-metal database_widgets\file1.csv 0 2011 construction-molding database_widgets\file2.csv 0 2011 [like "construction-*"] database_widgets\file4.csv 0 2011 [=~ /^circuit(-.+)?$/] database_widgets\file5.csv 0 [>= 2000 and <= 2007] [*] database_widgets\file6.csv 0 [*] [*] database_widgets\file7.csv 0 条件式の構文
比較演算子
演算子 意味 <= 小なりまたは等しい < 小なり == 等しい >= 大なりまたは等しい > 大なり != 等しくない [< "xyz"]
abc
という式は、次の式と同等です。 [== "abc"]
エスケープシーケンス 意味 ASCII 文字コード (16進法) \b バックスペース 0x08 \t 水平タブ 0x09 \n 改行 0x0A \f フォームフィード 0x0C \r キャリッジリターン 0x0D \" 二重引用符 0x22 \' 一重引用符 0x27 \\ バックスラッシュ文字 0x5C 式 一致 不一致 [== 55] 数値または文字列: 60 [> 55] 数値または文字列: 56, 56.0, 3.1e24 数値または文字列: 55, 10 [== "55"] [> "55"]
文字列: 56, 55.0[== "greetings"] greetings xyz greetings greetings xyz [>= "abc"] abc, abca, greetings ABC, ab, 11 [== "this is \"quoted\""] this is "quoted" this is \"quoted\" this is "quoted" this is "quoted" this is \"quoted\" パース不可能な式 パースエラー [xyz 括弧で始まるリテラル文字列です。== 演算子を使用してください。 [55] 演算子がありません。== 演算子を使用してください。 ["something"] 演算子がありません。== 演算子を使用してください。 [== 55 右大括弧がありません。 文字列照合
式 一致 不一致 [like "a*b"] ab, axb, axxb,axyzb abx [like "a?b"] axb, aab, abb ab, axxb, axyzb [=~ /^a.*b$/] ab, axb, axxb,axyzb abx [=~ /^a.b$/] axb, aab, abb ab, axxb, axyzb [=~ /^id-\d+$/] id-1, id-456 id-, id-xyz, id-2b [=~ /beta/] beta, alpha-beta, alpha-beta-gamma alpha, BETA [=~ /^beta$/] beta alpha, BETA, alpha-beta, alpha-beta-gamma [=~ /(?i)^beta$/] beta, BETA alpha, alpha-beta, alpha-beta-gamma [=~ /^.*\/.*$/] alpha/beta, / alpha, alpha\beta [=~ /^.*\\.*$/] alpha\beta, \ alpha, alpha/beta [=~ /^a\Q.*\Eb$/] a.*b ab, axb, axxb, axyzb, abx 複合式
式 一致 不一致 [>= 0 and <= 9] 文字列または数値: 0, 3.14159, 5, 9.0 文字列または数値: -1, 10.12, 5.7e+12 [like "*b*" or like "*a*" and like "*z*"] b, mnb, ba, bz, za a, z [like "*b*" or (like "*a*" and like "*z*")] b, mnb, ba, bz, za a, z [(like "*b*" or like "*a*") and like "*z*"] bz, za, zaabxyz a, b, z, mnb, ba [(((== "abc")))] abc xyz メッセージ レスポンダーでの条件式の使用
Overview
Content Tools