/**
  * @param \DatabaseExporterImporter\Entity\Table        $table
  * @param \DatabaseExporterImporter\Entity\DataColumn[] $values
  * @return int
  * @throws \RuntimeException
  */
 protected function insertRecord(Table $table, array $values)
 {
     $sqlValues = [];
     foreach ($values as $value) {
         $sqlValues[$value->getName()] = $value->getValue();
     }
     $statement = $this->connection->prepare('INSERT INTO ' . $table->getName() . ' (' . implode(', ', array_keys($sqlValues)) . ') ' . 'VALUES(' . substr(str_repeat('?, ', count($sqlValues)), 0, -2) . ')');
     if (false === $statement->execute(array_values($sqlValues))) {
         $errors = $statement->errorInfo();
         throw new \RuntimeException($errors[2]);
     }
     return $this->connection->lastInsertId();
 }
 /**
  * @param \DatabaseExporterImporter\Entity\Table $table
  * @throws \RuntimeException
  * @return array
  */
 protected function getTableData(Table $table)
 {
     $sql = 'SELECT * FROM ' . $table->getName() . ' WHERE ';
     $sqlAndParts = ['1 = 1'];
     $queryParams = [];
     if (null !== $this->primaryTableName) {
         if ($table->getName() === $this->primaryTableName) {
             $sqlAndParts[] = $this->primaryKeyColumn . ' = :value';
             $queryParams[':value'] = $this->primaryKey;
         } else {
             foreach ($this->foreignValueProvider->setTable($table)->setTables($this->tables)->getForeignKeyValues() as $columnName => $columnValues) {
                 $conditionValuesStubs = [];
                 foreach ((array) $columnValues as $counter => $columnValue) {
                     $conditionValuesStubs[] = ':' . $columnName . $counter;
                     $queryParams[':' . $columnName . $counter] = $columnValue;
                 }
                 $sqlAndParts[] = $columnName . ' IN(' . implode(', ', $conditionValuesStubs) . ')';
             }
         }
     }
     return $this->getQueryResult($sql . implode(' AND ', $sqlAndParts), $queryParams);
 }
 public function test()
 {
     $tableName = mt_rand();
     $subject = new Table($tableName);
     static::assertSame($tableName, $subject->getName());
     static::assertCount(0, $subject->getColumns());
     $columnName = mt_rand();
     $column = new Column($columnName);
     $subject->addColumn($column);
     static::assertCount(1, $subject->getColumns());
     $firstColumn = reset($subject->getColumns());
     static::assertSame($columnName, $firstColumn->getName());
     $dataRow = new DataRow();
     static::assertCount(0, $subject->getDataRows());
     $subject->addDataRow($dataRow);
     static::assertCount(1, $subject->getDataRows());
 }