Predicate lpar Expressions
The list-type lpar LPAR_LST_PREDICATE contains a predicate expression consisting of one, two, or three elements. Single-element predicates consist solely of a predicate component, which is either a fixed value, a reference to a record field, or another (nested) predicate expression. The following lpars are valid predicate components:
|
Lpar Id |
Lpar contents |
|
LPAR_BOOL_PREDVALUE |
Fixed boolean value |
|
LPAR_INT_PREDVALUE |
Fixed integer value |
|
LPAR_DBL_PREDVALUE |
Fixed double value |
|
LPAR_STR_PREDVALUE |
Fixed string value |
|
LPAR_BLK_PREDVALUE |
Fixed byte block value |
|
LPAR_BLKARR_PREDVALUE |
Array of fixed byte block values |
|
LPAR_INT_PREDFIELD |
Reference to a record field by number |
|
LPAR_STR_PREDFIELD |
Reference to a record field by name |
|
LPAR_LST_PREDICATE |
Another predicate expression |
Two-element predicate expressions consist of an LPAR_INT_PREDOP as the first element, and any predicate component as the second element. The value of the LPAR_INT_PREDOP must be one of the following:
|
LPAR_INT_PREDOP value |
|
|
PRED_OP_ABS |
Absolute value of int or dbl |
|
PRED_OP_MINUS |
Arithmetic inverse of int or dbl |
|
PRED_OP_NOT |
Logical inverse of bool |
|
PRED_OP_TOINT |
Convert string/block/int/dbl/date/date-time to int |
|
PRED_OP_TOBLK |
Convert any type to blk |
|
PRED_OP_TODBL |
Convert string/block/int/dbl/date/date-time to dbl |
|
PRED_OP_TODATE |
Convert string/block/int/dbl/date/date-time to date |
|
PRED_OP_TODATEEU |
as above except it expects European day/month/year format |
|
PRED_OP_TODATET |
Convert string/block/int/dbl/date/date-time to date-time |
|
PRED_OP_TODATEEUT |
as above except it expects European day/month/year format |
|
PRED_OP_TOKENIZE |
Convert a blk or string into a block array of white space separated words. |
|
PRED_OP_ARGS_CREATE |
Create an argument list with one element. For information on argument lists, see Predicate Functions and Argument Lists. |
|
PRED_OP_FUNC_IF |
Conditional expression. For more details on this predicate function, see Predicate Functions and Argument Lists. |
|
PRED_OP_FUNC_GEOD |
Compute the distance between two points. For more details on this predicate function, see Predicate Functions and Argument Lists. |
|
PRED_OP_FUNC_TOSCORE |
Normalize a value into a 0.0 to 1.0 score value. For more details on this predicate function, see Predicate Functions and Argument Lists. |
Three-element predicate expressions consist of any predicate component as the first element, an LPAR_INT_PREDOP as the second element, and any predicate component as the third element. The value of the LPAR_INT_PREDOP must be one of the following:
|
LPAR_INT_PREDOP value |
|
|
PRED_OP_PLUS |
Arithmetic addition of ints, doubles, concatenate strings, blocks |
|
PRED_OP_MINUS |
Arithmetic subtraction of ints or doubles |
|
PRED_OP_TIMES |
Arithmetic multiplication of ints or doubles |
|
PRED_OP_DIVIDEDBY |
Arithmetic division of ints or doubles |
|
PRED_OP_TOTHE |
Arithmetic exponentiation of ints or doubles |
|
PRED_OP_AND |
Logical and of bools |
|
PRED_OP_OR |
Logical or of bools |
|
PRED_OP_EQUALS |
Arithmetic or string comparison of ints, dbls, strs, blks, dates |
|
PRED_OP_iEQUALS |
Letter case insensitive comparison of strs or blks |
|
PRED_OP_LESSTHAN |
Arithmetic or string comparison of ints, dbls, strs, blks, dates |
|
PRED_OP_iLESSTHAN |
Letter case insensitive comparison of strs or blks |
|
PRED_OP_LESSTHANOREQ |
Arithmetic or string comparison of ints, dbls, strs, blks, dates |
|
PRED_OP_iLESSTHANOREQ |
Letter case insensitive comparison of strs or blks |
|
PRED_OP_GREATERTHAN |
|
|
PRED_OP_iGREATERTHAN |
Letter case insensitive comparison of strs or blks |
|
PRED_OP_GREATERTHANOREQ |
Arithmetic or string comparison of ints, dbls, strs, blks, dates |
|
PRED_OP_iGREATERTHANOREQ |
Letter case insensitive comparison of strs or blks |
|
PRED_OP_ISIN |
Substring match of strings or blks |
|
PRED_OP_iISIN |
Letter case insensitive substring match |
|
PRED_OP_SUPERSET |
Set comparison of blkarrs |
|
PRED_OP_SUBSET |
Set comparison of blkarrs |
|
PRED_OP_TOKENIZE |
Split a block or string into words using a specified separator |
|
PRED_OP_ARGS_APPEND |
Append a value to an argument list. See Predicate Functions and Argument Lists for more details. |
| PRED_OP_SW | Check if one string starts with another |
| PRED_OP_iSW | Check if one string starts with another (case-insensitive) |
| PRED_OP_EW | Check if one string ends with another |
| PRED_OP_iEW | Check if one string ends with another (case-insensitive) |
| PRED_OP_LIKE | Check if one string is “like” another, similar to SQL, takes percent (%) as wildcard matching zero or more characters, and underscore (_) as matching exactly one character. |
| PRED_OP_iLIKE | As PRED_OP_LIKE, but case-insensitive. |
| PRED_OP_REGEX_MATCH | Check if one string “matches” another as a regular expression. |
| PRED_OP_iREGEX_MATCH | As PRED_OP_REGEX_MATCH, but case-insensitive. |
| PRED_OP_ISBLANK | Check if a value consists only white-space and punctuation. |
Each of these operators expects specific value types as arguments; these are validated when the TIBCO Patterns server receives the expression as part of search command. A DVK_ERR_PARAMVAL error is returned if the expression is invalid because the arguments are of an invalid type. But note that many operators accept a number of different argument types. For instance, the PRED_OP_PLUS operator accepts an integer and double values.
To aid the construction of two and three component predicate lpars, two additional DevKit functions are available:
lpar_t lpar_create_predicate2( int operator, lpar_t predicate );
lpar_t lpar_create_predicate3( lpar_t left, int operator,
lpar_t right );
To create a predicate to search only those records in a database dated more recently than January 3, 2002, where the date is stored in a field named "Creation Date" you could use the following:
lpar_t predicate;
predicate = lpar_create_predicate3(
lpar_create_predicate2(
PRED_OP_TODATE,
lpar_create_str(LPAR_STR_PREDFIELD,"Creation Date")),
PRED_OP_GREATERTHAN,
lpar_create_predicate2(
PRED_OP_TODATE,
lpar_create_str(LPAR_STR_PREDVALUE,"January 3, 2002")));
The TODATE operator accepts the same date formats as the DATE field type (see The TIBCO Patterns Table) Dates hold only date values, you might specify a time value but it is ignored. If you wish to have resolution down to the second you can use the TODATET operator which keeps both time and date. Dates of the form xx/xx/xx are interpreted in the U.S. style (mm/dd/yy), not the European style (dd/mm/yy) unless the TODATEEU or TODATEEUT operator is used.
The range of valid dates is from 100 AD (years below 100 are interpreted as the last two digits of the current century if less than or equal to the current year, or the last two digits of the previous century if greater than the current year) to 9999 AD.
If the Creation Date field was specified as a LKT_FLD_TYPE_DATE field when the database was created then it is not necessary to convert the field to a date value as it is already stored as a date. The above example then becomes:
lpar_t predicate;
predicate = lpar_create_predicate3(
lpar_create_str(LPAR_STR_PREDFIELD, "Creation Date"),
PRED_OP_GREATERTHAN,
lpar_create_predicate2(
PRED_OP_TODATE,
lpar_create_str(LPAR_STR_PREDVALUE,"1/3/2002")));
See The TIBCO Patterns Table for an explanation of field types.
Text comparisons can be performed against the raw string values or using the letter case insensitive operators. These are new with release 4.2. They replace the old TOUPPER and TOLOWER operators. With Unicode support TOUPPER and TOLOWER are both insufficient and ambiguous. The case insensitive comparison operators apply the Unicode standard case folding and normalization rules before comparing the strings. These include stripping diacritic marks and other letter normalization operations. Note that the LESSTHAN, GREATERTHAN operators are based on the Unicode code point values. They DO NOT apply any language specific lexical ordering rules.