Skip to content

Commit 9cd5db5

Browse files
committed
Stable Version 1.0.0-alpha.4.
1 parent e8d1586 commit 9cd5db5

File tree

4 files changed

+79
-46
lines changed

4 files changed

+79
-46
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
##### 1.0.0-alpha.4 - 23 November 2014
2+
3+
###### Backwards compatible bug fixes
4+
- Fixed improper use of r.row in nested queries
5+
16
##### 1.0.0-alpha.3 - 23 November 2014
27

38
###### Backwards compatible bug fixes

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "js-data-rethinkdb",
33
"description": "RethinkDB adapter for js-data.",
4-
"version": "1.0.0-alpha.3",
4+
"version": "1.0.0-alpha.4",
55
"homepage": "http://www.js-data.io/docs/dsrethinkdbadapter",
66
"repository": {
77
"type": "git",

src/index.js

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ var deepMixIn = require('mout/object/deepMixIn');
55
var forEach = require('mout/array/forEach');
66
var contains = require('mout/array/contains');
77
var isObject = require('mout/lang/isObject');
8+
var isEmpty = require('mout/lang/isEmpty');
89
var isString = require('mout/lang/isString');
910
var upperCase = require('mout/string/upperCase');
1011
var underscore = require('mout/string/underscore');
@@ -53,53 +54,54 @@ function filterQuery(resourceConfig, params, options) {
5354
});
5455

5556
var query = r.db(options.db || this.defaults.db).table(resourceConfig.table || underscore(resourceConfig.name));
56-
var subQuery;
5757

58-
forOwn(params.where, function (criteria, field) {
59-
if (!isObject(criteria)) {
60-
params.where[field] = {
61-
'==': criteria
62-
};
63-
}
64-
forOwn(criteria, function (v, op) {
65-
if (op === '==' || op === '===') {
66-
subQuery = subQuery ? subQuery.and(r.row(field).default(null).eq(v)) : r.row(field).default(null).eq(v);
67-
} else if (op === '!=' || op === '!==') {
68-
subQuery = subQuery ? subQuery.and(r.row(field).default(null).ne(v)) : r.row(field).default(null).ne(v);
69-
} else if (op === '>') {
70-
subQuery = subQuery ? subQuery.and(r.row(field).default(null).gt(v)) : r.row(field).default(null).gt(v);
71-
} else if (op === '>=') {
72-
subQuery = subQuery ? subQuery.and(r.row(field).default(null).ge(v)) : r.row(field).default(null).ge(v);
73-
} else if (op === '<') {
74-
subQuery = subQuery ? subQuery.and(r.row(field).default(null).lt(v)) : r.row(field).default(null).lt(v);
75-
} else if (op === '<=') {
76-
subQuery = subQuery ? subQuery.and(r.row(field).default(null).le(v)) : r.row(field).default(null).le(v);
77-
} else if (op === 'in') {
78-
subQuery = subQuery ? subQuery.and(r.expr(v).default(r.expr([])).contains(r.row(field).default(null))) : r.expr(v).default(r.expr([])).contains(r.row(field).default(null));
79-
} else if (op === 'notIn') {
80-
subQuery = subQuery ? subQuery.and(r.expr(v).default(r.expr([])).contains(r.row(field).default(null)).not()) : r.expr(v).default(r.expr([])).contains(r.row(field).default(null)).not();
81-
} else if (op === '|==' || op === '|===') {
82-
subQuery = subQuery ? subQuery.or(r.row(field).default(null).eq(v)) : r.row(field).default(null).eq(v);
83-
} else if (op === '|!=' || op === '|!==') {
84-
subQuery = subQuery ? subQuery.or(r.row(field).default(null).ne(v)) : r.row(field).default(null).ne(v);
85-
} else if (op === '|>') {
86-
subQuery = subQuery ? subQuery.or(r.row(field).default(null).gt(v)) : r.row(field).default(null).gt(v);
87-
} else if (op === '|>=') {
88-
subQuery = subQuery ? subQuery.or(r.row(field).default(null).ge(v)) : r.row(field).default(null).ge(v);
89-
} else if (op === '|<') {
90-
subQuery = subQuery ? subQuery.or(r.row(field).default(null).lt(v)) : r.row(field).default(null).lt(v);
91-
} else if (op === '|<=') {
92-
subQuery = subQuery ? subQuery.or(r.row(field).default(null).le(v)) : r.row(field).default(null).le(v);
93-
} else if (op === '|in') {
94-
subQuery = subQuery ? subQuery.or(r.expr(v).default(r.expr([])).contains(r.row(field).default(null))) : r.expr(v).default(r.expr([])).contains(r.row(field).default(null));
95-
} else if (op === '|notIn') {
96-
subQuery = subQuery ? subQuery.or(r.expr(v).default(r.expr([])).contains(r.row(field).default(null)).not()) : r.expr(v).default(r.expr([])).contains(r.row(field).default(null)).not();
97-
}
58+
if (!isEmpty(params.where)) {
59+
query = query.filter(function (row) {
60+
var subQuery;
61+
forOwn(params.where, function (criteria, field) {
62+
if (!isObject(criteria)) {
63+
params.where[field] = {
64+
'==': criteria
65+
};
66+
}
67+
forOwn(criteria, function (v, op) {
68+
if (op === '==' || op === '===') {
69+
subQuery = subQuery ? subQuery.and(row(field).default(null).eq(v)) : row(field).default(null).eq(v);
70+
} else if (op === '!=' || op === '!==') {
71+
subQuery = subQuery ? subQuery.and(row(field).default(null).ne(v)) : row(field).default(null).ne(v);
72+
} else if (op === '>') {
73+
subQuery = subQuery ? subQuery.and(row(field).default(null).gt(v)) : row(field).default(null).gt(v);
74+
} else if (op === '>=') {
75+
subQuery = subQuery ? subQuery.and(row(field).default(null).ge(v)) : row(field).default(null).ge(v);
76+
} else if (op === '<') {
77+
subQuery = subQuery ? subQuery.and(row(field).default(null).lt(v)) : row(field).default(null).lt(v);
78+
} else if (op === '<=') {
79+
subQuery = subQuery ? subQuery.and(row(field).default(null).le(v)) : row(field).default(null).le(v);
80+
} else if (op === 'in') {
81+
subQuery = subQuery ? subQuery.and(r.expr(v).default(r.expr([])).contains(row(field).default(null))) : r.expr(v).default(r.expr([])).contains(row(field).default(null));
82+
} else if (op === 'notIn') {
83+
subQuery = subQuery ? subQuery.and(r.expr(v).default(r.expr([])).contains(row(field).default(null)).not()) : r.expr(v).default(r.expr([])).contains(row(field).default(null)).not();
84+
} else if (op === '|==' || op === '|===') {
85+
subQuery = subQuery ? subQuery.or(row(field).default(null).eq(v)) : row(field).default(null).eq(v);
86+
} else if (op === '|!=' || op === '|!==') {
87+
subQuery = subQuery ? subQuery.or(row(field).default(null).ne(v)) : row(field).default(null).ne(v);
88+
} else if (op === '|>') {
89+
subQuery = subQuery ? subQuery.or(row(field).default(null).gt(v)) : row(field).default(null).gt(v);
90+
} else if (op === '|>=') {
91+
subQuery = subQuery ? subQuery.or(row(field).default(null).ge(v)) : row(field).default(null).ge(v);
92+
} else if (op === '|<') {
93+
subQuery = subQuery ? subQuery.or(row(field).default(null).lt(v)) : row(field).default(null).lt(v);
94+
} else if (op === '|<=') {
95+
subQuery = subQuery ? subQuery.or(row(field).default(null).le(v)) : row(field).default(null).le(v);
96+
} else if (op === '|in') {
97+
subQuery = subQuery ? subQuery.or(r.expr(v).default(r.expr([])).contains(row(field).default(null))) : r.expr(v).default(r.expr([])).contains(row(field).default(null));
98+
} else if (op === '|notIn') {
99+
subQuery = subQuery ? subQuery.or(r.expr(v).default(r.expr([])).contains(row(field).default(null)).not()) : r.expr(v).default(r.expr([])).contains(row(field).default(null)).not();
100+
}
101+
});
102+
});
103+
return subQuery;
98104
});
99-
});
100-
101-
if (subQuery) {
102-
query = query.filter(subQuery);
103105
}
104106

105107
if (params.orderBy) {

test/findAll.spec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,30 @@ describe('DSRethinkDBAdapter#findAll', function () {
2121
done();
2222
}).catch(done);
2323
});
24+
it('should filter users using the "in" operator', function (done) {
25+
var id;
26+
27+
adapter.findAll(User, {
28+
where: {
29+
age: {
30+
'in': [30]
31+
}
32+
}
33+
}).then(function (users) {
34+
assert.equal(users.length, 0);
35+
return adapter.create(User, { name: 'John' });
36+
}).then(function (user) {
37+
id = user.id;
38+
return adapter.findAll(User, {
39+
name: 'John'
40+
});
41+
}).then(function (users) {
42+
assert.equal(users.length, 1);
43+
assert.deepEqual(users[0], { id: id, name: 'John' });
44+
return adapter.destroy(User, id);
45+
}).then(function (destroyedUser) {
46+
assert.isFalse(!!destroyedUser);
47+
done();
48+
}).catch(done);
49+
});
2450
});

0 commit comments

Comments
 (0)