You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: tests/js/server/aql/aql-optimizer-rule-move-calculations-down.js
+128-5Lines changed: 128 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -83,6 +83,12 @@ function optimizerRuleTestSuite () {
83
83
"FOR i IN 1..10 LET result = IS_STRING(i) LIMIT 1 RETURN result",
84
84
"FOR i IN 1..10 LET result = IS_STRING(i) SORT i RETURN result",
85
85
"FOR i IN 1..10 LET result = PUSH(i, i + 1) LET x = (FOR j IN result RETURN j) RETURN x",
86
+
"FOR i IN 1..10 LET result = (RETURN i + 1) FILTER i < 5 RETURN result",
87
+
"FOR i IN 1..10 LET a = (RETURN i + 1) LET b = (RETURN i + 2) FILTER i < 2 LET c = b FILTER i < 10 RETURN c",
88
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) FILTER i < 2 RETURN result",
89
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) LIMIT 1 RETURN result",
90
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) SORT i RETURN result",
91
+
"FOR i IN 1..10 LET result = (RETURN PUSH(i, i + 1)) LET x = (FOR j IN result RETURN j) RETURN x",
86
92
];
87
93
88
94
queries.forEach(function(query){
@@ -110,7 +116,17 @@ function optimizerRuleTestSuite () {
110
116
"FOR i IN 1..10 FILTER i < 10 LET result = IS_STRING(i) FOR j IN 1..2 RETURN j",
111
117
"FOR i IN 1..10 LET result = IS_STRING(i) COLLECT r = result RETURN r",
112
118
"FOR i IN 1..10 LET result = MAX(i) FILTER result < 3 RETURN result",
113
-
"FOR i IN 1..10 LET result = RAND() FILTER i < 10 RETURN result"
119
+
"FOR i IN 1..10 LET result = RAND() FILTER i < 10 RETURN result",
120
+
"LET a = (RETURN PASSTHRU(39)) FOR i IN 1..10 RETURN a",
121
+
"FOR i IN 1..10 LET result = (RETURN i < 5) FILTER result RETURN i",
122
+
"FOR i IN 1..10 LET result = (RETURN i + 1) SORT result RETURN i",
123
+
"FOR i IN 1..10 LET result = (RETURN i + 1) LET test = (FOR j IN 1..result RETURN j) RETURN test",
124
+
"FOR i IN 1..10 LIMIT 2 LET result = (RETURN i < 5) RETURN i",
125
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) FOR j IN 1..2 RETURN j",
126
+
"FOR i IN 1..10 FILTER i < 10 LET result = (RETURN IS_STRING(i)) FOR j IN 1..2 RETURN j",
127
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) COLLECT r = result RETURN r",
128
+
"FOR i IN 1..10 LET result = (RETURN MAX(i)) FILTER result < 3 RETURN result",
129
+
"FOR i IN 1..10 LET result = (RETURN RAND()) FILTER i < 10 RETURN result"
114
130
];
115
131
116
132
queries.forEach(function(query){
@@ -132,7 +148,15 @@ function optimizerRuleTestSuite () {
132
148
"FOR i IN 1..10 LET result = IS_STRING(i) LET test = result + 1 LIMIT 1 RETURN test",
133
149
"FOR i IN 1..10 LET result = IS_STRING(i) SORT i RETURN result",
134
150
"FOR i IN 1..10 LET result = i + 1 LET test = (FOR j IN 1..2 RETURN j) RETURN result IN test",
135
-
"FOR i IN 1..10 LET v = i * 2 LIMIT 2 LET result = v < 5 RETURN v"
151
+
"FOR i IN 1..10 LET v = i * 2 LIMIT 2 LET result = v < 5 RETURN v",
152
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) FILTER i < 10 RETURN result",
153
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) FILTER i < 10 FILTER i > 2 RETURN result",
154
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) FILTER i < 2 LIMIT 1 RETURN result",
155
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) LIMIT 1 RETURN result",
156
+
"FOR i IN 1..10 LET result = IS_STRING(i) LET test = (RETURN result + 1) LIMIT 1 RETURN test",
157
+
"FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) SORT i RETURN result",
158
+
"FOR i IN 1..10 LET result = (RETURN i + 1) LET test = (FOR j IN 1..2 RETURN j) RETURN result IN test",
159
+
"FOR i IN 1..10 LET v = (RETURN i * 2) LIMIT 2 LET result = (RETURN v < 5) RETURN v"
136
160
];
137
161
138
162
queries.forEach(function(query){
@@ -153,7 +177,14 @@ function optimizerRuleTestSuite () {
153
177
["FOR i IN 1..10 LET result = IS_STRING(i) LIMIT 1 RETURN result",["SingletonNode","CalculationNode","EnumerateListNode","LimitNode","CalculationNode","ReturnNode"]],
154
178
["FOR i IN 1..10 LET result = IS_STRING(i) LET test = result + 1 LIMIT 1 RETURN test",["SingletonNode","CalculationNode","EnumerateListNode","LimitNode","CalculationNode","CalculationNode","ReturnNode"]],
155
179
["FOR i IN 1..10 LET result = IS_STRING(i) SORT i RETURN result",["SingletonNode","CalculationNode","EnumerateListNode","SortNode","CalculationNode","ReturnNode"]],
156
-
["FOR i IN 1..10 LET v = i * 2 LIMIT 2 LET result = v < 5 RETURN v",["SingletonNode","CalculationNode","EnumerateListNode","LimitNode","CalculationNode","CalculationNode","ReturnNode"]]
180
+
["FOR i IN 1..10 LET v = i * 2 LIMIT 2 LET result = v < 5 RETURN v",["SingletonNode","CalculationNode","EnumerateListNode","LimitNode","CalculationNode","CalculationNode","ReturnNode"]],
181
+
["FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) FILTER i < 10 RETURN result",["SingletonNode","CalculationNode","EnumerateListNode","CalculationNode","FilterNode","SubqueryNode","ReturnNode"]],
182
+
["FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) FILTER i < 10 FILTER i > 2 RETURN result",["SingletonNode","CalculationNode","EnumerateListNode","CalculationNode","FilterNode","CalculationNode","FilterNode","SubqueryNode","ReturnNode"]],
183
+
["FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) FILTER i < 2 LIMIT 1 RETURN result",["SingletonNode","CalculationNode","EnumerateListNode","CalculationNode","FilterNode","LimitNode","SubqueryNode","ReturnNode"]],
184
+
["FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) LIMIT 1 RETURN result",["SingletonNode","CalculationNode","EnumerateListNode","LimitNode","SubqueryNode","ReturnNode"]],
185
+
["FOR i IN 1..10 LET result = IS_STRING(i) LET test = (RETURN result + 1) LIMIT 1 RETURN test",["SingletonNode","CalculationNode","EnumerateListNode","LimitNode","CalculationNode","SubqueryNode","ReturnNode"]],
186
+
["FOR i IN 1..10 LET result = (RETURN IS_STRING(i)) SORT i RETURN result",["SingletonNode","CalculationNode","EnumerateListNode","SortNode","SubqueryNode","ReturnNode"]],
187
+
["FOR i IN 1..10 LET v = (RETURN i * 2) LIMIT 2 LET result = (RETURN v < 5) RETURN v",["SingletonNode","CalculationNode","EnumerateListNode","LimitNode","SubqueryNode","SubqueryNode","ReturnNode"]]
157
188
];
158
189
159
190
plans.forEach(function(plan){
@@ -182,7 +213,21 @@ function optimizerRuleTestSuite () {
182
213
["FOR i IN 1..10 LET a = SUM(1..i) LET b = MIN(1..i) FILTER i == 3 RETURN [ a, b ]",[[6,1]]],
183
214
["FOR i IN 1..10 LET a = SUM(1..i) LIMIT 3 RETURN a",[1,3,6]],
184
215
["FOR i IN 1..10 LET a = SUM(1..i) LIMIT 3 FILTER a > 2 RETURN a",[3,6]],
185
-
["FOR i IN 1..10 LET a = SUM(1..i) LIMIT 5 FILTER i > 2 RETURN a",[6,10,15]]
216
+
["FOR i IN 1..10 LET a = SUM(1..i) LIMIT 5 FILTER i > 2 RETURN a",[6,10,15]],
217
+
["FOR i IN 1..10 LET a = (RETURN i + 1) FILTER i < 4 RETURN a[0]",[2,3,4]],
218
+
["FOR i IN 1..10 LET a = (RETURN i + 1) FILTER i < 7 FILTER i > 1 RETURN a[0]",[3,4,5,6,7]],
219
+
["FOR i IN 1..10 LET a = (RETURN i + 1) LIMIT 4 RETURN a[0]",[2,3,4,5]],
220
+
["FOR i IN 1..10 LET a = (RETURN i + 1) LET b = (RETURN a[0] + 1) FILTER i < 3 RETURN b[0]",[3,4]],
221
+
["FOR i IN 1..10 LET a = i + 1 LET b = (RETURN a + 1) LIMIT 4 RETURN b[0]",[3,4,5,6]],
222
+
["FOR i IN 1..10 LET a = (RETURN i + 1) LET b = (RETURN a[0] + 1) FILTER i < 5 LIMIT 4 RETURN b[0]",[3,4,5,6]],
223
+
["FOR i IN 1..10 LET a = (RETURN i + 1) LET x = (FOR j IN 1..i RETURN j) RETURN a[0] - 1 IN x ? 1 : 0",[1,1,1,1,1,1,1,1,1,1]],
224
+
["FOR i IN 1..10 LET a = (RETURN i + 1) LET x = (FOR j IN 1..i RETURN j) RETURN
10000
a[0] IN x ? 1 : 0",[0,0,0,0,0,0,0,0,0,0]],
225
+
["FOR i IN 1..10 LET a = (RETURN MAX(1..i)) FILTER i > 4 RETURN a[0]",[5,6,7,8,9,10]],
226
+
["FOR i IN 1..10 LET a = (RETURN SUM(1..i)) FILTER i == 3 RETURN a[0]",[6]],
227
+
["FOR i IN 1..10 LET a = (RETURN SUM(1..i)) LET b = (RETURN MIN(1..i)) FILTER i == 3 RETURN [ a[0], b[0] ]",[[6,1]]],
228
+
["FOR i IN 1..10 LET a = (RETURN SUM(1..i)) LIMIT 3 RETURN a[0]",[1,3,6]],
229
+
["FOR i IN 1..10 LET a = (RETURN SUM(1..i)) LIMIT 3 FILTER a[0] > 2 RETURN a[0]",[3,6]],
230
+
["FOR i IN 1..10 LET a = (RETURN SUM(1..i)) LIMIT 5 FILTER i > 2 RETURN a[0]",[6,10,15]]
186
231
];
187
232
188
233
queries.forEach(function(query){
@@ -260,7 +305,85 @@ function optimizerRuleTestSuite () {
260
305
261
306
assertEqual(resultDisabled.json,expected,query);
262
307
assertEqual(resultEnabled.json,expected,query);
263
-
}
308
+
},
309
+
310
+
testCollection4 : function(){
311
+
varexpected=[];
312
+
for(vari=0;i<100;++i){
313
+
expected.push("test"+i+"-"+i);
314
+
}
315
+
316
+
varquery="FOR i IN "+cn+" LET result = (RETURN CONCAT(i._key, '-', i.value)) SORT i.value RETURN result[0]";
varquery="FOR i IN 0..100 LET result = (UPDATE {_key: CONCAT('test', TO_STRING(i))} WITH {updated: true} IN "+cn+" RETURN CONCAT(NEW._key, '-', NEW.value)) LIMIT 10 RETURN result[0]";
0 commit comments