original_string: public function add($params, $types = [], $prepend = false)
      {
          $put = $prepend ? 'array_unshift' : 'array_push';
          $typeMap = $this->getTypeMap()->setTypes($types);
          foreach ($params as $k => $p) {
              if ($p === 'literal') {
                  $put($this->_conditions, $k);
                  continue;
              }
  
              if ($p === 'identifier') {
                  $put($this->_conditions, new IdentifierExpression($k));
                  continue;
              }
  
              $type = $typeMap->type($k);
  
              if ($type !== null && !$p instanceof ExpressionInterface) {
                  $p = $this->_castToExpression($p, $type);
              }
  
              if ($p instanceof ExpressionInterface) {
                  $put($this->_conditions, $p);
                  continue;
              }
  
              $put($this->_conditions, ['value' => $p, 'type' => $type]);
          }
  
          return $this;
      }
code: public function add($params, $types = [], $prepend = false)
      {
          $put = $prepend ? 'array_unshift' : 'array_push';
          $typeMap = $this->getTypeMap()->setTypes($types);
          foreach ($params as $k => $p) {
              if ($p === 'literal') {
                  $put($this->_conditions, $k);
                  continue;
              }
  
              if ($p === 'identifier') {
                  $put($this->_conditions, new IdentifierExpression($k));
                  continue;
              }
  
              $type = $typeMap->type($k);
  
              if ($type !== null && !$p instanceof ExpressionInterface) {
                  $p = $this->_castToExpression($p, $type);
              }
  
              if ($p instanceof ExpressionInterface) {
                  $put($this->_conditions, $p);
                  continue;
              }
  
              $put($this->_conditions, ['value' => $p, 'type' => $type]);
          }
  
          return $this;
      }
code_tokens: public function add ( $ params , $ types = [ ] , $ prepend = false ) { $ put = $ prepend ? 'array_unshift' : 'array_push' ; $ typeMap = $ this -> getTypeMap ( ) -> setTypes ( $ types ) ; foreach ( $ params as $ k => $ p ) { if ( $ p === 'literal' ) { $ put ( $ this -> _conditions , $ k ) ; continue ; } if ( $ p === 'identifier' ) { $ put ( $ this -> _conditions , new IdentifierExpression ( $ k ) ) ; continue ; } $ type = $ typeMap -> type ( $ k ) ; if ( $ type !== null && ! $ p instanceof ExpressionInterface ) { $ p = $ this -> _castToExpression ( $ p , $ type ) ; } if ( $ p instanceof ExpressionInterface ) { $ put ( $ this -> _conditions , $ p ) ; continue ; } $ put ( $ this -> _conditions , [ 'value' => $ p , 'type' => $ type ] ) ; } return $ this ; }
docstring: Adds one or more arguments for the function call.
  
  @param array $params list of arguments to be passed to the function
  If associative the key would be used as argument when value is 'literal'
  @param array $types associative array of types to be associated with the
  passed arguments
  @param bool $prepend Whether to prepend or append to the list of arguments
  @see \Cake\Database\Expression\FunctionExpression::__construct() for more details.
  @return $this
docstring_tokens: Adds one or more arguments for the function call .