diff --git a/lib/mssql.js b/lib/mssql.js index cdad976..3c258ff 100644 --- a/lib/mssql.js +++ b/lib/mssql.js @@ -426,7 +426,7 @@ function buildLimit(limit, offset) { if (isNaN(offset)) { offset = 0; } - let sql = 'OFFSET ' + offset + ' ROWS'; + let sql = 'ORDER BY RowNum OFFSET ' + offset + ' ROWS'; if (limit >= 0) { sql += ' FETCH NEXT ' + limit + ' ROWS ONLY'; } diff --git a/test/mssql.test.js b/test/mssql.test.js index bbb1931..040661e 100644 --- a/test/mssql.test.js +++ b/test/mssql.test.js @@ -7,12 +7,21 @@ require('./init'); const should = require('should'); -let Post, PostWithUUID, PostWithStringId, db; +let User, Post, PostWithUUID, PostWithStringId, db, dbOSF; describe('mssql connector', function() { before(function() { /* global getDataSource */ db = getDataSource(); + dbOSF = getDataSource({ + supportsOffSetFetch: true, + }); + + User = dbOSF.define('User', { + id: {type: Number, generated: true, id: true}, + name: String, + age: Number, + }); Post = db.define('PostWithBoolean', { title: {type: String, length: 255, index: true}, @@ -242,6 +251,28 @@ describe('mssql connector', function() { ); }); + it('should support limit', function(done) { + Post.find({ + limit: 3, + }, (err, result) => { + should.not.exist(err); + should.exist(result); + result.should.have.length(3); + done(); + }); + }); + + it('should support limit with \'supportsOffsetFetch\'', function(done) { + User.find({ + limit: 3, + }, (err, result) => { + should.not.exist(err); + should.exist(result); + result.should.have.length(3); + done(); + }); + }); + context('regexp operator', function() { beforeEach(function deleteExistingTestFixtures(done) { Post.destroyAll(done);