js-data-rethinkdb
Advanced tools
Comparing version 1.0.0-alpha.3 to 1.0.0-alpha.4
@@ -0,1 +1,6 @@ | ||
##### 1.0.0-alpha.4 - 23 November 2014 | ||
###### Backwards compatible bug fixes | ||
- Fixed improper use of r.row in nested queries | ||
##### 1.0.0-alpha.3 - 23 November 2014 | ||
@@ -2,0 +7,0 @@ |
{ | ||
"name": "js-data-rethinkdb", | ||
"description": "RethinkDB adapter for js-data.", | ||
"version": "1.0.0-alpha.3", | ||
"version": "1.0.0-alpha.4", | ||
"homepage": "http://www.js-data.io/docs/dsrethinkdbadapter", | ||
@@ -6,0 +6,0 @@ "repository": { |
@@ -8,2 +8,3 @@ var rethinkdbdash = require('rethinkdbdash'); | ||
var isObject = require('mout/lang/isObject'); | ||
var isEmpty = require('mout/lang/isEmpty'); | ||
var isString = require('mout/lang/isString'); | ||
@@ -57,49 +58,50 @@ var upperCase = require('mout/string/upperCase'); | ||
var query = r.db(options.db || this.defaults.db).table(resourceConfig.table || underscore(resourceConfig.name)); | ||
var subQuery; | ||
forOwn(params.where, function (criteria, field) { | ||
if (!isObject(criteria)) { | ||
params.where[field] = { | ||
'==': criteria | ||
}; | ||
} | ||
forOwn(criteria, function (v, op) { | ||
if (op === '==' || op === '===') { | ||
subQuery = subQuery ? subQuery.and(r.row(field).default(null).eq(v)) : r.row(field).default(null).eq(v); | ||
} else if (op === '!=' || op === '!==') { | ||
subQuery = subQuery ? subQuery.and(r.row(field).default(null).ne(v)) : r.row(field).default(null).ne(v); | ||
} else if (op === '>') { | ||
subQuery = subQuery ? subQuery.and(r.row(field).default(null).gt(v)) : r.row(field).default(null).gt(v); | ||
} else if (op === '>=') { | ||
subQuery = subQuery ? subQuery.and(r.row(field).default(null).ge(v)) : r.row(field).default(null).ge(v); | ||
} else if (op === '<') { | ||
subQuery = subQuery ? subQuery.and(r.row(field).default(null).lt(v)) : r.row(field).default(null).lt(v); | ||
} else if (op === '<=') { | ||
subQuery = subQuery ? subQuery.and(r.row(field).default(null).le(v)) : r.row(field).default(null).le(v); | ||
} else if (op === 'in') { | ||
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)); | ||
} else if (op === 'notIn') { | ||
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(); | ||
} else if (op === '|==' || op === '|===') { | ||
subQuery = subQuery ? subQuery.or(r.row(field).default(null).eq(v)) : r.row(field).default(null).eq(v); | ||
} else if (op === '|!=' || op === '|!==') { | ||
subQuery = subQuery ? subQuery.or(r.row(field).default(null).ne(v)) : r.row(field).default(null).ne(v); | ||
} else if (op === '|>') { | ||
subQuery = subQuery ? subQuery.or(r.row(field).default(null).gt(v)) : r.row(field).default(null).gt(v); | ||
} else if (op === '|>=') { | ||
subQuery = subQuery ? subQuery.or(r.row(field).default(null).ge(v)) : r.row(field).default(null).ge(v); | ||
} else if (op === '|<') { | ||
subQuery = subQuery ? subQuery.or(r.row(field).default(null).lt(v)) : r.row(field).default(null).lt(v); | ||
} else if (op === '|<=') { | ||
subQuery = subQuery ? subQuery.or(r.row(field).default(null).le(v)) : r.row(field).default(null).le(v); | ||
} else if (op === '|in') { | ||
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)); | ||
} else if (op === '|notIn') { | ||
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(); | ||
} | ||
if (!isEmpty(params.where)) { | ||
query = query.filter(function (row) { | ||
var subQuery; | ||
forOwn(params.where, function (criteria, field) { | ||
if (!isObject(criteria)) { | ||
params.where[field] = { | ||
'==': criteria | ||
}; | ||
} | ||
forOwn(criteria, function (v, op) { | ||
if (op === '==' || op === '===') { | ||
subQuery = subQuery ? subQuery.and(row(field).default(null).eq(v)) : row(field).default(null).eq(v); | ||
} else if (op === '!=' || op === '!==') { | ||
subQuery = subQuery ? subQuery.and(row(field).default(null).ne(v)) : row(field).default(null).ne(v); | ||
} else if (op === '>') { | ||
subQuery = subQuery ? subQuery.and(row(field).default(null).gt(v)) : row(field).default(null).gt(v); | ||
} else if (op === '>=') { | ||
subQuery = subQuery ? subQuery.and(row(field).default(null).ge(v)) : row(field).default(null).ge(v); | ||
} else if (op === '<') { | ||
subQuery = subQuery ? subQuery.and(row(field).default(null).lt(v)) : row(field).default(null).lt(v); | ||
} else if (op === '<=') { | ||
subQuery = subQuery ? subQuery.and(row(field).default(null).le(v)) : row(field).default(null).le(v); | ||
} else if (op === 'in') { | ||
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)); | ||
} else if (op === 'notIn') { | ||
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(); | ||
} else if (op === '|==' || op === '|===') { | ||
subQuery = subQuery ? subQuery.or(row(field).default(null).eq(v)) : row(field).default(null).eq(v); | ||
} else if (op === '|!=' || op === '|!==') { | ||
subQuery = subQuery ? subQuery.or(row(field).default(null).ne(v)) : row(field).default(null).ne(v); | ||
} else if (op === '|>') { | ||
subQuery = subQuery ? subQuery.or(row(field).default(null).gt(v)) : row(field).default(null).gt(v); | ||
} else if (op === '|>=') { | ||
subQuery = subQuery ? subQuery.or(row(field).default(null).ge(v)) : row(field).default(null).ge(v); | ||
} else if (op === '|<') { | ||
subQuery = subQuery ? subQuery.or(row(field).default(null).lt(v)) : row(field).default(null).lt(v); | ||
} else if (op === '|<=') { | ||
subQuery = subQuery ? subQuery.or(row(field).default(null).le(v)) : row(field).default(null).le(v); | ||
} else if (op === '|in') { | ||
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)); | ||
} else if (op === '|notIn') { | ||
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(); | ||
} | ||
}); | ||
}); | ||
return subQuery; | ||
}); | ||
}); | ||
if (subQuery) { | ||
query = query.filter(subQuery); | ||
} | ||
@@ -106,0 +108,0 @@ |
@@ -24,2 +24,28 @@ describe('DSRethinkDBAdapter#findAll', function () { | ||
}); | ||
it('should filter users using the "in" operator', function (done) { | ||
var id; | ||
adapter.findAll(User, { | ||
where: { | ||
age: { | ||
'in': [30] | ||
} | ||
} | ||
}).then(function (users) { | ||
assert.equal(users.length, 0); | ||
return adapter.create(User, { name: 'John' }); | ||
}).then(function (user) { | ||
id = user.id; | ||
return adapter.findAll(User, { | ||
name: 'John' | ||
}); | ||
}).then(function (users) { | ||
assert.equal(users.length, 1); | ||
assert.deepEqual(users[0], { id: id, name: 'John' }); | ||
return adapter.destroy(User, id); | ||
}).then(function (destroyedUser) { | ||
assert.isFalse(!!destroyedUser); | ||
done(); | ||
}).catch(done); | ||
}); | ||
}); |
29487
571