plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }