You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
"use strict" ;
const splitFilter = require ( "split-filter" ) ;
const operations = require ( "../operations" ) ;
const NoChange = require ( "./util/no-change" ) ;
// FIXME: Have some sort of internally-cacheable way to find nodes of a certain type? So that different optimizer visitors don't need to filter the list of clauses over and over again...
module . exports = {
name : "collapse-where" ,
category : [ "normalization" ] ,
visitors : {
select : ( { collection , clauses } ) => {
let [ whereClauses , otherClauses ] = splitFilter ( clauses , ( clause ) => clause . type === "where" ) ;
if ( whereClauses . length > 1 ) {
let whereExpressions = whereClauses . map ( ( clause ) => clause . expression ) ;
let newWhere = operations . where ( operations . allOf ( whereExpressions ) ) ;
return operations . select ( collection , [ newWhere ] . concat ( otherClauses ) ) ;
} else {
return NoChange ;
}
}
}
} ;