Beispiel #1
0
 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++;
     }
 }
Beispiel #5
0
 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++;
         }
     }
 }
Beispiel #6
0
 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();
 }
Beispiel #8
0
 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]);
 }
Beispiel #10
0
 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);
 }