* Recursively optimizes query expressions
( expression: BasicExpression, collection: CollectionLike<T, TKey>, )
| 207 | * Recursively optimizes query expressions |
| 208 | */ |
| 209 | function optimizeQueryRecursive<T extends object, TKey extends string | number>( |
| 210 | expression: BasicExpression, |
| 211 | collection: CollectionLike<T, TKey>, |
| 212 | ): OptimizationResult<TKey> { |
| 213 | if (expression.type === `func`) { |
| 214 | switch (expression.name) { |
| 215 | case `eq`: |
| 216 | case `gt`: |
| 217 | case `gte`: |
| 218 | case `lt`: |
| 219 | case `lte`: |
| 220 | return optimizeSimpleComparison(expression, collection) |
| 221 | |
| 222 | case `and`: |
| 223 | return optimizeAndExpression(expression, collection) |
| 224 | |
| 225 | case `or`: |
| 226 | return optimizeOrExpression(expression, collection) |
| 227 | |
| 228 | case `in`: |
| 229 | return optimizeInArrayExpression(expression, collection) |
| 230 | } |
| 231 | } |
| 232 | |
| 233 | return { canOptimize: false, matchingKeys: new Set(), isExact: false } |
| 234 | } |
| 235 | |
| 236 | /** |
| 237 | * Checks if an expression can be optimized |
no test coverage detected