Fix for #3928 - error invalid use of FETCH was based on a lack of sorting on MS-SQL platforms, this enforces a sort of some type no matter what.

This commit is contained in:
mike12345567 2022-02-04 16:17:36 +00:00
parent 0f11aea9d4
commit f61e15594b
3 changed files with 24 additions and 13 deletions

View File

@ -1,4 +1,4 @@
FROM mcr.microsoft.com/mssql/server FROM mcr.microsoft.com/mssql/server:2017-latest
ENV ACCEPT_EULA=Y ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=Passw0rd ENV SA_PASSWORD=Passw0rd

View File

@ -48,7 +48,20 @@ INSERT tasks
VALUES VALUES
('Processing', 1); ('Processing', 1);
INSERT people INSERT INTO people (name, age)
(name, age) VALUES ('Bob', '30'),
VALUES ('Bert', '10'),
('Bob', '30'); ('Jack', '12'),
('Mike', '31'),
('Dave', '44'),
('Jim', '43'),
('Kerry', '32'),
('Julie', '12'),
('Kim', '55'),
('Andy', '33'),
('John', '22'),
('Ruth', '66'),
('Robert', '88'),
('Bobert', '99'),
('Jan', '22'),
('Megan', '11');

View File

@ -166,15 +166,13 @@ class InternalBuilder {
addSorting(query: KnexQuery, json: QueryJson): KnexQuery { addSorting(query: KnexQuery, json: QueryJson): KnexQuery {
let { sort, paginate } = json let { sort, paginate } = json
if (!sort) {
return query
}
const table = json.meta?.table const table = json.meta?.table
if (sort) {
for (let [key, value] of Object.entries(sort)) { for (let [key, value] of Object.entries(sort)) {
const direction = value === SortDirection.ASCENDING ? "asc" : "desc" const direction = value === SortDirection.ASCENDING ? "asc" : "desc"
query = query.orderBy(`${table?.name}.${key}`, direction) query = query.orderBy(`${table?.name}.${key}`, direction)
} }
if (this.client === SqlClients.MS_SQL && !sort && paginate?.limit) { } else if (this.client === SqlClients.MS_SQL && paginate?.limit) {
// @ts-ignore // @ts-ignore
query = query.orderBy(`${table?.name}.${table?.primary[0]}`) query = query.orderBy(`${table?.name}.${table?.primary[0]}`)
} }