10000 Bug fix/issue 10078 (#10081) · archerli/arangodb@9da2cad · GitHub
[go: up one dir, main page]

Skip to content

Commit 9da2cad

Browse files
authored
Bug fix/issue 10078 (arangodb#10081)
1 parent 636b2e5 commit 9da2cad

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

arangod/RocksDBEngine/RocksDBFulltextIndex.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class RocksDBFulltextIndex final : public RocksDBIndex {
6767

6868
bool canBeDropped() const override { return true; }
6969

70-
bool isSorted() const override { return true; }
70+
bool isSorted() const override { return false; }
7171

7272
bool hasSelectivityEstimate() const override { return false; }
7373

tests/js/server/aql/aql-optimizer-rule-use-index-for-sort-noncluster.js

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ var findExecutionNodes = helper.findExecutionNodes;
3737
var findReferencedNodes = helper.findReferencedNodes;
3838
var getQueryMultiplePlansAndExecutions = helper.getQueryMultiplePlansAndExecutions;
3939
var removeAlwaysOnClusterRules = helper.removeAlwaysOnClusterRules;
40+
41+
const ruleName = "use-index-for-sort";
4042

4143
////////////////////////////////////////////////////////////////////////////////
4244
/// @brief test suite
4345
////////////////////////////////////////////////////////////////////////////////
4446

4547
function optimizerRuleTestSuite() {
46-
const ruleName = "use-index-for-sort";
4748
const colName = "UnitTestsUseIndexForSort";
4849
let c;
4950

@@ -195,6 +196,48 @@ function optimizerRuleTestSuite() {
195196
};
196197
}
197198

199+
function optimizerRuleWithOtherIndexTypesTestSuite() {
200+
const cn = "UnitTestsCollection";
201+
202+
return {
203+
setUp : function () {
204+
internal.db._drop(cn);
205+
internal.db._create(cn, { numberOfShards: 3 });
206+
},
207+
208+
tearDown : function () {
209+
internal.db._drop(cn);
210+
},
211+
212+
testFulltextAscending : function () {
213+
internal.db[cn].ensureIndex({ type: "fulltext", fields: ["name"] });
214+
internal.db[cn].insert([ { name: "Agatha" }, { name: "Agathe" }, { name: "Aardvark" }, { name: "Aaron" }, { name: "Astrid" }, { name: "Ana" }, { name: "Anna" }, { name: "Anne" }, { name: "Ali" } ]);
215+
216+
let query = `FOR doc IN FULLTEXT(${cn}, 'name', 'prefix:a') SORT doc.name RETURN doc.name`;
217+
218+
let rules = AQL_EXPLAIN(query).plan.rules;
219+
assertEqual(-1, rules.indexOf(ruleName));
220+
221+
let results = AQL_EXECUTE(query).json;
222+
assertEqual([ "Aardvark", "Aaron", "Agatha", "Agathe", "Ali", "Ana", "Anna", "Anne", "Astrid" ], results);
223+
},
224+
225+
testFulltextDescending : function () {
226+
internal.db[cn].ensureIndex({ type: "fulltext", fields: ["name"] });
227+
internal.db[cn].insert([ { name: "Agatha" }, { name: "Agathe" }, { name: "Aardvark" }, { name: "Aaron" }, { name: "Astrid" }, { name: "Ana" }, { name: "Anna" }, { name: "Anne" }, { name: "Ali" } ]);
228+
229+
let query = `FOR doc IN FULLTEXT(${cn}, 'name', 'prefix:a') SORT doc.name DESC RETURN doc.name`;
230+
231+
let rules = AQL_EXPLAIN(query).plan.rules;
232+
assertEqual(-1, rules.indexOf(ruleName));
233+
234+
let results = AQL_EXECUTE(query).json;
235+
assertEqual([ "Astrid", "Anne", "Anna", "Ana", "Ali", "Agathe", "Agatha", "Aaron", "Aardvark" ], results);
236+
},
237+
};
238+
}
239+
198240
jsunity.run(optimizerRuleTestSuite);
241+
jsunity.run(optimizerRuleWithOtherIndexTypesTestSuite);
199242

200243
return jsunity.done();

tests/js/server/aql/aql-optimizer-rule-use-index-for-sort.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ var findExecutionNodes = helper.findExecutionNodes;
3737
var findReferencedNodes = helper.findReferencedNodes;
3838
var getQueryMultiplePlansAndExecutions = helper.getQueryMultiplePlansAndExecutions;
3939
var removeAlwaysOnClusterRules = helper.removeAlwaysOnClusterRules;
40+
41+
const ruleName = "use-index-for-sort";
4042

4143
////////////////////////////////////////////////////////////////////////////////
4244
/// @brief test suite
4345
////////////////////////////////////////////////////////////////////////////////
4446

4547
function optimizerRuleTestSuite() {
46-
var ruleName = "use-index-for-sort";
4748
var secondRuleName = "use-indexes";
4849
var removeCalculationNodes = "remove-unnecessary-calculations-2";
4950
var colName = "UnitTestsAqlOptimizer" + ruleName.replace(/-/g, "_");

0 commit comments

Comments
 (0)
0