1 | 'use strict';
|
2 |
|
3 | module.exports = function (dbType, context) {
|
4 |
|
5 | describe(dbType + ': ne', function () {
|
6 |
|
7 | it('#7 does ne queries 1', function () {
|
8 | var db = context.db;
|
9 | var index = {
|
10 | "index": {
|
11 | "fields": ["foo"]
|
12 | }
|
13 | };
|
14 |
|
15 | return db.createIndex(index).then(function () {
|
16 | return db.bulkDocs([
|
17 | { _id: '1', foo: 'eyo', bar: 'zxy'},
|
18 | { _id: '2', foo: 'ebb', bar: 'zxy'},
|
19 | { _id: '3', foo: 'eba', bar: 'zxz'},
|
20 | { _id: '4', foo: 'abo', bar: 'zxz'}
|
21 | ]);
|
22 | }).then(function () {
|
23 | return db.find({
|
24 | selector: {foo: {$gt: "a"}, bar: {$ne: 'zxy'}},
|
25 | fields: ["_id"],
|
26 | sort: [{foo: "asc"}]
|
27 | });
|
28 | }).then(function (resp) {
|
29 | resp.should.deep.equal({
|
30 | docs: [
|
31 | { _id: '4'},
|
32 | { _id: '3'}
|
33 | ]
|
34 | });
|
35 | });
|
36 | });
|
37 |
|
38 | it('#7 does ne queries 2', function () {
|
39 | var db = context.db;
|
40 | var index = {
|
41 | "index": {
|
42 | "fields": ["foo", "bar"]
|
43 | }
|
44 | };
|
45 |
|
46 | return db.createIndex(index).then(function () {
|
47 | return db.bulkDocs([
|
48 | {_id: '1', foo: 'eyo', bar: 'zxy'},
|
49 | {_id: '2', foo: 'ebb', bar: 'zxy'},
|
50 | {_id: '3', foo: 'eba', bar: 'zxz'},
|
51 | {_id: '4', foo: 'abo', bar: 'zxz'}
|
52 | ]);
|
53 | }).then(function () {
|
54 | return db.find({
|
55 | selector: {foo: {$gt: "a"}, bar: {$ne: 'zxy'}},
|
56 | fields: ["_id"],
|
57 | sort: [{foo: "asc"}]
|
58 | });
|
59 | }).then(function (resp) {
|
60 | resp.should.deep.equal({
|
61 | docs: [
|
62 | {_id: '4'},
|
63 | {_id: '3'}
|
64 | ]
|
65 | });
|
66 | });
|
67 | });
|
68 |
|
69 | it('$ne/$eq inconsistency', function () {
|
70 | var db = context.db;
|
71 |
|
72 | function normalize(res) {
|
73 | return res.docs.map(function getId(x) {
|
74 | return x._id;
|
75 | }).sort();
|
76 | }
|
77 |
|
78 | return db.createIndex({
|
79 | index: {
|
80 | fields: ['foo']
|
81 | }
|
82 | }).then(function () {
|
83 | return db.bulkDocs([
|
84 | {_id: '1', foo: 1},
|
85 | {_id: '2', foo: 2},
|
86 | {_id: '3', foo: 3},
|
87 | {_id: '4', foo: 4}
|
88 | ]);
|
89 | }).then(function () {
|
90 | return db.find({
|
91 | selector: {$and: [{foo: {$eq: 1}}, {foo: {$ne: 1}}]}
|
92 | });
|
93 | }).then(function (res) {
|
94 | normalize(res).should.deep.equal([]);
|
95 | });
|
96 | });
|
97 |
|
98 | it('$ne/$eq consistency', function () {
|
99 | var db = context.db;
|
100 |
|
101 | function normalize(res) {
|
102 | return res.docs.map(function getId(x) {
|
103 | return x._id;
|
104 | }).sort();
|
105 | }
|
106 |
|
107 | return db.createIndex({
|
108 | index: {
|
109 | fields: ['foo']
|
110 | }
|
111 | }).then(function () {
|
112 | return db.bulkDocs([
|
113 | {_id: '1', foo: 1},
|
114 | {_id: '2', foo: 2},
|
115 | {_id: '3', foo: 3},
|
116 | {_id: '4', foo: 4}
|
117 | ]);
|
118 | }).then(function () {
|
119 | return db.find({
|
120 | selector: {$and: [{foo: {$eq: 1}}, {foo: {$ne: 3}}]}
|
121 | });
|
122 | }).then(function (res) {
|
123 | normalize(res).should.deep.equal(['1']);
|
124 | });
|
125 | });
|
126 |
|
127 | it('does ne queries with gt', function () {
|
128 | var db = context.db;
|
129 | return db.bulkDocs([
|
130 | { name: 'mario', _id: 'mario', rank: 5, series: 'mario', debut: 1981 },
|
131 | { name: 'jigglypuff', _id: 'puff', rank: 8, series: 'pokemon', debut: 1996 },
|
132 | { name: 'link', rank: 10, _id: 'link', series: 'zelda', debut: 1986 },
|
133 | { name: 'donkey kong', rank: 7, _id: 'dk', series: 'mario', debut: 1981 },
|
134 | { name: 'pikachu', series: 'pokemon', _id: 'pikachu', rank: 1, debut: 1996 },
|
135 | { name: 'captain falcon', _id: 'falcon', rank: 4, series: 'f-zero', debut: 1990 },
|
136 | { name: 'luigi', rank: 11, _id: 'luigi', series: 'mario', debut: 1983 },
|
137 | { name: 'fox', _id: 'fox', rank: 3, series: 'star fox', debut: 1993 },
|
138 | { name: 'ness', rank: 9, _id: 'ness', series: 'earthbound', debut: 1994 },
|
139 | { name: 'samus', rank: 12, _id: 'samus', series: 'metroid', debut: 1986 },
|
140 | { name: 'yoshi', _id: 'yoshi', rank: 6, series: 'mario', debut: 1990 },
|
141 | { name: 'kirby', _id: 'kirby', series: 'kirby', rank: 2, debut: 1992 }
|
142 | ]).then(function () {
|
143 | return db.find({
|
144 | selector: {
|
145 | $and: [
|
146 | {_id: {$ne: "samus"}},
|
147 | {_id: {$ne: "yoshia"}},
|
148 | {_id: {$gt: "fox"}}
|
149 | ]
|
150 | },
|
151 | fields: ["_id"],
|
152 | });
|
153 | }).then(function (resp) {
|
154 | resp.should.deep.equal({
|
155 | docs: [
|
156 | {_id: 'kirby'},
|
157 | {_id: 'link'},
|
158 | {_id: 'luigi'},
|
159 | {_id: 'mario'},
|
160 | {_id: 'ness'},
|
161 | {_id: 'pikachu'},
|
162 | {_id: 'puff'},
|
163 | {_id: 'yoshi'}
|
164 | ]
|
165 | });
|
166 | });
|
167 | });
|
168 |
|
169 | });
|
170 | };
|