original_string: public function andHaving(...$conditions): Select
      {
          $condition = $this->prepareCondition($conditions);
  
          if ($this->having instanceof CompositeBuilder
              && $this->having->getType() === 'AND') {
              $this->having->addPart($condition);
          } else {
              $this->having = new CompositeBuilder([$this->having, $condition]);
          }
          return $this;
      }
code: public function andHaving(...$conditions): Select
      {
          $condition = $this->prepareCondition($conditions);
  
          if ($this->having instanceof CompositeBuilder
              && $this->having->getType() === 'AND') {
              $this->having->addPart($condition);
          } else {
              $this->having = new CompositeBuilder([$this->having, $condition]);
          }
          return $this;
      }
code_tokens: public function andHaving ( ... $ conditions ) : Select { $ condition = $ this -> prepareCondition ( $ conditions ) ; if ( $ this -> having instanceof CompositeBuilder && $ this -> having -> getType ( ) === 'AND' ) { $ this -> having -> addPart ( $ condition ) ; } else { $ this -> having = new CompositeBuilder ( [ $ this -> having , $ condition ] ) ; } return $ this ; }
docstring: Adds a restriction over the groups of the query, forming a logical
  conjunction with any existing having restrictions
  
  @param  string[] $conditions the query restriction predicates
  
  @return Select
docstring_tokens: Adds a restriction over the groups of the query forming a logical conjunction with any existing having restrictions