nostrdb

an unfairly fast embedded nostr database backed by lmdb
git clone git://jb55.com/nostrdb
Log | Files | Refs | Submodules | README | LICENSE

commit 38192e384b588b464ea7eb9707476116f5b80f47
parent 44d1797b40808ebd7d7085954d36b4a407a83de5
Author: William Casarin <jb55@jb55.com>
Date:   Wed,  9 Apr 2025 11:29:53 -0700

ndb: add --id queries

how did I not have this already...

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mndb.c | 30++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/ndb.c b/ndb.c @@ -19,7 +19,7 @@ static int usage() printf("commands\n\n"); printf(" stat\n"); - printf(" query [--kind 42] [--notekey key] [--search term] [--limit 42] \n"); + printf(" query [--kind 42] [--id abcdef...] [--notekey key] [--search term] [--limit 42] \n"); printf(" [-e abcdef...] [--author abcdef... -a bcdef...] [--relay wss://relay.damus.io]\n"); printf(" profile <pubkey> print the raw profile data for a pubkey\n"); printf(" note-relays <note-id> list the relays a given note id has been seen on\n"); @@ -282,6 +282,23 @@ int main(int argc, char *argv[]) ndb_filter_end_field(f); argv += 2; argc -= 2; + } else if (!strcmp(argv[0], "-i") || !strcmp(argv[0], "--id")) { + if (current_field != NDB_FILTER_IDS) { + ndb_filter_end_field(f); + ndb_filter_start_field(f, NDB_FILTER_IDS); + current_field = NDB_FILTER_IDS; + } + + len = strlen(argv[1]); + if (len != 64 || !hex_decode(argv[1], 64, tmp_id, sizeof(tmp_id))) { + fprintf(stderr, "invalid hex id\n"); + res = 42; + goto cleanup; + } + + ndb_filter_add_id_element(f, tmp_id); + argv += 2; + argc -= 2; } else if (!strcmp(argv[0], "-e")) { if (current_field != 'e') { if (!ndb_filter_start_tag_field(f, 'e')) { @@ -307,14 +324,11 @@ int main(int argc, char *argv[]) argv += 2; argc -= 2; } else if (!strcmp(argv[0], "-a") || !strcmp(argv[0], "--author")) { - if (current_field) { - ndb_filter_end_field(f); - current_field = 0; - } if (current_field != NDB_FILTER_AUTHORS) { + ndb_filter_end_field(f); ndb_filter_start_field(f, NDB_FILTER_AUTHORS); + current_field = NDB_FILTER_AUTHORS; } - current_field = NDB_FILTER_AUTHORS; len = strlen(argv[1]); if (len != 64 || !hex_decode(argv[1], 64, tmp_id, sizeof(tmp_id))) { @@ -331,6 +345,10 @@ int main(int argc, char *argv[]) argv += 2; argc -= 2; + } else { + fprintf(stderr, "unrecognized option: %s\n", argv[0]); + res = 100; + goto cleanup; } }