Blame


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