Defining actions in queries
In a query, after a
find statement, you can define one or more actions in the same form as in EPL monitors. See
Defining actions.
In a given query, an action that you define can be referenced from any expression in that query's find statement, including any statements in its find block. For example:
query CallingQueryActions {
parameters {
float distanceThreshold;
float period;
}
inputs {
Withdrawal() key account within period;
}
find Withdrawal: w1 -> Withdrawal: w2
where distance(w1.coords, w2.coords ) > distanceThreshold
{
logIncident( w1, w2 );
sendSmsAlertToCustomer(
getTelephoneNumber(w1), getAlertText(w1,w2) );
}
action distance( Coords a, Coords b) returns float {
integer x := a.x - b.x;
integer y := a.y – b.y;
return ( x*x + y*y ).sqrt();
}
action logIncident ( Withdrawal w, Withrawal w2 ) { … }
action getTelephoneNumber(Withdrawal w ) returns string {…}
action getAlertText ( Withdrawal w1, Withrawal w2 ) returns string { … }
action sendSmsAlertToCustomer( string telephoneNumber, string text ) { … }
}
Note: In a query, do not define an action whose name is
onload,
ondie,
onunload,
onBeginRecovery, or
onConcludeRecovery. In EPL monitors, actions with these names have special meaning. For more information, see
Monitor actions.