ndbquery.c (1119B)
1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include <ndb.h> 5 6 /* 7 * search the database for matches 8 */ 9 void 10 usage(void) 11 { 12 fprint(2, "usage: query attr value [returned attribute]\n"); 13 exits("usage"); 14 } 15 16 void 17 search(Ndb *db, char *attr, char *val, char *rattr) 18 { 19 Ndbs s; 20 Ndbtuple *t; 21 Ndbtuple *nt; 22 char *p; 23 24 if(rattr){ 25 p = ndbgetvalue(db, &s, attr, val, rattr, nil); 26 if(p){ 27 print("%s\n", p); 28 free(p); 29 } 30 return; 31 } 32 33 t = ndbsearch(db, &s, attr, val); 34 while(t){ 35 for(nt = t; nt; nt = nt->entry) 36 print("%s=%s ", nt->attr, nt->val); 37 print("\n"); 38 ndbfree(t); 39 t = ndbsnext(&s, attr, val); 40 } 41 } 42 43 void 44 main(int argc, char **argv) 45 { 46 char *rattr = 0; 47 Ndb *db; 48 char *dbfile = 0; 49 int reps = 1; 50 51 ARGBEGIN{ 52 case 'f': 53 dbfile = ARGF(); 54 break; 55 }ARGEND; 56 57 switch(argc){ 58 case 4: 59 reps = atoi(argv[3]); 60 /* fall through */ 61 case 3: 62 rattr = argv[2]; 63 break; 64 case 2: 65 rattr = 0; 66 break; 67 default: 68 usage(); 69 } 70 71 db = ndbopen(dbfile); 72 if(db == 0){ 73 fprint(2, "no db files\n"); 74 exits("no db"); 75 } 76 while(reps--) 77 search(db, argv[0], argv[1], rattr); 78 ndbclose(db); 79 80 exits(0); 81 }