commit 00aee106279ae3d7461361f70576e44e551f0634
parent 7ad7b4d02b6dde9542d3707bdffb15a16b61b34f
Author: lash <dev@holbrook.no>
Date: Wed, 7 May 2025 08:59:59 +0100
Add query getters for key and value
Diffstat:
4 files changed, 57 insertions(+), 10 deletions(-)
diff --git a/src/lq/query.h b/src/lq/query.h
@@ -16,12 +16,18 @@ struct lq_query_t {
char **files;
size_t files_len;
size_t files_cur;
+ char *key;
+ size_t key_len;
char *value;
size_t value_len;
};
LQQuery* lq_query_new(enum payload_e typ, LQStore *store, const char *key, size_t key_len);
int lq_query_next(LQQuery *query);
+char* lq_query_get_key(LQQuery *query);
+int lq_query_get_key_len(LQQuery *query);
+char* lq_query_get_val(LQQuery *query);
+int lq_query_get_val_len(LQQuery *query);
void lq_query_free(LQQuery *query);
#endif // LIBQAEDA_QUERY_H_
diff --git a/src/store/file.c b/src/store/file.c
@@ -177,7 +177,7 @@ LQQuery* lq_query_new(enum payload_e typ, LQStore *store, const char *key, size_
return NULL;
}
query->value = lq_alloc(LQ_STORE_VAL_MAX);
- query->value = lq_alloc(LQ_STORE_VAL_MAX);
+ query->key = lq_alloc(LQ_STORE_KEY_MAX);
query->store = store;
query->state = LQ_QUERY_READY;
@@ -189,30 +189,58 @@ LQQuery* lq_query_new(enum payload_e typ, LQStore *store, const char *key, size_
int lq_query_next(LQQuery *query) {
int r;
char *p;
- char b[LQ_STORE_KEY_MAX];
+ //char b[LQ_STORE_KEY_MAX];
if (query->state & LQ_QUERY_EOF) {
return ERR_EOF;
}
p = *(query->files + query->files_cur) + 1;
- r = h2b(p, (char*)b);
- if (r == 0) {
+ query->key_len = h2b(p, (char*)query->key);
+ if (query->key_len == 0) {
query->state = LQ_QUERY_GONER;
return ERR_ENCODING;
}
query->value_len = LQ_STORE_VAL_MAX;
- r = query->store->get(query->typ, query->store, b, r, query->value, &query->value_len);
+ r = query->store->get(query->typ, query->store, query->key, query->key_len, query->value, &query->value_len);
if (r != ERR_OK) {
query->value_len = 0;
query->state = LQ_QUERY_GONER;
return ERR_FAIL;
}
if (++query->files_cur == query->files_len) {
- query->state = LQ_QUERY_EOF;
+ query->state |= LQ_QUERY_EOF;
}
return ERR_OK;
}
+int lq_query_get_val_len(LQQuery *query) {
+ if (!(query->state & LQ_QUERY_READY)) {
+ return -1;
+ }
+ return query->value_len;
+}
+
+char* lq_query_get_val(LQQuery *query) {
+ if (!(query->state & LQ_QUERY_READY)) {
+ return NULL;
+ }
+ return query->value;
+}
+
+int lq_query_get_key_len(LQQuery *query) {
+ if (!(query->state & LQ_QUERY_READY)) {
+ return -1;
+ }
+ return query->key_len;
+}
+
+char* lq_query_get_key(LQQuery *query) {
+ if (!(query->state & LQ_QUERY_READY)) {
+ return NULL;
+ }
+ return query->key;
+}
+
void lq_query_free(LQQuery *query) {
char *p;
int i;
@@ -227,6 +255,7 @@ void lq_query_free(LQQuery *query) {
i++;
}
lq_free(query->files);
+ lq_free(query->key);
lq_free(query->value);
lq_free(query);
}
diff --git a/src/test/Makefile b/src/test/Makefile
@@ -7,8 +7,8 @@ LIBS := ../asn1/defs_asn1_tab.o `pkg-config --libs libtasn1 libgcrypt` -L.. -L..
LDFLAGS := -lcheck $(LIBS)
COMMONOBJS = ../mem/std.o ../lq/config.o ../lq/err.o ../lq/base.o ../debug.o
-#all: build all-tests
-all: build one-test
+all: build all-tests
+#all: build one-test
all-tests:
cK_FORK=no LD_LIBRARY_PATH=`realpath ../aux/lib` ./test_test_bin
diff --git a/src/test/test_query.c b/src/test/test_query.c
@@ -79,7 +79,8 @@ START_TEST(check_query_full) {
r = lq_query_next(query);
ck_assert_int_eq(r, ERR_OK);
r = lq_query_next(query);
- ck_assert_int_eq(r, ERR_EOF);
+ ck_assert_int_eq(r, ERR_OK | ERR_EOF);
+ lq_query_free(query);
query = lq_query_new(LQ_CONTENT_MSG, &store, "aa", 2);
ck_assert_ptr_nonnull(query);
@@ -91,8 +92,19 @@ START_TEST(check_query_full) {
r = lq_query_next(query);
ck_assert_int_eq(r, ERR_OK);
r = lq_query_next(query);
- ck_assert_int_eq(r, ERR_EOF);
+ ck_assert_int_eq(r, ERR_OK | ERR_EOF);
+ k = lq_query_get_key(query);
+ kl = lq_query_get_key_len(query);
+ ck_assert_int_eq(kl, 3);
+ ck_assert_mem_eq(k, "aac", kl);
+
+ v = lq_query_get_val(query);
+ vl = lq_query_get_val_len(query);
+ ck_assert_int_eq(vl, 6);
+ ck_assert_mem_eq(v, "blinky", vl);
+
+ lq_query_free(query);
}
END_TEST