eXtremeDB provides a library of C analytics functions that operate on
sequences. These functions use the specialized type
mco_seq_iterator_tas the "handle" to manage sequence fields. They all have a result sequence iterator as their first argument that receives the result of the function after applying the other function arguments.
These functions operate on specific sequence types. For example the binary function
mco_seq_add_int4()will add two sequences with elements of type
int4. To simplify the documentation we use the term
TYPEas a placeholder for one of the following actual types:
Signed one-byte integer
int2 Signed two-byte integer int4 Signed four-byte integer int8 Signed eight-byte integer uint1
Unsigned one-byte integer
uint2 Unsigned two-byte integer uint4 Unsigned four-byte integer uint8 Unsigned eight-byte integer float Four-byte floating point double Eight-byte floating point datetime Eight-byte datetime
So the function signature
mco_seq_add_TYPE()refers to the sequence "add" function
, mco_seq_add_double(), or
mco_seq_add_datetime(); i.e. for elements of any of the above types.
To document the operational specifics and usage, these functions are divided into "categories". Please see the page Analytics Functions by Category to view explanations and examples of the individual functions.
It is useful to note that all of the public C sequence functions have SQL equivalents. These SQL equivalents return the result sequence which makes it possible to express a "pipeline" of SQL functions in a more compact form. For example the following pipeline of four C functions calls adjusts historical closing prices for the effect of splits. (To understand the code snippet, assume that sequences
closing_pricecontain the time series of trade dates paired with closing prices, and
split_datethe sequence of split dates for the trades of interest - for this example "IBM".)mco_seq_iterator_t split; mco_seq_iterator_t prd_split_factor; mco_seq_iterator_t price_adjustment; mco_seq_iterator_t trade_date; mco_seq_iterator_t split_date; mco_seq_iterator_t closing_price; mco_seq_iterator_t adjusted_price; ... rc = mco_seq_cum_agg_prd_float(&prd_split_factor, &split); mco_seq_reverse_double(&rev_prd_split_factor, &prd_split_factor); mco_seq_stretch_uint4_double(&price_adjustment, &trade_date, &split_date, &rev_prd_split_factor, 1.0); mco_seq_mul_double(&adjusted_price, &closing_price, &price_adjustment);
The same result sequence can be calculated using the following SQL
selectstatement:SELECT seq_mul(ClosePrice, seq_stretch(TradeDate, SplitDate, seq_reverse(seq_cum_agg_prd(SplitFactor)))) as AdjustedClose FROM Security WHERE Security.Symbol = ‘IBM’
Note the relationship between the functions in SQL and in the C API: The inner-most nested function in the
selectstatement is the first sequence function called in the series of C API functions. The next most nested function,
seq_reverse(), is the second function called in the C API, and so on.
Null Values in Sequences