Ok, então depois de muita pesquisa e depuração, encontrei 2 coisas.
1) Minha instância de sequelize foi
sequelize.sequelize
, devido a um module.exports
com lodas. Que pena, não me lembrava disso e nem mencionei na pergunta. Sinto muito por isso. 2) O
offset
e limit
use fetch
e, portanto, gera sintaxe SQL inválida para SQL 2008. Eu tive que realizar uma consulta bruta, usando
sequelize.sequelize.query()
(já que minha instância foi sequelize.sequelize). aqui está meu código completo, incluindo roteamento expresso e formato feio para a consulta:
var express = require('express')
var app = express();
app.use('/tableName', function(req, res){
var page = req.params.page || 2;
var rowsPerPage = req.params.perpage || 30;
if(rowsPerPage > 100){
rowsPerPage = 100; //this limits how many per page
}
var theQuery = 'declare @rowsPerPage as bigint; '+
'declare @pageNum as bigint;'+
'set @rowsPerPage='+rowsPerPage+'; '+
'set @pageNum='+page+'; '+
'With SQLPaging As ( '+
'Select Top(@rowsPerPage * @pageNum) ROW_NUMBER() OVER (ORDER BY ID asc) '+
'as resultNum, * '+
'FROM tableName )'+
'select * from SQLPaging with (nolock) where resultNum > ((@pageNum - 1) * @rowsPerPage);';
sequelize.sequelize.query(theQuery)
.spread(function(result) {
res.json({result: result});
});
});
E se você (como eu) se pergunta por que
sequelize.sequelize
em vez de apenas sequelize
? Bem, isso ocorre porque
var sequelize
é um require()
de um arquivo com o seguinte module.exports
: module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
Então é por isso que apenas
sequelize.query()
foi retornado undefined
e sequelize.sequelize.query()
funciona bem, porque na verdade meu sequelize
variável é um objeto com o sequelize
propriedade sendo a instância de conexão de sequela real.