Completed
Pull Request — master (#43)
by Dima
09:15
created

DiffTableColumns::appendColumnTypes()   C

Complexity

Conditions 7
Paths 16

Size

Total Lines 33
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 33
ccs 0
cts 26
cp 0
rs 6.7272
cc 7
eloc 17
nc 16
nop 1
crap 56
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
  public function __construct($configColumns, $auditColumns, $dataColumns)
30
  {
31
    $this->appendColumnTypes(['config' => $configColumns, 'audit' => $auditColumns, 'data' => $dataColumns]);
32
  }
33
34
  //--------------------------------------------------------------------------------------------------------------------
35
  /**
36
   * Get columns types.
37
   *
38
   * @return TableColumnsMetadata
39
   */
40
  public function getColumns()
41
  {
42
    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
  private function appendColumnTypes($allTypes)
52
  {
53
    $allColumnNames = [];
54
55
    foreach ($allTypes as $source => $columns)
56
    {
57
      $data = array_keys($allTypes[$source]->getColumns());
58
      foreach ($data as $columnName)
59
      {
60
        if (!isset($allColumnNames[$columnName]))
61
        {
62
          $allColumnNames[$columnName] = $columnName;
63
        }
64
      }
65
    }
66
67
    $multiSourceColumns = [];
68
    foreach ($allColumnNames as $columnName => $columnData)
69
    {
70
      $multiSourceColumn = [];
71
      foreach ($allTypes as $typePrefix => $typesArray)
72
      {
73
        $columns = $typesArray->getColumns();
74
        if (isset($columns[$columnName]))
75
        {
76
          $multiSourceColumn['column_name'] = $columnName;
77
          $multiSourceColumn[$typePrefix]   = $columns[$columnName];
78
        }
79
      }
80
      $multiSourceColumns[$columnName] = $multiSourceColumn;
81
    }
82
    $this->multiSourceColumns = new TableColumnsMetadata($multiSourceColumns, 'MultiSourceColumnMetadata');
83
  }
84
85
  //--------------------------------------------------------------------------------------------------------------------
86
}
87
88
//----------------------------------------------------------------------------------------------------------------------
89