commit 8679c9f293483c47462ae53ae8a74d3fb7d9161a
parent d541153e4cb398a06279388b0c298c438e3908b1
Author: William Casarin <jb55@jb55.com>
Date: Tue, 28 Nov 2023 10:51:12 -0800
nostrdb/search: make search case insensitive
Signed-off-by: William Casarin <jb55@jb55.com>
Diffstat:
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/damus-c/cursor.h b/damus-c/cursor.h
@@ -369,6 +369,20 @@ static inline int push_sized_str(struct cursor *cursor, const char *str, int len
return cursor_push(cursor, (u8*)str, len);
}
+static inline int cursor_push_lowercase(struct cursor *cur, const char *str, int len)
+{
+ int i;
+
+ if (unlikely(cur->p + len >= cur->end))
+ return 0;
+
+ for (i = 0; i < len; i++)
+ cur->p[i] = tolower(str[i]);
+
+ cur->p += len;
+ return 1;
+}
+
static inline int cursor_push_str(struct cursor *cursor, const char *str)
{
return cursor_push(cursor, (u8*)str, (int)strlen(str));
diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c
@@ -164,8 +164,8 @@ static int ndb_make_text_search_key(unsigned char *buf, int bufsize,
if (!push_varint(&cur, word_len))
return 0;
- // non-null terminated string
- if (!cursor_push(&cur, (unsigned char*)str, word_len))
+ // non-null terminated, lowercase string
+ if (!cursor_push_lowercase(&cur, str, word_len))
return 0;
// the index of the word in the content so that we can do more accurate