mirror of https://gitee.com/bigwinds/arangodb
Bug fix 3.4/issue 10078 (#10083)
* fixed issue #10078: FULLTEXT with sort on same field not working * added test * simplify the implementation
This commit is contained in:
parent
e502feeea6
commit
4477bd1ed1
|
@ -1,6 +1,8 @@
|
|||
v3.4.9 (XXX-XX-XX)
|
||||
-------------------
|
||||
|
||||
* Fixed issue #10078: FULLTEXT with sort on same field not working.
|
||||
|
||||
* Fixed issue #10062: AQL: Could not extract custom attribute.
|
||||
|
||||
* Made the mechanism in the Web UI of replacing and upgrading a foxx app more clear.
|
||||
|
|
|
@ -80,7 +80,7 @@ class RocksDBFulltextIndex final : public RocksDBIndex {
|
|||
|
||||
bool canBeDropped() const override { return true; }
|
||||
|
||||
bool isSorted() const override { return true; }
|
||||
bool isSorted() const override { return false; }
|
||||
|
||||
bool hasSelectivityEstimate() const override { return false; }
|
||||
|
||||
|
|
|
@ -37,13 +37,14 @@ var findExecutionNodes = helper.findExecutionNodes;
|
|||
var findReferencedNodes = helper.findReferencedNodes;
|
||||
var getQueryMultiplePlansAndExecutions = helper.getQueryMultiplePlansAndExecutions;
|
||||
var removeAlwaysOnClusterRules = helper.removeAlwaysOnClusterRules;
|
||||
|
||||
const ruleName = "use-index-for-sort";
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief test suite
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function optimizerRuleTestSuite() {
|
||||
const ruleName = "use-index-for-sort";
|
||||
const colName = "UnitTestsUseIndexForSort";
|
||||
let c;
|
||||
|
||||
|
@ -195,6 +196,48 @@ function optimizerRuleTestSuite() {
|
|||
};
|
||||
}
|
||||
|
||||
function optimizerRuleWithOtherIndexTypesTestSuite() {
|
||||
const cn = "UnitTestsCollection";
|
||||
|
||||
return {
|
||||
setUp : function () {
|
||||
internal.db._drop(cn);
|
||||
internal.db._create(cn, { numberOfShards: 3 });
|
||||
},
|
||||
|
||||
tearDown : function () {
|
||||
internal.db._drop(cn);
|
||||
},
|
||||
|
||||
testFulltextAscending : function () {
|
||||
internal.db[cn].ensureIndex({ type: "fulltext", fields: ["name"] });
|
||||
internal.db[cn].insert([ { name: "Agatha" }, { name: "Agathe" }, { name: "Aardvark" }, { name: "Aaron" }, { name: "Astrid" }, { name: "Ana" }, { name: "Anna" }, { name: "Anne" }, { name: "Ali" } ]);
|
||||
|
||||
let query = `FOR doc IN FULLTEXT(${cn}, 'name', 'prefix:a') SORT doc.name RETURN doc.name`;
|
||||
|
||||
let rules = AQL_EXPLAIN(query).plan.rules;
|
||||
assertEqual(-1, rules.indexOf(ruleName));
|
||||
|
||||
let results = AQL_EXECUTE(query).json;
|
||||
assertEqual([ "Aardvark", "Aaron", "Agatha", "Agathe", "Ali", "Ana", "Anna", "Anne", "Astrid" ], results);
|
||||
},
|
||||
|
||||
testFulltextDescending : function () {
|
||||
internal.db[cn].ensureIndex({ type: "fulltext", fields: ["name"] });
|
||||
internal.db[cn].insert([ { name: "Agatha" }, { name: "Agathe" }, { name: "Aardvark" }, { name: "Aaron" }, { name: "Astrid" }, { name: "Ana" }, { name: "Anna" }, { name: "Anne" }, { name: "Ali" } ]);
|
||||
|
||||
let query = `FOR doc IN FULLTEXT(${cn}, 'name', 'prefix:a') SORT doc.name DESC RETURN doc.name`;
|
||||
|
||||
let rules = AQL_EXPLAIN(query).plan.rules;
|
||||
assertEqual(-1, rules.indexOf(ruleName));
|
||||
|
||||
let results = AQL_EXECUTE(query).json;
|
||||
assertEqual([ "Astrid", "Anne", "Anna", "Ana", "Ali", "Agathe", "Agatha", "Aaron", "Aardvark" ], results);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
jsunity.run(optimizerRuleTestSuite);
|
||||
jsunity.run(optimizerRuleWithOtherIndexTypesTestSuite);
|
||||
|
||||
return jsunity.done();
|
||||
|
|
|
@ -37,13 +37,14 @@ var findExecutionNodes = helper.findExecutionNodes;
|
|||
var findReferencedNodes = helper.findReferencedNodes;
|
||||
var getQueryMultiplePlansAndExecutions = helper.getQueryMultiplePlansAndExecutions;
|
||||
var removeAlwaysOnClusterRules = helper.removeAlwaysOnClusterRules;
|
||||
|
||||
const ruleName = "use-index-for-sort";
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief test suite
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function optimizerRuleTestSuite() {
|
||||
var ruleName = "use-index-for-sort";
|
||||
var secondRuleName = "use-indexes";
|
||||
var removeCalculationNodes = "remove-unnecessary-calculations-2";
|
||||
var colName = "UnitTestsAqlOptimizer" + ruleName.replace(/-/g, "_");
|
||||
|
|
Loading…
Reference in New Issue