X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fdata.h;h=e529fb9ceec24749aca3efdf8841bbc2dd073e23;hp=cf4e27eca022ba6f61282c7c90653ecc908e8b38;hb=42f08911b5ba35dbd0e3dadc0f3785f8fa3a946a;hpb=95dbeac75031ffe989a8fe0ed2ce31a1351f5dc5 diff --git a/src/include/core/data.h b/src/include/core/data.h index cf4e27e..e529fb9 100644 --- a/src/include/core/data.h +++ b/src/include/core/data.h @@ -31,6 +31,7 @@ #include "core/time.h" #include +#include #include #include @@ -54,7 +55,8 @@ enum { }; #define SDB_TYPE_TO_STRING(t) \ - (((t) == SDB_TYPE_INTEGER) ? "INTEGER" \ + (((t) == SDB_TYPE_NULL) ? "NULL" \ + : ((t) == SDB_TYPE_INTEGER) ? "INTEGER" \ : ((t) == SDB_TYPE_DECIMAL) ? "DECIMAL" \ : ((t) == SDB_TYPE_STRING) ? "STRING" \ : ((t) == SDB_TYPE_DATETIME) ? "DATETIME" \ @@ -161,18 +163,35 @@ sdb_data_strcmp(const sdb_data_t *d1, const sdb_data_t *d2); * either datum is NULL or if the type is SDB_TYPE_NULL or if the string or * binary datum is NULL. */ -_Bool +bool sdb_data_isnull(const sdb_data_t *datum); /* * sdb_data_inarray: * Determine whether a datum is included in an array based on the usual * comparison function of the value's type. The element type of the array has - * to match the type of the value. + * to match the type of the value. The value may be another array. In that + * case, the element types have to match and the function returns true if all + * elements of the first array are included in the second where order does not + * matter. */ -_Bool +bool sdb_data_inarray(const sdb_data_t *value, const sdb_data_t *array); +/* + * sdb_data_array_get: + * Get the i-th value stored in the specified array and store an alias in + * 'value'. Storing an alias means that the value points to the actual array + * element. Do *not* free the value after using it (i.e., don't use + * sdb_data_free_datum). + * + * Returns: + * - 0 on success + * - a negative value else + */ +int +sdb_data_array_get(const sdb_data_t *array, size_t i, sdb_data_t *value); + /* * Operators supported by sdb_data_eval_expr. */ @@ -271,9 +290,8 @@ enum { * - the number of characters written to the buffer (excluding the terminated * null byte) or the number of characters which would have been written in * case the output was truncated - * - a negative value else */ -int +size_t sdb_data_format(const sdb_data_t *datum, char *buf, size_t buflen, int quoted); /* @@ -284,24 +302,16 @@ sdb_data_format(const sdb_data_t *datum, char *buf, size_t buflen, int quoted); * character of the string is "0"), sedecimal (base 16, if the string includes * the "0x" prefix), or decimal. Decimal numbers may also be "infinity" or * "NaN" or may use a decimal exponent. Date-time values are expected to be - * specified as (floating point) number of seconds since the epoch. For string - * and binary data, the input string is passed to the datum. The function does - * not allocate new memory for that purpose. Use sdb_data_copy() if you want - * to do that. For regex data, the input string is copied to newly allocated - * memory and also compiled to a regex. Use sdb_data_free_datum() to free the - * dynamically allocated memory. - * - * The input string may be stored in 'data', that is, the function may be used - * to do an inline cast from a string to any other type. It is the callers - * responsibility to free the memory used by the string in case the target - * type does not keep a reference to it. + * specified as (floating point) number of seconds since the epoch. New memory + * will be allocated as necessary and will have to be free'd using + * sdb_data_free_datum(). * * Returns: * - 0 on success * - a negative value else */ int -sdb_data_parse(char *str, int type, sdb_data_t *data); +sdb_data_parse(const char *str, int type, sdb_data_t *data); /* * sdb_data_sizeof: