Code

store.h: Use separate value ranges for object and field types.
[sysdb.git] / src / include / core / data.h
index 9ab5cdabf50936d33f5a494a64456bad3502c6c9..c03c0c1b6210b730dc0790693f642d45b4012886 100644 (file)
@@ -59,7 +59,14 @@ enum {
                : ((t) == SDB_TYPE_STRING) ? "STRING" \
                : ((t) == SDB_TYPE_DATETIME) ? "DATETIME" \
                : ((t) == SDB_TYPE_BINARY) ? "BINARY" \
-               : ((t) == SDB_TYPE_REGEX) ? "REGEX" : "UNKNOWN")
+               : ((t) == SDB_TYPE_REGEX) ? "REGEX" \
+               : ((t) == (SDB_TYPE_ARRAY | SDB_TYPE_INTEGER)) ? "[]INTEGER" \
+               : ((t) == (SDB_TYPE_ARRAY | SDB_TYPE_DECIMAL)) ? "[]DECIMAL" \
+               : ((t) == (SDB_TYPE_ARRAY | SDB_TYPE_STRING)) ? "[]STRING" \
+               : ((t) == (SDB_TYPE_ARRAY | SDB_TYPE_DATETIME)) ? "[]DATETIME" \
+               : ((t) == (SDB_TYPE_ARRAY | SDB_TYPE_BINARY)) ? "[]BINARY" \
+               : ((t) == (SDB_TYPE_ARRAY | SDB_TYPE_REGEX)) ? "[]REGEX" \
+               : "UNKNOWN")
 
 union sdb_datum;
 typedef union sdb_datum sdb_datum_t;
@@ -166,6 +173,20 @@ sdb_data_isnull(const sdb_data_t *datum);
 _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.
  */