Chapter 6. EQL Reference: Operators

Esper arithmatic and logical operator precedence follows Java standard arithmatic and logical operator precedence.

6.1. Arithmatic Operators

The below table outlines the arithmatic operators available.

Table 6.1. Syntax and results of arithmatic operators

OperatorDescription
+, -

As unary operators they denote a positive or negative expression. As binary operators they add or subtract.

*, /

Multiplication and division are binary operators.

%

Modulo binary operator.

6.2. Logical And Comparsion Operators

The below table outlines the logical and comparison operators available.

Table 6.2. Syntax and results of logical and comparison operators

OperatorDescription
NOT

Returns true if the following condition is false, returns false if it is true.

OR

Returns true if either component condition is true, returns false if both are false.

AND

Returns true if both component conditions are true, returns false if either is false.

=, !=, <, > <=, >=,

Comparison.

6.3. Concatenation Operators

The below table outlines the concatenation operators available.

Table 6.3. Syntax and results of concatenation operators

OperatorDescription
||

Concatenates character strings

6.4. Binary Operators

The below table outlines the binary operators available.

Table 6.4. Syntax and results of binary operators

OperatorDescription
&

Bitwise AND if both operands are numbers; conditional AND if both operands are boolean

|

Bitwise OR if both operands are numbers; conditional OR if both operands are boolean

^

Bitwise exclusive OR (XOR)

6.5. Array Definition Operator

The { and } curly braces are array definition operators following the Java array initialization syntax. Arrays can be useful to pass to user-defined functions or to select array data in a select clause.

Array definitions consist of zero or more expressions within curly braces. Any type of expression is allowed within array definitions including constants, arithmatic expressions or event properties. This is the syntax of an array definition:

{ [expression [,expression...]] }

Consider the next statement that returns an event property named actions. The engine populates the actions property as an array of java.lang.String values with a length of 2 elements. The first element of the array contains the observation property value and the second element the command property value of RFIDEvent events.

select {observation, command} as actions from RFIDEvent

The engine determines the array type based on the types returned by the expressions in the array definiton. For example, if all expressions in the array definition return integer values then the type of the array is java.lang.Integer[]. If the types returned by all expressions are compatible number types, such as integer and double values, the engine coerces the array element values and returns a suitable type, java.lang.Double[] in this example. The type of the array returned is Object[] if the types of expressions cannot be coerced or return object values. Null values can also be used in an array definition.

Arrays can come in handy for use as parameters to user-defined functions:

select * from RFIDEvent where Filter.myFilter(zone, {1,2,3})

6.6. The 'in' Keyword

The in keyword determines if a given value matches any value in a list. The syntax of the keyword is:

test_expression [not] in (expression [,expression...] )

The test_expression is any valid expression. The keyword is followed by a list of expressions to test for a match. The optional not keyword specifies that the result of the predicate be negated.

The result of an in expression is of type Boolean. If the value of test_expression is equal to any expression from the comma-separated list, the result value is true. Otherwise, the result value is false. All expressions must be of the same type as or a compatible type to test_expression.

The next example shows how the in keyword can be applied to select certain command types of RFID events:

select * from RFIDEvent where command in ('OBSERVATION', 'SIGNAL')

The statement is equivalent to:

select * from RFIDEvent where command = 'OBSERVATION' or command = 'SIGNAL'

6.7. The 'between' Keyword

The between keyword specifies a range to test. The syntax of the keyword is:

test_expression [not] between begin_expression and end_expression

The test_expression is any valid expression and is the expression to test for in the range defined by begin_expression and end_expression. The not keyword specifies that the result of the predicate be negated.

The result of a between expression is of type Boolean. If the value of test_expression is greater then or equal to the value of begin_expression and less than or equal to the value of end_expression, the result is true.

The next example shows how the between keyword can be used to select events with a price between 55 and 60 (inclusive).

select * from StockTickEvent where price between 55 and 60

The equivalent expression without between is:

select * from StockTickEvent where price >= 55 and price <= 60

And also equivalent to:

select * from StockTickEvent where price between 60 and 55

6.8. The 'like' Keyword

The like keyword provides standard SQL pattern matching. SQL pattern matching allows you to use '_' to match any single character and '%' to match an arbitrary number of characters (including zero characters). In Esper, SQL patterns are case-sensitive by default. The syntax of like is:

test_expression [not] like pattern_expression [escape string_literal]

The test_expression is any valid expression yielding a String-type or a numeric result. The optional not keyword specifies that the result of the predicate be negated. The like keyword is followed by any valid standard SQL pattern_expression yielding a String-typed result. The optional escape keyword signals the escape character to escape '_' and '%' values in the pattern.

The result of a like expression is of type Boolean. If the value of test_expression matches the pattern_expression, the result value is true. Otherwise, the result value is false.

An example for the like keyword is below.

select * from PersonLocationEvent where name like '%Jack%'

The escape character can be defined as follows. In this example the where-clause matches events where the suffix property is a single '_' character.

select * from PersonLocationEvent where suffix like '!_' escape '!'

6.9. The 'regexp' Keyword

The regexp keyword is a form of pattern matching based on regular expressions implemented through the Java java.util.regex package. The syntax of regexp is:

test_expression [not] regexp pattern_expression

The test_expression is any valid expression yielding a String-type or a numeric result. The optional not keyword specifies that the result of the predicate be negated. The regexp keyword is followed by any valid regular expression pattern_expression yielding a String-typed result.

The result of a regexp expression is of type Boolean. If the value of test_expression matches the regular expression pattern_expression, the result value is true. Otherwise, the result value is false.

An example for the regexp keyword is below.

select * from PersonLocationEvent where name regexp '*Jack*'