X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fstore.h;h=574b01ed262adcfd88d2a6be63afdff7285300a9;hb=a077fb06b0cf27ca51477c76d5520d0c814af8df;hp=4e8d468c4263f0e57cd2f26d301aedf0006102a7;hpb=2ced8af7848867b7589a7c068f5f51c47dc7ea01;p=sysdb.git diff --git a/src/include/core/store.h b/src/include/core/store.h index 4e8d468..574b01e 100644 --- a/src/include/core/store.h +++ b/src/include/core/store.h @@ -158,6 +158,52 @@ int sdb_store_service_attr(const char *hostname, const char *service, const char *key, const sdb_data_t *value, sdb_time_t last_update); +/* + * Expressions specify arithmetic expressions. + * + * A expression object inherits from sdb_object_t and, thus, may safely be + * cast to a generic object. + */ +struct sdb_store_expr; +typedef struct sdb_store_expr sdb_store_expr_t; +#define SDB_STORE_EXPR(obj) ((sdb_store_expr_t *)(obj)) + +/* + * sdb_store_expr_create: + * Creates an arithmetic expression implementing the specified operator on the + * specified left and right operand. + * + * Returns: + * - an expression object on success + * - NULL else + */ +sdb_store_expr_t * +sdb_store_expr_create(int op, sdb_store_expr_t *left, sdb_store_expr_t *right); + +/* + * sdb_store_expr_constvalue: + * Creates an expression which evaluates to the specified constant value. + * + * Returns: + * - an expression object on success + * - NULL else + */ +sdb_store_expr_t * +sdb_store_expr_constvalue(const sdb_data_t *value); + +/* + * sdb_store_expr_eval: + * Evaluate an expression and stores the result in 'res'. The result's value + * will be allocated dynamically if necessary and, thus, should be free'd by + * the caller (e.g. using sdb_data_free_datum); + * + * Returns: + * - 0 on success + * - a negative value else + */ +int +sdb_store_expr_eval(sdb_store_expr_t *expr, sdb_data_t *res); + /* * Conditionals may be used to lookup hosts from the store based on a * conditional expression. @@ -172,11 +218,11 @@ typedef struct sdb_store_cond sdb_store_cond_t; /* * sdb_store_attr_cond: * Creates a conditional based on attribute values. The value of stored - * attributes is compared against the specified value. See sdb_data_cmp for - * details about the comparison. + * attributes is compared against the value the expression evaluates to. See + * sdb_data_cmp for details about the comparison. */ sdb_store_cond_t * -sdb_store_attr_cond(const char *name, const sdb_data_t *value); +sdb_store_attr_cond(const char *name, sdb_store_expr_t *expr); /* * Store matchers may be used to lookup hosts from the store based on their @@ -237,7 +283,7 @@ sdb_store_gt_matcher(sdb_store_cond_t *cond); /* * sdb_store_matcher_parse_cmp: - * Parse a simple compare expression (. ). + * Parse a simple compare expression (. ). * * Returns: * - a matcher object on success @@ -245,7 +291,7 @@ sdb_store_gt_matcher(sdb_store_cond_t *cond); */ sdb_store_matcher_t * sdb_store_matcher_parse_cmp(const char *obj_type, const char *attr, - const char *op, const sdb_data_t *value); + const char *op, sdb_store_expr_t *expr); /* * sdb_store_dis_matcher: