Completed
Pull Request — master (#55)
by Dima
03:18
created

DiffTableColumns::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 3
crap 1
1
<?php
2
//----------------------------------------------------------------------------------------------------------------------
3
namespace SetBased\Audit\MySql\Helper;
4
5
use SetBased\Audit\MySql\Metadata\TableColumnsMetadata;
6
7
//----------------------------------------------------------------------------------------------------------------------
8
/**
9
 * Class container for multi source column types.
10
 */
11
class DiffTableColumns
12
{
13
  //--------------------------------------------------------------------------------------------------------------------
14
  /**
15
   * Contains all column types from audit and data schemas.
16
   *
17
   * @var TableColumnsMetadata
18
   */
19
  private $multiSourceColumns = [];
20
21
  //--------------------------------------------------------------------------------------------------------------------
22
  /**
23
   * Object constructor
24
   *
25
   * @param TableColumnsMetadata $configColumns The table columns from config file.
26
   * @param TableColumnsMetadata $auditColumns  The table columns from audit schema.
27
   * @param TableColumnsMetadata $dataColumns   The table columns from data schema.
28
   */
29 4
  public function __construct($configColumns, $auditColumns, $dataColumns)
30
  {
31 4
    $this->appendColumnTypes(['config' => $configColumns, 'audit' => $auditColumns, 'data' => $dataColumns]);
32 4
  }
33
34
  //--------------------------------------------------------------------------------------------------------------------
35
  /**
36
   * Get columns types.
37
   *
38
   * @return TableColumnsMetadata
39
   */
40 4
  public function getColumns()
41
  {
42 4
    return $this->multiSourceColumns;
43
  }
44
45
  //--------------------------------------------------------------------------------------------------------------------
46
  /**
47
   * Add to array all columns types.
48
   *
49
   * @param TableColumnsMetadata[] $allTypes The metadata of the column.
50
   */
51 4
  private function appendColumnTypes($allTypes)
52
  {
53 4
    $allColumnNames = [];
54
55 4
    foreach ($allTypes as $source => $columns)
56
    {
57 4
      $data = array_keys($allTypes[$source]->getColumns());
58 4
      foreach ($data as $columnName)
59
      {
60 4
        if (!isset($allColumnNames[$columnName]))
61 4
        {
62 4
          $allColumnNames[$columnName] = $columnName;
63 4
        }
64 4
      }
65 4
    }
66
67 4
    $multiSourceColumns = [];
68 4
    foreach ($allColumnNames as $columnName => $columnData)
69
    {
70 4
      $multiSourceColumn = [];
71 4
      foreach ($allTypes as $typePrefix => $typesArray)
72
      {
73 4
        $columns = $typesArray->getColumns();
74 4
        if (isset($columns[$columnName]))
75 4
        {
76 4
          $multiSourceColumn['column_name'] = $columnName;
77 4
          $multiSourceColumn[$typePrefix]   = $columns[$columnName];
78 4
        }
79 4
      }
80 4
      $multiSourceColumns[$columnName] = $multiSourceColumn;
81 4
    }
82 4
    $this->multiSourceColumns = new TableColumnsMetadata($multiSourceColumns, 'MultiSourceColumnMetadata');
83 4
  }
84
85
  //--------------------------------------------------------------------------------------------------------------------
86
}
87
88
//----------------------------------------------------------------------------------------------------------------------
89