Esempio n. 1
0
 /**
  * Object constructor.
  *
  * @param string  $dataSchema   Data database schema.
  * @param string  $auditSchema  Audit database schema.
  * @param string  $tableName    Table name.
  * @param array[] $auditColumns Audit columns from config file.
  */
 public function __construct($dataSchema, $auditSchema, $tableName, $auditColumns)
 {
     $this->dataSchema = $dataSchema;
     $this->auditSchema = $auditSchema;
     $this->tableName = $tableName;
     $this->auditColumns = $auditColumns;
     $dataColumns = new TableColumnsMetadata(AuditDataLayer::getTableColumns($this->dataSchema, $this->tableName));
     $auditColumns = AuditDataLayer::getTableColumns($this->auditSchema, $this->tableName);
     $auditColumns = $this->addNotNull($auditColumns);
     $auditColumns = new TableColumnsMetadata($auditColumns);
     $this->createDiffArray($dataColumns, $auditColumns);
 }
Esempio n. 2
0
 /**
  * Processed known tables.
  *
  * @return int The exit status.
  */
 private function knownTables()
 {
     $status = 0;
     foreach ($this->dataSchemaTables as $table) {
         if ($this->config['tables'][$table['table_name']]['audit']) {
             if (isset($this->configMetadata['table_columns'][$table['table_name']])) {
                 $tableColumns = $this->configMetadata['table_columns'][$table['table_name']];
             } else {
                 $tableColumns = [];
             }
             $configTable = new TableMetadata($table['table_name'], $this->config['database']['data_schema'], $tableColumns);
             $currentTable = new AuditTable($this->io, $configTable, $this->config['database']['audit_schema'], $this->auditColumnsMetadata, $this->config['tables'][$table['table_name']]['alias'], $this->config['tables'][$table['table_name']]['skip']);
             // Ensure an audit table exists.
             if (StaticDataLayer::searchInRowSet('table_name', $table['table_name'], $this->auditSchemaTables) === null) {
                 $currentTable->createAuditTable();
             }
             // Drop and create audit triggers and add new columns to the audit table.
             $ok = $currentTable->main($this->config['additional_sql']);
             if ($ok) {
                 $columns = new TableColumnsMetadata(AuditDataLayer::getTableColumns($this->config['database']['data_schema'], $table['table_name']));
                 $this->setConfigTableColumns($table['table_name'], $columns);
             } else {
                 $status += 1;
             }
         }
     }
     return $status;
 }
Esempio n. 3
0
 /**
  * Resolves the canonical column types of the audit table columns.
  */
 private function resolveCanonicalAuditColumns()
 {
     if (empty($this->config['audit_columns'])) {
         $this->auditColumnsMetadata = new TableColumnsMetadata();
     } else {
         $schema = $this->config['database']['audit_schema'];
         $tableName = '_TMP_' . uniqid();
         AuditDataLayer::createTemporaryTable($schema, $tableName, $this->config['audit_columns']);
         $columns = AuditDataLayer::getTableColumns($schema, $tableName);
         AuditDataLayer::dropTemporaryTable($schema, $tableName);
         foreach ($this->config['audit_columns'] as $audit_column) {
             $key = StaticDataLayer::searchInRowSet('column_name', $audit_column['column_name'], $columns);
             if (isset($audit_column['value_type'])) {
                 $columns[$key]['value_type'] = $audit_column['value_type'];
             }
             if (isset($audit_column['expression'])) {
                 $columns[$key]['expression'] = $audit_column['expression'];
             }
         }
         $this->auditColumnsMetadata = new TableColumnsMetadata($columns, 'AuditColumnMetadata');
     }
 }
Esempio n. 4
0
 /**
  * Selects metadata of all columns of table.
  *
  * @param string $schemaName The name of the table schema.
  * @param string $tableName  The name of the table.
  *
  * @return \array[]
  */
 private function getTableColumns($schemaName, $tableName)
 {
     $tables = AuditDataLayer::getTableColumns($schemaName, $tableName);
     return $tables;
 }
Esempio n. 5
0
 /**
  * Compare columns from table in data_schema with columns in config file.
  *
  * @return array<string,TableColumnsMetadata>
  */
 private function getTableColumnInfo()
 {
     $columnActual = new TableColumnsMetadata(AuditDataLayer::getTableColumns($this->auditSchemaName, $this->configTable->getTableName()));
     $columnsConfig = TableColumnsMetadata::combine($this->auditColumns, $this->configTable->getColumns());
     $columnsTarget = TableColumnsMetadata::combine($this->auditColumns, $this->dataTableColumnsDatabase);
     $newColumns = TableColumnsMetadata::notInOtherSet($columnsTarget, $columnActual);
     $obsoleteColumns = TableColumnsMetadata::notInOtherSet($columnsConfig, $columnsTarget);
     $alteredColumns = $this->getAlteredColumns();
     $this->logColumnInfo($newColumns, $obsoleteColumns, $alteredColumns);
     return ['new_columns' => $newColumns, 'obsolete_columns' => $obsoleteColumns, 'altered_columns' => $alteredColumns];
 }