/** * @param \DatabaseExporterImporter\Entity\Table $table * @return \DatabaseExporterImporter\Entity\Column|null */ public function getAutoIncrementColumn(Table $table) { foreach ($table->getColumns() as $column) { if (true === $column->isAutoIncrement()) { return $column; } } }
public function test() { $table = new Table('table_name'); $column1 = new Column('id'); $column1->setAutoIncrement(true); $column2 = new Column('name'); $table->addColumn($column1)->addColumn($column2); $subject = new AutoIncrementTableColumnFinder(); static::assertSame($column1->getName(), $subject->getAutoIncrementColumn($table)->getName()); static::assertNull($subject->getAutoIncrementColumn(new Table('test_table'))); }
/** * @param \DatabaseExporterImporter\Entity\Table $table * @return array */ public function getDataRows(Table $table) { $dataRows = []; foreach ($table->getDataRows() as $dataRow) { $row = []; foreach ($dataRow->getDataColumns() as $dataColumn) { $row[$dataColumn->getName()] = $dataColumn->getValue(); } $dataRows[] = $row; } return $dataRows; }
/** * @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 * @return array */ public function getTableColumns(Table $table) { $columns = []; foreach ($table->getColumns() as $column) { $columnExport = ['name' => $column->getName()]; if (true === $column->isAutoIncrement()) { $columnExport['auto_increment'] = true; } $foreignKey = $column->getForeignKey(); if (null !== $foreignKey) { $columnExport['foreign_key'] = ['table_name' => $foreignKey->getTableName(), 'column_name' => $foreignKey->getColumnName()]; } $columns[] = $columnExport; } return $columns; }
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()); }
/** * @throws \InvalidArgumentException * @return \DatabaseExporterImporter\Entity\Table[] */ private function createTables() { $tables = []; foreach ($this->parsedData as $tableName => $tableData) { $table = new Table($tableName); if (false === is_array($tableData)) { throw new \InvalidArgumentException('The data structure is incorrect.'); } if (false === array_key_exists('columns', $tableData)) { throw new \InvalidArgumentException("The data structure is incorrect: 'columns' key is absent."); } foreach ($this->columnsCreator->getColumns($tableData['columns']) as $column) { $table->addColumn($column); } foreach ($this->dataRowsCreator->getDataRows($tableData['data_rows']) as $dataRow) { $table->addDataRow($dataRow); } $tables[] = $table; } return $tables; }
/** * @return array */ public function getForeignKeyValues() { $values = []; foreach ($this->table->getColumns() as $column) { if (null !== $column->getForeignKey()) { $values[$column->getName()] = []; foreach ($this->tables as $existingTable) { if ($column->getForeignKey()->getTableName() === $existingTable->getName()) { foreach ($existingTable->getDataRows() as $dataRow) { foreach ($dataRow->getDataColumns() as $dataColumn) { if ($dataColumn->getName() === $column->getForeignKey()->getColumnName()) { $values[$column->getName()][] = $dataColumn->getValue(); } } } } } } } return $values; }
/** * @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); }