この章では、イベント処理言語(EPL)の演算子のリファレンスについて説明します。EPLは非推奨になったことに注意してください。新たな開発ではOracle Continuous Query Language (Oracle CQL)を使用する必要があります。
この章には次の項が含まれます:
EPLの算術および論理演算子の優先順位は、Java標準の算術および論理演算子の優先順位に従います。
以下の表に、使用可能な算術演算子の概要を示します。
以下の表に、使用可能な論理演算子と比較演算子の概要を示します。
以下の表に、使用可能な二項演算子の概要を示します。
中カッコ{
および}
は、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})
この節では、以下の2つの演算子について説明します。
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
は指定が無くても暗黙的に同じ場所に付与されるため、省略可能です。