/**
  * make MySQL SELECT
  *
  * @see    Select
  * @param  string   $columnName
  * @param  mixed    $value
  * @param  int|null $limit
  * @throws RuntimeException
  * @throws Exception
  * @return AbstractTable this
  */
 public final function fillBy($columnName, $value, $limit = null)
 {
     if ($this->getLength() !== 0 || $this->isReadOnly()) {
         throw new RuntimeException('this object is already filled or readonly');
     }
     if (!isset($this->columnList[$columnName])) {
         throw new RuntimeException('column `' . $columnName . '` not exists');
     }
     $select = (new Select($this->getTableName()))->addCondition($columnName, $this->columnList[$columnName]['type'], $value);
     foreach ($this->columnList as $column => $settings) {
         $select->addExpression($column);
     }
     if ($limit !== null) {
         $select->setLimit($limit);
     }
     $request = new Request($this->config, $this->accessPoint);
     $result = $request->query($select->assemble());
     if ($result === false) {
         throw new RuntimeException('MySQL-Request failed: `' . $request->getLastQuery() . '`');
     }
     if ($result->getGroupCount() === 0) {
         throw new Exception('MySQL-Result is empty (Query: `' . $request->getLastQuery() . '`)');
     }
     # convert Date columns into `\DateTime`
     for ($i = 0; $i < $result->getGroupCount(); $i++) {
         foreach ($this->columnList as $column => $settings) {
             if (in_array($settings['type'], Query::LIST_DATE) && !$result->isNull($i, $column)) {
                 $result->set($i, $column, new DateTime($result->get($i, $column)));
             }
         }
     }
     $this->content = $result;
     return $this;
 }