Skip to content

Commit e063a27

Browse files
committed
Add support for OR LIKE (|like) operator. Fixes #49
1 parent db63dd0 commit e063a27

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,8 @@ class DSSqlAdapter {
404404
}
405405
} else if (op === 'like') {
406406
query = query.where(field, 'like', v)
407+
} else if (op === '|like') {
408+
query = query.orWhere(field, 'like', v)
407409
} else if (op === '|==' || op === '|===') {
408410
if (v === null) {
409411
query = query.orWhereNull(field)

test/findAll.spec.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,31 @@ describe('DSSqlAdapter#findAll', function () {
2121
assert.equal(users[0].profileId, profile1.id);
2222
});
2323

24+
it('should filter using the "like" operator', function* () {
25+
let user1 = yield adapter.create(User, {name: 'Sean'});
26+
let post1 = yield adapter.create(Post, {userId: user1.id, content: 'foo'});
27+
let post2 = yield adapter.create(Post, {userId: user1.id, content: 'bar'});
28+
let post3 = yield adapter.create(Post, {userId: user1.id, content: 'baz'});
29+
30+
let posts = yield adapter.findAll(Post, {where: {'content': {'like': 'ba%'}}});
31+
assert.equal(posts.length, 2);
32+
assert.equal(posts[0].content, 'bar');
33+
assert.equal(posts[1].content, 'baz');
34+
});
35+
36+
it('should filter using the "or like" operator', function* () {
37+
let user1 = yield adapter.create(User, {name: 'Sean'});
38+
let post1 = yield adapter.create(Post, {userId: user1.id, content: 'foo'});
39+
let post2 = yield adapter.create(Post, {userId: user1.id, content: 'bar'});
40+
let post3 = yield adapter.create(Post, {userId: user1.id, content: 'baz'});
41+
42+
let posts = yield adapter.findAll(Post, {where: {'content': {'like': 'ba%', '|like': 'f%'}}});
43+
assert.equal(posts.length, 3);
44+
assert.equal(posts[0].content, 'foo');
45+
assert.equal(posts[1].content, 'bar');
46+
assert.equal(posts[2].content, 'baz');
47+
});
48+
2449
describe('near', function () {
2550
beforeEach(function * () {
2651
this.googleAddress = yield adapter.create(Address, { name : 'Google', latitude: 37.4219999, longitude: -122.0862515 });

0 commit comments

Comments
 (0)