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"
7 d957951b 2005-02-11 devnull * search for a tuple that has the given 'attr=val' and also 'rattr=x'.
8 d957951b 2005-02-11 devnull * copy 'x' into 'buf' and return the whole tuple.
10 d957951b 2005-02-11 devnull * return 0 if not found.
13 d957951b 2005-02-11 devnull ndbgetvalue(Ndb *db, Ndbs *s, char *attr, char *val, char *rattr, Ndbtuple **pp)
15 d957951b 2005-02-11 devnull Ndbtuple *t, *nt;
16 d957951b 2005-02-11 devnull char *rv;
17 d957951b 2005-02-11 devnull Ndbs temps;
19 d957951b 2005-02-11 devnull if(s == nil)
20 d957951b 2005-02-11 devnull s = &temps;
22 d957951b 2005-02-11 devnull *pp = nil;
23 d957951b 2005-02-11 devnull t = ndbsearch(db, s, attr, val);
24 d957951b 2005-02-11 devnull while(t){
25 d957951b 2005-02-11 devnull /* first look on same line (closer binding) */
26 d957951b 2005-02-11 devnull nt = s->t;
28 d957951b 2005-02-11 devnull if(strcmp(rattr, nt->attr) == 0){
29 d957951b 2005-02-11 devnull rv = strdup(nt->val);
30 d957951b 2005-02-11 devnull if(pp != nil)
33 d957951b 2005-02-11 devnull ndbfree(t);
34 d957951b 2005-02-11 devnull return rv;
36 d957951b 2005-02-11 devnull nt = nt->line;
37 d957951b 2005-02-11 devnull if(nt == s->t)
40 d957951b 2005-02-11 devnull /* search whole tuple */
41 d957951b 2005-02-11 devnull for(nt = t; nt; nt = nt->entry){
42 d957951b 2005-02-11 devnull if(strcmp(rattr, nt->attr) == 0){
43 d957951b 2005-02-11 devnull rv = strdup(nt->val);
44 d957951b 2005-02-11 devnull if(pp != nil)
47 d957951b 2005-02-11 devnull ndbfree(t);
48 d957951b 2005-02-11 devnull return rv;
51 d957951b 2005-02-11 devnull ndbfree(t);
52 d957951b 2005-02-11 devnull t = ndbsnext(s, attr, val);
54 d957951b 2005-02-11 devnull return nil;
57 d957951b 2005-02-11 devnull Ndbtuple*
58 d957951b 2005-02-11 devnull ndbgetval(Ndb *db, Ndbs *s, char *attr, char *val, char *rattr, char *buf)
60 d957951b 2005-02-11 devnull Ndbtuple *t;
63 d957951b 2005-02-11 devnull p = ndbgetvalue(db, s, attr, val, rattr, &t);
64 d957951b 2005-02-11 devnull if(p == nil){
65 d957951b 2005-02-11 devnull if(buf != nil)
66 d957951b 2005-02-11 devnull *buf = 0;
68 d957951b 2005-02-11 devnull if(buf != nil){
69 d957951b 2005-02-11 devnull strncpy(buf, p, Ndbvlen-1);
70 d957951b 2005-02-11 devnull buf[Ndbvlen-1] = 0;
74 d957951b 2005-02-11 devnull return t;