この節では、以下の項目について説明します。
中括弧 {
および }
は、Java 配列初期化構文に準拠する配列定義演算子です。配列は、ユーザ定義関数に渡す場合や、SELECT
句で配列データを選択する場合に便利です。
配列定義は中括弧で囲まれた 0 個以上の式から成ります。配列定義内では、定数、算術式、またはイベント プロパティなどの任意の型の式を使用できます。配列定義の構文は以下のとおりです。
{ [expression [,expression [,…]]] }
actions というイベント プロパティを返す次の文について考えます。エンジンでは actions
プロパティは 2 つの要素の長さを持つ java.lang.String
値の配列として作成されます。配列内の最初の要素には RFIDEvent
イベントの observation プロパティ値が含まれ、2 つ目の要素には command プロパティが含まれます。
SELECT {observation, command} AS actions FROM RFIDEvent RETAIN ALL
エンジンでは配列定義内の式で返される型に基づいて、配列の型を決定します。たとえば、配列定義内のすべての式で整数値が返される場合、配列の型は java.lang.Integer[]
です。すべての式で返される型が整数値や double 値のように互換性のある数値型の場合、エンジンでは配列要素の値が変換され、適切な型が返されます。この例では java.lang.Double[]
です。式の型が変換不能な場合、またはオブジェクト値が返された場合は、返される配列の型は Object[]
です。配列定義では null 値を使用できます。
ユーザ定義関数へのパラメータとして配列を使用すると便利です。
SELECT * FROM RFIDEvent RETAIN ALL WHERE Filter.myFilter(zone, {1,2,3})
IN
演算子は、指定の値がリスト内の任意の値と一致するかどうかを決定します。演算子の構文は以下のとおりです。
test_expression [NOT] IN (expression [,expression [,…]] )
test_expression
は任意の有効な式です。IN
キーワードの後に一致をテストする式のリストが続きます。省略可能な NOT
キーワードでは、述部の結果が否定されます。
IN
式の結果の型は Boolean
です。test_expression
の値がカンマ区切りのリスト内の任意の式と等しい場合、結果の値は true
です。それ以外の場合、結果の値は false
です。すべての式は test_expression
と同じ型または互換性のある型である必要があります。
次の例では、IN
キーワードを適用して RFIDEvents
の特定のコマンド タイプを選択する方法を示します。
SELECT * FROM RFIDEvent RETAIN ALL WHERE command IN ('OBSERVATION', 'SIGNAL')
この文は、次と同等です。
SELECT * FROM RFIDEvent RETAIN ALL WHERE command = 'OBSERVATION' OR symbol = 'SIGNAL'
BETWEEN
演算子はテストする範囲を指定します。演算子の構文は以下のとおりです。
test_expression [NOT] BETWEEN begin_expression AND end_expression
test_expression
は任意の有効な式であり、begin_expression
および end_expression
で定義された式に含まれる範囲に対してテストする式です。NOT
キーワードでは、述部の結果が否定されます。
BETWEEN
式の結果の型は Boolean
です。test_expression
の値が begin_expression
の値以上であり、かつ end_expression
の値以下である場合は、結果は true
になります。
次の例では、BETWEEN
キーワードを使用して価格が 55 ~ 60 (その値を含む) の範囲内にあるイベントを選択する方法を示します。
SELECT * FROM StockTickEvent RETAIN ALL WHERE price BETWEEN 55 AND 60
BETWEEN
キーワードを使用しない同等の式は、以下のとおりです。
SELECT * FROM StockTickEvent RETAIN ALL WHERE price >= 55 AND price <= 60
begin_expression
と end_expression
は順序を逆にすることもでき、クエリへの影響はありません。たとえば、次の例は上の例と同等です。
SELECT * FROM StockTickEvent RETAIN ALL WHERE price BETWEEN 60 AND 55
LIKE
演算子は標準の SQL パターン照合を提供します。SQL パターン照合では _
を使用して任意の 1 文字を照合し、%
を使用して任意の数の文字 (0 個の文字を含む) を照合できます。EPL では、デフォルトで SQL パターンの大文字と小文字が区別されます。LIKE
の構文は以下のとおりです。
test_expression [NOT] LIKE pattern_expression [ESCAPE string_literal]
test_expression
は String 型または数値の結果を生成する任意の有効な式です。省略可能な NOT
キーワードでは、述部の結果が否定されます。LIKE
キーワードの後に、String 型の結果を生成する任意の有効な標準の SQL pattern_expression
が続きます。省略可能な ESCAPE
キーワードは、パターン内の _
および %
値をエスケープするのに使用されるエスケープ文字を示します。
LIKE
式の結果の型は Boolean
です。test_expression
の値が pattern_expression
と一致する場合、結果の値は true
です。それ以外の場合、結果の値は false
です。LIKE
キーワードの例を以下に示します。
SELECT * FROM PersonLocationEvent RETAIN ALL WHERE name LIKE '%Jack%'
次の例では、WHERE
句で suffix
プロパティが 1 つの _
文字であるイベントが照合されます。
SELECT * FROM PersonLocationEvent RETAIN ALL WHERE suffix LIKE '!_' ESCAPE '!'
REGEXP
演算子は Java の java.util.regex
パッケージを通じて実装されている正規表現に基づいたパターン照合の形式です。REGEXP
の構文は以下のとおりです。
test_expression [NOT] REGEXP pattern_expression
test_expression
は String 型または数値の結果を生成する任意の有効な式です。省略可能な NOT
キーワードでは、述部の結果が否定されます。REGEXP
キーワードの後に、String 型の結果を生成する任意の有効な正規表現 pattern_expression
が続きます。
REGEXP
式の結果の型は Boolean
です。test_expression
の値が正規表現 pattern_expression
と一致する場合、結果の値は true
です。それ以外の場合、結果の値は false
です。
REGEXP
演算子の例を以下に示します。
SELECT * FROM PersonLocationEvent RETAIN ALL WHERE name REGEXP '*Jack*'
FOLLOWED BY
演算子では、まず左側の式が true になる必要があり、その場合にのみ右側の式で一致するイベントが評価されます。
たとえば、次のパターンではイベント A が検索され、これが検出された場合にイベント B が検索されます。
A FOLLOWED BY B
イベント A
の直後にイベント B
が続く必要はありません。イベント A
とイベント B
の間で他のイベントが発生する場合でも、この式は true
に評価されます。この動作が適切でない場合は、NOT
演算子を使用できます。
WITHIN
修飾子の動作はストップウォッチと同じです。関連付けられているパターン式が指定の時間内に true にならなかった場合、エンジンでは false として評価されます。WITHIN
修飾子は、節 2.4.4「時間間隔の指定」で指定されているとおり、時間間隔をパラメータとして受け取ります。
このパターンは、文の作成後 5 秒以内に A イベントが到着すると発動します。
A WITHIN 5 seconds
このパターンは 5 秒以内に到着するすべての A イベントで発動します。
EVERY
演算子は、EVERY
キーワードで修飾されたサブ式が true または false に評価された場合に、パターンのサブ式を再度開始するよう通知します。EVERY
修飾子を指定しない場合は、NOT
式の内部に含まれていないパターン内の最初のイベント ストリームのソースに暗黙的な EVERY
演算子が修飾子として挿入されます。
EVERY
演算子は包含されているパターンのサブ式のファクトリのように動作します。含まれているパターンのサブ式が発動し、イベントのチェックを終了すると、EVERY
によって同じイベントまたはイベント セットの以降の発生をリスンする新しいパターンのサブ式が開始されます。
EVERY
演算子内のパターンのサブ式が true になるたびに、エンジンでは新しいアクティブなサブ式が開始され、それ以降のイベント、またはパターンのサブ式に一致するタイミング条件が参照されます。
このパターンは、A イベントの後に B イベントが続いた場合に発動し、B イベント後に再び照合する試みを続行します。
EVERY (A FOLLOWED BY B)
このパターンも A イベントの後に B イベントが続いた場合に発動しますが、A イベント後に再び照合する試みを続行します。
EVERY A FOLLOWED BY B
このパターンの EVERY
は指定が無くても暗黙的に同じ場所に付与されるため、省略可能です。