diff --git a/src/index.js b/src/index.js index efff30b..fa92e86 100644 --- a/src/index.js +++ b/src/index.js @@ -336,9 +336,17 @@ class DSSqlAdapter { } if (op === '==' || op === '===') { - query = query.where(field, v) + if (v === null) { + query = query.whereNull(field) + } else { + query = query.where(field, v) + } } else if (op === '!=' || op === '!==') { - query = query.where(field, '!=', v) + if (v === null) { + query = query.whereNotNull(field) + } else { + query = query.where(field, '!=', v) + } } else if (op === '>') { query = query.where(field, '>', v) } else if (op === '>=') { @@ -397,9 +405,17 @@ class DSSqlAdapter { } else if (op === 'like') { query = query.where(field, 'like', v) } else if (op === '|==' || op === '|===') { - query = query.orWhere(field, v) + if (v === null) { + query = query.orWhereNull(field) + } else { + query = query.orWhere(field, v) + } } else if (op === '|!=' || op === '|!==') { - query = query.orWhere(field, '!=', v) + if (v === null) { + query = query.orWhereNotNull(field) + } else { + query = query.orWhere(field, '!=', v) + } } else if (op === '|>') { query = query.orWhere(field, '>', v) } else if (op === '|>=') { diff --git a/test/filterQuery.spec.js b/test/filterQuery.spec.js index 2018313..b8ff969 100644 --- a/test/filterQuery.spec.js +++ b/test/filterQuery.spec.js @@ -34,4 +34,28 @@ describe('DSSqlAdapter#filterQuery', function () { var filterQuery = adapter.filterQuery(User, { orderBy: 'name' }, { query }); assert.equal(filterQuery.toString(), 'select * from `test` order by `name` asc') }); + + it('should convert == null to IS NULL', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, { name: { '==' : null } }, { query }); + assert.equal(filterQuery.toString(), 'select * from `test` where `name` is null') + }); + + it('should convert != null to IS NOT NULL', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, { name: { '!=' : null } }, { query }); + assert.equal(filterQuery.toString(), 'select * from `test` where `name` is not null') + }); + + it('should convert |== null to OR field IS NULL', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, { name: 'Sean', age: { '|==' : null } }, { query }); + assert.equal(filterQuery.toString(), 'select * from `test` where `name` = \'Sean\' or `age` is null') + }); + + it('should convert |!= null to OR field IS NOT NULL', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, { name: 'Sean', age: { '|!=' : null } }, { query }); + assert.equal(filterQuery.toString(), 'select * from `test` where `name` = \'Sean\' or `age` is not null') + }); });