/**
  * Returns a TupleComparison object that can be used for matching all the fields
  * from $keys with the tuple values in $filter using the provided operator.
  *
  * @param \Cake\ORM\Query $query Target table's query
  * @param array $keys the fields that should be used for filtering
  * @param mixed $filter the value that should be used to match for $key
  * @param string $operator The operator for comparing the tuples
  * @return \Cake\Database\Expression\TupleComparison
  */
 protected function _createTupleCondition($query, $keys, $filter, $operator)
 {
     $types = [];
     $defaults = $query->defaultTypes();
     foreach ($keys as $k) {
         if (isset($defaults[$k])) {
             $types[] = $defaults[$k];
         }
     }
     return new TupleComparison($keys, $filter, $types, $operator);
 }
 /**
  * Appends any conditions required to load the relevant set of records in the
  * target table query given a filter key and some filtering values.
  *
  * @param \Cake\ORM\Query $query Target table's query
  * @param string $key the fields that should be used for filtering
  * @param mixed $filter the value that should be used to match for $key
  * @return \Cake\ORM\Query
  */
 protected function _addFilteringCondition($query, $key, $filter)
 {
     if (is_array($key)) {
         $types = [];
         $defaults = $query->defaultTypes();
         foreach ($key as $k) {
             if (isset($defaults[$k])) {
                 $types[] = $defaults[$k];
             }
         }
         return $query->andWhere(new TupleComparison($key, $filter, $types, 'IN'));
     }
     return $query->andWhere([$key . ' IN' => $filter]);
 }