123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #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 buf[Ndbvlen];
- if(rattr){
- t = ndbgetval(db, &s, attr, val, rattr, buf);
- if(t){
- print("%s\n", buf);
- ndbfree(t);
- }
- 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);
- }
|