diff --git a/spec/search.spec.js b/spec/search.spec.js index 2a20a4ba9..f193857bc 100644 --- a/spec/search.spec.js +++ b/spec/search.spec.js @@ -492,6 +492,24 @@ describe("Search", () => { expect(noteCache.notes[searchResults[1].noteId].title).toEqual("Ukraine"); expect(noteCache.notes[searchResults[2].noteId].title).toEqual("Italy"); expect(noteCache.notes[searchResults[3].noteId].title).toEqual("Austria"); + + searchResults = await searchService.findNotesWithQuery('# note.parents.title = Europe orderBy note.labels.capital DESC', parsingContext); + expect(searchResults.length).toEqual(4); + expect(noteCache.notes[searchResults[0].noteId].title).toEqual("Austria"); + expect(noteCache.notes[searchResults[1].noteId].title).toEqual("Italy"); + expect(noteCache.notes[searchResults[2].noteId].title).toEqual("Ukraine"); + expect(noteCache.notes[searchResults[3].noteId].title).toEqual("Slovakia"); + + searchResults = await searchService.findNotesWithQuery('# note.parents.title = Europe orderBy note.labels.capital DESC limit 2', parsingContext); + expect(searchResults.length).toEqual(2); + expect(noteCache.notes[searchResults[0].noteId].title).toEqual("Austria"); + expect(noteCache.notes[searchResults[1].noteId].title).toEqual("Italy"); + + searchResults = await searchService.findNotesWithQuery('# note.parents.title = Europe orderBy #capital DESC limit 0', parsingContext); + expect(searchResults.length).toEqual(0); + + searchResults = await searchService.findNotesWithQuery('# note.parents.title = Europe orderBy #capital DESC limit 1000', parsingContext); + expect(searchResults.length).toEqual(4); }); // FIXME: test what happens when we order without any filter criteria diff --git a/src/services/search/expressions/order_by_and_limit.js b/src/services/search/expressions/order_by_and_limit.js index 6d1ad8ebc..3a91484c5 100644 --- a/src/services/search/expressions/order_by_and_limit.js +++ b/src/services/search/expressions/order_by_and_limit.js @@ -44,7 +44,7 @@ class OrderByAndLimitExp extends Expression { return 0; }); - if (this.limit) { + if (this.limit >= 0) { notes = notes.slice(0, this.limit); } diff --git a/src/services/search/parser.js b/src/services/search/parser.js index 73dd5ea55..3ff60278e 100644 --- a/src/services/search/parser.js +++ b/src/services/search/parser.js @@ -170,8 +170,8 @@ function getExpression(tokens, parsingContext, level = 0) { i++; } while (tokens[i] === '.'); - if (["asc", "desc"].includes(tokens[i + 1])) { - direction = tokens[i + 1]; + if (["asc", "desc"].includes(tokens[i])) { + direction = tokens[i]; i++; }