public final function Commit(IConnection $Connection, array $TablesOrderedByPersistingDependency, array $TablesOrderedByDiscardingDependency, Relational\Transaction $Transaction) { try { $Connection->BeginTransaction(); $GroupedDiscardedPrimaryKeys = $Transaction->GetDiscardedPrimaryKeyGroups(); foreach ($TablesOrderedByDiscardingDependency as $Table) { $TableName = $Table->GetName(); if (isset($GroupedDiscardedPrimaryKeys[$TableName])) { $this->DeleteRowsByPrimaryKeysQuery($Connection, $Table, $GroupedDiscardedPrimaryKeys[$TableName]); } } foreach ($Transaction->GetDiscardedCriteria() as $Criterion) { $this->DeleteWhereQuery($Connection, $Criterion); } foreach ($Transaction->GetProcedures() as $Procedure) { $this->ExecuteUpdate($Connection, $Procedure); } $GroupedPersistedRows = $Transaction->GetPersistedRowGroups(); foreach ($TablesOrderedByPersistingDependency as $Table) { $TableName = $Table->GetName(); if (isset($GroupedPersistedRows[$TableName])) { $Transaction->TriggerPrePersistEvent($Table); $this->Persister->PersistRows($Connection, $Table, $GroupedPersistedRows[$TableName]); $Transaction->TriggerPostPersistEvent($Table); } } $Connection->CommitTransaction(); } catch (\Exception $Exception) { $Connection->RollbackTransaction(); throw $Exception; } }
protected final function UpsertRows(IConnection $Connection, Table $Table, array $Rows, $ShouldReturnKeyData) { $QueryBuilder = $Connection->QueryBuilder(); $this->UpsertRowsQuery($QueryBuilder, $Table, $Rows, $ShouldReturnKeyData); $ExecutedQuery = $QueryBuilder->Build()->Execute(); if ($ShouldReturnKeyData) { return $ExecutedQuery->FetchAll(); } }
public function FillPrimaryKeys(IConnection $Connection, array $UnkeyedRows) { //Mysql will return the first auto increment from a multi insert $FirstInsertId = (int) $Connection->GetLastInsertIncrement(); $IncrementId = $FirstInsertId; foreach ($UnkeyedRows as $Row) { $Row[$this->IncrementColumn] = $this->IncrementColumn->ToPersistenceValue($IncrementId); $IncrementId++; } }
public function FillPrimaryKeys(IConnection $Connection, array $UnkeyedRows) { $PriamryKeyColumns = $this->GetPrimaryKeyColumns(); $PrimaryKeyColumn = reset($PriamryKeyColumns); $QueryBuilder = $Connection->QueryBuilder(); $QueryBuilder->AppendIdentifier('INSERT INTO # ', [$this->SequenceTable->GetName()]); $QueryBuilder->AppendIdentifier('(#)', [$this->SequenceTable->SequenceNameColumn->GetName()]); $QueryBuilder->Append(' VALUES '); $InsertRows = array_fill(0, count($UnkeyedRows), '(#)'); $QueryBuilder->AppendValue(implode(',', $InsertRows), $this->SequenceName); $QueryBuilder->Build()->Execute(); //Mysql will return the first inserted id $IncrementId = (int) $Connection->GetLastInsertIncrement(); foreach ($UnkeyedRows as $UnkeyedRow) { $UnkeyedRow[$PrimaryKeyColumn] = $PrimaryKeyColumn->ToPersistenceValue($IncrementId); $IncrementId++; } }
public function FillPrimaryKeys(IConnection $Connection, array $UnkeyedRows) { if (count($UnkeyedRows) === 0) { return; } $PrimaryKeyColumns = $this->GetPrimaryKeyColumns(); $QueryBuilder = $Connection->QueryBuilder(); $UUIDStatment = 'SELECT UUID()'; $UUIDStatments = array_fill(0, count($UnkeyedRows) * count($PrimaryKeyColumns) - 1, $UUIDStatment); array_unshift($UUIDStatments, $UUIDStatment . ' AS `UUID`'); $QueryBuilder->Append(implode(' UNION ALL ', $UUIDStatments)); $UUIDRows = $QueryBuilder->Build()->Execute()->FetchAll(); $Count = 0; foreach ($UnkeyedRows as $UnkeyedRow) { foreach ($PrimaryKeyColumns as $PrimaryKeyColumn) { $UUID = $UUIDRows[$Count]['UUID']; $UnkeyedRow[$PrimaryKeyColumn] = $PrimaryKeyColumn->ToPersistenceValue($UUID); $Count++; } } }
private function BuildColumns(IConnection $Connection, $DatabaseName, $TableName) { $QueryBuilder = $Connection->QueryBuilder(); $QueryBuilder->Append('SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE TRUE '); $QueryBuilder->AppendValue('AND `TABLE_SCHEMA` = # ', $DatabaseName); $QueryBuilder->AppendValue('AND `TABLE_NAME` = # ', $TableName); $QueryBuilder->AppendValue('ORDER BY `ORDINAL_POSITION`', $TableName); $Columns = []; foreach ($QueryBuilder->Build()->Execute()->FetchAll() as $ColumnRow) { $Column = $this->BuildColumn($Connection, $ColumnRow); $Columns[$Column->GetName()] = $Column; } return $Columns; }
public final function DropColumn(IConnection $Connection, Table $Table, Column $Column) { $QueryBuilder = $Connection->QueryBuilder(); $this->AppendDropColumnQuery($QueryBuilder, $Table, $Column); $QueryBuilder->Build()->Execute(); }
protected final function ExecuteUpdate(IConnection $Connection, Relational\Procedure $ProcedureToExecute) { $QueryBuilder = $Connection->QueryBuilder(); $this->UpdateQuery($QueryBuilder, $ProcedureToExecute); $QueryBuilder->Build()->Execute(); }
public function DropEngine(IConnection $Connection, QueryBuilder $QueryBuilder, Table $Table, Mysql\Tables\Engine $Trait) { $DefaultEngine = $Connection->FetchValue('SELECT @@storage_engine'); QueryBuilderExtensions::AppendAlterTable($QueryBuilder, $Table); $QueryBuilder->AppendIdentifier('ENGINE #', [$DefaultEngine]); }
protected function IdentifiersAreCaseSensitive(Relational\Queries\IConnection $Connection) { return (int) $Connection->FetchValue('SELECT @@lower_case_table_names') === 0; }
public function FillPrimaryKey(IConnection $Connection, Row $UnkeyedRow) { $InsertId = (int) $Connection->GetLastInsertIncrement(); $UnkeyedRow[$this->IncrementColumn] = $this->IncrementColumn->ToPersistenceValue($InsertId); }