code: public function where(
          $col,
          $operator = ClauseInterface::NO_OPERATOR,
          $value    = ClauseInterface::NO_VALUE,
          /*# bool */ $logicAnd = true,
          /*# bool */ $whereNot = false,
          /*# bool */ $rawMode  = false,
          /*# string */ $clause = 'where'
      ) {
          // $col is an array
          if (is_array($col)) {
              foreach ($col as $fld => $val) {
                  $this->where(
                      $fld, $val, ClauseInterface::NO_VALUE, $logicAnd,
                      $whereNot, $rawMode);
              }
  
          // $col is string or object
          } else {
              // grouped where
              if (is_object($col) && $col instanceof ExpressionInterface) {
                  $operator = ClauseInterface::NO_OPERATOR;
                  $value    = ClauseInterface::NO_VALUE;
  
              // 1 param provided, raw where provided
              } elseif (ClauseInterface::NO_OPERATOR === $operator) {
                  $rawMode  = true;
                  $value    = ClauseInterface::NO_VALUE;
  
              //  2 params provided
              } elseif (ClauseInterface::NO_VALUE === $value) {
                  if (is_array($operator)) {
                      $value    = $operator[1];
                      $operator = $operator[0];
                  } else {
                      $value    = $operator;
                      $operator = '=';
                  }
  
              // short version provided
              } elseif (WhereInterface::SHORT_FORM === $value) {
                  $value = ClauseInterface::NO_VALUE;
              }
  
              $this->clause_{$clause}[] = [
                  $rawMode, $whereNot, $logicAnd, $col, $operator, $value
              ];
          }
  
          return $this;
      }
docs: {@inheritDoc}