Skip to content

Commit 0ca5685

Browse files
author
Mike Eldridge
committedDec 7, 2015
handle null in queries via knex's whereNull family of calls
1 parent 7cac235 commit 0ca5685

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed
 

‎src/index.js

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,17 @@ class DSSqlAdapter {
336336
}
337337

338338
if (op === '==' || op === '===') {
339-
query = query.where(field, v)
339+
if (v === null) {
340+
query = query.whereNull(field)
341+
} else {
342+
query = query.where(field, v)
343+
}
340344
} else if (op === '!=' || op === '!==') {
341-
query = query.where(field, '!=', v)
345+
if (v === null) {
346+
query = query.whereNotNull(field)
347+
} else {
348+
query = query.where(field, '!=', v)
349+
}
342350
} else if (op === '>') {
343351
query = query.where(field, '>', v)
344352
} else if (op === '>=') {
@@ -397,9 +405,17 @@ class DSSqlAdapter {
397405
} else if (op === 'like') {
398406
query = query.where(field, 'like', v)
399407
} else if (op === '|==' || op === '|===') {
400-
query = query.orWhere(field, v)
408+
if (v === null) {
409+
query = query.orWhereNull(field)
410+
} else {
411+
query = query.orWhere(field, v)
412+
}
401413
} else if (op === '|!=' || op === '|!==') {
402-
query = query.orWhere(field, '!=', v)
414+
if (v === null) {
415+
query = query.orWhereNotNull(field)
416+
} else {
417+
query = query.orWhere(field, '!=', v)
418+
}
403419
} else if (op === '|>') {
404420
query = query.orWhere(field, '>', v)
405421
} else if (op === '|>=') {

‎test/filterQuery.spec.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,28 @@ describe('DSSqlAdapter#filterQuery', function () {
3434
var filterQuery = adapter.filterQuery(User, { orderBy: 'name' }, { query });
3535
assert.equal(filterQuery.toString(), 'select * from `test` order by `name` asc')
3636
});
37+
38+
it('should convert == null to IS NULL', function* () {
39+
var query = adapter.query.from('test');
40+
var filterQuery = adapter.filterQuery(User, { name: { '==' : null } }, { query });
41+
assert.equal(filterQuery.toString(), 'select * from `test` where `name` is null')
42+
});
43+
44+
it('should convert != null to IS NOT NULL', function* () {
45+
var query = adapter.query.from('test');
46+
var filterQuery = adapter.filterQuery(User, { name: { '!=' : null } }, { query });
47+
assert.equal(filterQuery.toString(), 'select * from `test` where `name` is not null')
48+
});
49+
50+
it('should convert |== null to OR field IS NULL', function* () {
51+
var query = adapter.query.from('test');
52+
var filterQuery = adapter.filterQuery(User, { name: 'Sean', age: { '|==' : null } }, { query });
53+
assert.equal(filterQuery.toString(), 'select * from `test` where `name` = \'Sean\' or `age` is null')
54+
});
55+
56+
it('should convert |!= null to OR field IS NOT NULL', function* () {
57+
var query = adapter.query.from('test');
58+
var filterQuery = adapter.filterQuery(User, { name: 'Sean', age: { '|!=' : null } }, { query });
59+
assert.equal(filterQuery.toString(), 'select * from `test` where `name` = \'Sean\' or `age` is not null')
60+
});
3761
});

0 commit comments

Comments
 (0)