UNPKG

2.12 kBJavaScriptView Raw
1module.exports= function (dyn)
2{
3 var finder= {};
4
5 finder.canFind= function (query)
6 {
7 return !!query.cond._id&&!(query.cond._id instanceof RegExp);
8 };
9
10 finder.find= function (query)
11 {
12 if (query.opts.hints)
13 console.log(('PK on '+query.table.name+' for '+JSON.stringify(query.cond,null,2)).green);
14
15 query.$filter= {};
16
17 var p= dyn.promise(['results','count','end'],'notfound','consumed'),
18 _triggerError= query.count ? function (err)
19 {
20 if (err.code=='notfound')
21 p.trigger.count(0);
22 else
23 p.trigger.error(err);
24 } : p.trigger.error;
25
26 if (query.cond._pos!==undefined)
27 dyn.table(query.table.name)
28 .hash('_id',query.cond._id)
29 .range('_pos',query.cond._pos)
30 .get(function (item)
31 {
32 if (query.count)
33 p.trigger.count(1);
34 else
35 {
36 p.trigger.results([item]);
37 p.trigger.end();
38 }
39 },{ attrs: query.projection.include, consistent: query.$consistent })
40 .consumed(p.trigger.consumed)
41 .error(_triggerError);
42 else
43 if (query.limit==1)
44 dyn.table(query.table.name)
45 .hash('_id',query.cond._id)
46 .range('_pos',0)
47 .query(query.count ? p.trigger.count : p.trigger.results,
48 { attrs: query.projection.include, count: query.count, consistent: query.$consistent })
49 .error(_triggerError)
50 .consumed(p.trigger.consumed)
51 .end(p.trigger.end);
52 else
53 dyn.table(query.table.name)
54 .hash('_id',query.cond._id)
55 .query(query.count ? p.trigger.count : p.trigger.results,
56 { attrs: query.projection.include, limit: query.limit, count: query.count, consistent: query.$consistent })
57 .error(_triggerError)
58 .consumed(p.trigger.consumed)
59 .end(p.trigger.end);
60
61 return p;
62 };
63
64 return finder;
65};