Skip to content

Commit 64fe70e

Browse files
iteufelojourmel
authored andcommitted
Fixed support for mssql limit/offset
1 parent 81b5847 commit 64fe70e

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

lib/dialects/mssql/index.js

+57
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,66 @@
33
var BaseDialect = require('../base');
44
var _ = require('underscore');
55
var util = require('util');
6+
var templateChecks = require('../../utils/templateChecks');
67

78
var Dialect = module.exports = function(builder) {
89
BaseDialect.call(this, builder);
10+
11+
this.blocks.set('limit', function(params) {
12+
return (params.offset) ? '' : 'TOP(' + builder._pushValue(params.limit) + ')';
13+
});
14+
15+
this.blocks.set('offset', function(params) {
16+
var pre = (!params.sort) ? 'ORDER BY 1 ' : '';
17+
if (params.limit) {
18+
return pre + 'OFFSET ' + params.offset + ' ROWS FETCH NEXT ' + params.limit + ' ROWS ONLY';
19+
}else {
20+
return pre + 'OFFSET ' + params.offset + ' ROWS';
21+
}
22+
});
23+
24+
this.templates.set('select', {
25+
pattern: '{with} {withRecursive} select {limit} {distinct} {fields} ' +
26+
'from {from} {table} {query} {select} {expression} {alias} ' +
27+
'{join} {condition} {group} {having} {sort} {offset}',
28+
defaults: {
29+
fields: {}
30+
},
31+
validate: function(type, params) {
32+
templateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);
33+
templateChecks.propType(type, params, 'with', 'object');
34+
templateChecks.propType(type, params, 'withRecursive', 'object');
35+
36+
templateChecks.propType(type, params, 'distinct', 'boolean');
37+
38+
templateChecks.propType(type, params, 'fields', ['array', 'object']);
39+
40+
templateChecks.propType(type, params, 'from', ['string', 'array', 'object']);
41+
42+
templateChecks.atLeastOneOfProps(type, params, ['table', 'query', 'select', 'expression']);
43+
templateChecks.onlyOneOfProps(type, params, ['table', 'query', 'select', 'expression']);
44+
45+
templateChecks.propType(type, params, 'table', 'string');
46+
templateChecks.propType(type, params, 'query', 'object');
47+
templateChecks.propType(type, params, 'select', 'object');
48+
templateChecks.propType(type, params, 'expression', ['string', 'object']);
49+
50+
templateChecks.propType(type, params, 'alias', ['string', 'object']);
51+
52+
templateChecks.propType(type, params, 'join', ['array', 'object']);
53+
54+
templateChecks.propType(type, params, 'condition', ['array', 'object']);
55+
templateChecks.propType(type, params, 'having', ['array', 'object']);
56+
57+
templateChecks.propType(type, params, 'group', ['string', 'array']);
58+
59+
templateChecks.propType(type, params, 'sort', ['string', 'array', 'object']);
60+
61+
templateChecks.propType(type, params, 'offset', ['number', 'string']);
62+
templateChecks.propType(type, params, 'limit', ['number', 'string']);
63+
}
64+
});
65+
966
};
1067

1168
util.inherits(Dialect, BaseDialect);

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"database"
1919
],
2020
"dependencies": {
21-
"underscore": "1.8.2"
21+
"underscore": "1.8.3"
2222
},
2323
"devDependencies": {
2424
"chai": "2.2.0",

0 commit comments

Comments
 (0)