Condition Syntax¶
Real-Time API to register listeners for the create, update, delete and upsert events use a special argument called whereClause
. The argument is a string value which sets a condition which the created, updated or deleted objects must match for the real-time event to be delivered to the listeners. The Backendless Real-Time Database supports a subset of the general where clause syntax:
Condition |
Sample where clause |
---|---|
Value in a column equals a string literal. |
columnName = 'foo' |
Value in a column does not equal a string literal. |
columnName != 'foo' |
Value in a column is not assigned |
columnName is null |
Value in a column is assigned |
not(columnName is null) |
Value in a column of the Boolean type equals true |
boolColumnName = true |
Value in a column of the Boolean type equals false |
boolColumnName = false |
Value in a column of the Boolean type is null |
boolColumnName = null |
Value in a column contains a substring literal |
columnName LIKE '%foo%' |
Value in a column ends with a substring literal |
columnName LIKE '%foo' |
Value in a column starts with a substring literal |
columnName LIKE 'foo%' |
Value in a column is one of enumerated string literals. |
columnName IN ('value1', 'value2', 'value3) or columnName = 'value1' OR columnName = 'value2' or columnName = 'value3' |
Value in a column equals a numeric literal |
intColumnName = 21 doubleColumnName = 123.456 |
Value in a column does not equal a numeric literal |
intColumnName != 21 doubleColumnName != 123.456 |
Value in a column is greater than a numeric literal |
intColumnName > 21 |
Value in a column is greater than or equal a numeric literal |
intColumnName >= 21 |
Value in a column is less than a numeric literal |
intColumnName < 21 |
Value in a column is less than or equal a numeric literal |
intColumnName <= 21 |
Multiple expressions referencing same or different columns in the same table can be grouped using the AND
and OR
operators:
Condition |
Sample where clause |
---|---|
Value in the columnX equals a string literal OR value in the columnY equals a number literal. |
columnNameX = 'foo' OR columnNameY = 21 |
Value in the columnX equals a string literal AND value in the columnY equals a string literal. |
columnNameX = 'foo' AND columnNameY = 'bar' |
The evaluation priority of multiple expressions grouped with the AND
and OR
operators can be controlled with parenthesis. For example:
column1 = 'bar' OR (column1 = 'foo' AND column2 = 123) OR (column1 = 'abc' AND column3 = 777)
The syntax in the real-time system excludes the following, more complex scenarios:
- References to related tables and columns in the related tables
- statements with SubQuery
- aggregate functions
- inverted relations
However, it is possible to architect a solution to enable more complex whereClause
conditions using the following approach:
- For a complex
whereClause
scenario identify a smaller condition would be supported per the table above. - Add a conditional listener using the smaller
whereClause
. -
When an object is delivered for the create or update events, run an API request with the following
whereClause
:
complex-whereClause-from-step-1 AND receivedObject.objectId = 'objectId value of the received object'
-
If the query above returns the same object, it satisfies the more complex query.