URI:
       tndbquery.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tndbquery.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 }