diff options
author | rsc <devnull@localhost> | 2005-02-11 19:41:16 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-02-11 19:41:16 +0000 |
commit | d957951b75df08a9bb0293e3e13ff87759afbb92 (patch) | |
tree | 4d7868b0d223956217cbc8819d7afb3bec532cca /src/cmd/ndb/ndbquery.c | |
parent | ad017cfbf5530cfc3ae2fafd723cdade2a4405f6 (diff) | |
download | plan9port-d957951b75df08a9bb0293e3e13ff87759afbb92.tar.gz plan9port-d957951b75df08a9bb0293e3e13ff87759afbb92.tar.bz2 plan9port-d957951b75df08a9bb0293e3e13ff87759afbb92.zip |
new
Diffstat (limited to 'src/cmd/ndb/ndbquery.c')
-rw-r--r-- | src/cmd/ndb/ndbquery.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/cmd/ndb/ndbquery.c b/src/cmd/ndb/ndbquery.c new file mode 100644 index 00000000..65bc0472 --- /dev/null +++ b/src/cmd/ndb/ndbquery.c @@ -0,0 +1,81 @@ +#include <u.h> +#include <libc.h> +#include <bio.h> +#include <ndb.h> + +/* + * search the database for matches + */ +void +usage(void) +{ + fprint(2, "usage: query attr value [returned attribute]\n"); + exits("usage"); +} + +void +search(Ndb *db, char *attr, char *val, char *rattr) +{ + Ndbs s; + Ndbtuple *t; + Ndbtuple *nt; + char *p; + + if(rattr){ + p = ndbgetvalue(db, &s, attr, val, rattr, nil); + if(p){ + print("%s\n", p); + free(p); + } + return; + } + + t = ndbsearch(db, &s, attr, val); + while(t){ + for(nt = t; nt; nt = nt->entry) + print("%s=%s ", nt->attr, nt->val); + print("\n"); + ndbfree(t); + t = ndbsnext(&s, attr, val); + } +} + +void +main(int argc, char **argv) +{ + char *rattr = 0; + Ndb *db; + char *dbfile = 0; + int reps = 1; + + ARGBEGIN{ + case 'f': + dbfile = ARGF(); + break; + }ARGEND; + + switch(argc){ + case 4: + reps = atoi(argv[3]); + /* fall through */ + case 3: + rattr = argv[2]; + break; + case 2: + rattr = 0; + break; + default: + usage(); + } + + db = ndbopen(dbfile); + if(db == 0){ + fprint(2, "no db files\n"); + exits("no db"); + } + while(reps--) + search(db, argv[0], argv[1], rattr); + ndbclose(db); + + exits(0); +} |