X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Fstore_lookup.c;h=6aa4095bc5de2370f965e88500bc01f8c817cc8d;hb=ff53c1c6b145e1a0315ee42d316a858f29f7d0a1;hp=d53bd58f35d743228ee054ccdfdd530e94360f6f;hpb=92162ac6318667e3beac4afcdd938fdfe8f58fae;p=sysdb.git diff --git a/src/core/store_lookup.c b/src/core/store_lookup.c index d53bd58..6aa4095 100644 --- a/src/core/store_lookup.c +++ b/src/core/store_lookup.c @@ -121,7 +121,7 @@ attr_cmp(sdb_store_obj_t *obj, sdb_store_cond_t *cond, if (! attr) status = INT_MAX; else if (attr->value.type != value.type) - status = INT_MAX; + status = sdb_data_strcmp(&attr->value, &value); else status = sdb_data_cmp(&attr->value, &value); sdb_data_free_datum(&value); @@ -136,19 +136,17 @@ obj_cmp(sdb_store_obj_t *obj, sdb_store_cond_t *cond, sdb_data_t value = SDB_DATA_INIT; int status; - if (sdb_store_get_field(obj, OBJ_C(cond)->field, &obj_value)) - return INT_MAX; if (sdb_store_expr_eval(OBJ_C(cond)->expr, obj, &value)) return INT_MAX; - if (obj_value.type != value.type) { - sdb_data_free_datum(&value); - return INT_MAX; - } - else if (OBJ_C(cond)->field == SDB_FIELD_BACKEND) { + if (OBJ_C(cond)->field == SDB_FIELD_BACKEND) { /* this implementation is not actually a conditional but rather checks * for equality (or rather, existence) only */ size_t i; + + if (value.type != SDB_TYPE_STRING) + return INT_MAX; + status = INT_MAX; for (i = 0; i < obj->backends_num; ++i) { if (! strcasecmp(obj->backends[i], value.data.string)) { @@ -156,10 +154,20 @@ obj_cmp(sdb_store_obj_t *obj, sdb_store_cond_t *cond, break; } } + sdb_data_free_datum(&value); + return status; } - else { - status = sdb_data_cmp(&obj_value, &value); + + if (sdb_store_get_field(obj, OBJ_C(cond)->field, &obj_value)) + return INT_MAX; + if (obj_value.type != value.type) { + sdb_data_free_datum(&obj_value); + sdb_data_free_datum(&value); + return INT_MAX; } + + status = sdb_data_cmp(&obj_value, &value); + sdb_data_free_datum(&obj_value); sdb_data_free_datum(&value); return status; } /* obj_cmp */ @@ -872,7 +880,9 @@ sdb_store_parse_object_type_plural(const char *name) int sdb_store_parse_field_name(const char *name) { - if (! strcasecmp(name, "last_update")) + if (! strcasecmp(name, "name")) + return SDB_FIELD_NAME; + else if (! strcasecmp(name, "last_update")) return SDB_FIELD_LAST_UPDATE; else if (! strcasecmp(name, "age")) return SDB_FIELD_AGE;