@@ -37,13 +37,14 @@ var findExecutionNodes = helper.findExecutionNodes;
37
37
var findReferencedNodes = helper . findReferencedNodes ;
38
38
var getQueryMultiplePlansAndExecutions = helper . getQueryMultiplePlansAndExecutions ;
39
39
var removeAlwaysOnClusterRules = helper . removeAlwaysOnClusterRules ;
40
+
41
+ const ruleName = "use-index-for-sort" ;
40
42
41
43
////////////////////////////////////////////////////////////////////////////////
42
44
/// @brief test suite
43
45
////////////////////////////////////////////////////////////////////////////////
44
46
45
47
function optimizerRuleTestSuite ( ) {
46
- const ruleName = "use-index-for-sort" ;
47
48
const colName = "UnitTestsUseIndexForSort" ;
48
49
let c ;
49
50
@@ -195,6 +196,48 @@ function optimizerRuleTestSuite() {
195
196
} ;
196
197
}
197
198
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
+
198
240
jsunity . run ( optimizerRuleTestSuite ) ;
241
+ jsunity . run ( optimizerRuleWithOtherIndexTypesTestSuite ) ;
199
242
200
243
return jsunity . done ( ) ;
0 commit comments