Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions src/MySql/AuditDiff.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class AuditDiff
/**
* The metadata (additional) audit columns (as stored in the config file).
*
* @var TableColumnsMetadata
* @var array[]
*/
private $auditColumnsMetadata;

Expand Down Expand Up @@ -181,7 +181,7 @@ private function getDiff()
$this->diffColumns[$table['table_name']] = new AuditDiffTable($this->config['database']['data_schema'],
$this->config['database']['audit_schema'],
$table['table_name'],
$this->config['audit_columns'],
$this->auditColumnsMetadata,
$this->configMetadata[$table['table_name']]);
}
}
Expand Down Expand Up @@ -237,7 +237,7 @@ private function printDiff()
$rows = new DiffTableHelper($this->config['database']['data_schema'],
$this->config['database']['audit_schema'],
$tableName,
$this->config['audit_columns'],
$this->auditColumnsMetadata,
$this->full);
$rows->appendRows($columns);
$rows->addHighlighting();
Expand Down Expand Up @@ -306,6 +306,11 @@ private function resolveCanonicalAuditColumns()
foreach ($this->config['audit_columns'] as $audit_column)
{
$key = StaticDataLayer::searchInRowSet('column_name', $audit_column['column_name'], $columns);

if ($columns[$key]['is_nullable']==='NO')
{
$columns[$key]['column_type'] = sprintf('%s not null', $columns[$key]['column_type']);
}
if (isset($audit_column['value_type']))
{
$columns[$key]['value_type'] = $audit_column['value_type'];
Expand All @@ -316,7 +321,7 @@ private function resolveCanonicalAuditColumns()
}
}

$this->auditColumnsMetadata = new TableColumnsMetadata($columns, 'AuditColumnMetadata');
$this->auditColumnsMetadata = $columns;
}
}

Expand Down
62 changes: 46 additions & 16 deletions src/MySql/AuditDiffTable.php
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ public function removeMatchingColumns()
{
if (isset($audit) && isset($config))
{
if ($audit->getProperty('column_type')==$config->getProperty('column_type'))
$check = $this->compareCollationCharSetName($audit, $config);
if ($audit->getProperty('column_type')==$config->getProperty('column_type') && $check)
{
if (isset($auditColumn))
{
Expand All @@ -130,21 +131,8 @@ public function removeMatchingColumns()
{
if (isset($audit) && isset($config))
{
$config_character_set_name = $config->getProperty('character_set_name');
$config_collation_name = $config->getProperty('collation_name');
$audit_character_set_name = $audit->getProperty('character_set_name');
$audit_collation_name = $audit->getProperty('collation_name');

$data_character_set_name = $data->getProperty('character_set_name');
$data_collation_name = $data->getProperty('collation_name');

if (
$audit->getProperty('column_type')==$data->getProperty('column_type')
&& $audit_character_set_name==$data_character_set_name
&& $audit_character_set_name==$config_character_set_name
&& $audit_collation_name==$config_collation_name
&& $audit_collation_name==$data_collation_name
)
$check = $this->compareCollationCharSetName($data, $audit, $config);
if ($audit->getProperty('column_type')==$data->getProperty('column_type') && $check)
{
$metadata->removeColumn($columnName);
}
Expand Down Expand Up @@ -183,6 +171,48 @@ private function addNotNull($theColumns)
return $modifiedColumns;
}

//--------------------------------------------------------------------------------------------------------------------
/**
* Compare collations and character set names.
*
* @param MultiSourceColumnMetadata $audit Column information from audit schema.
* @param MultiSourceColumnMetadata $config Column information from config file.
* @param MultiSourceColumnMetadata|null $data Column information from data schema.
*
* @return array
*/
private function compareCollationCharSetName($audit, $config, $data = null)
{
$config_character_set_name = $config->getProperty('character_set_name');
$config_collation_name = $config->getProperty('collation_name');
$audit_character_set_name = $audit->getProperty('character_set_name');
$audit_collation_name = $audit->getProperty('collation_name');

if (isset($data))
{
$data_character_set_name = $data->getProperty('character_set_name');
$data_collation_name = $data->getProperty('collation_name');

if ($audit_character_set_name==$data_character_set_name
&& $audit_character_set_name==$config_character_set_name
&& $audit_collation_name==$config_collation_name
&& $audit_collation_name==$data_collation_name
)
{
return true;
}
}
else
{
if ($audit_character_set_name==$config_character_set_name && $audit_collation_name==$config_collation_name)
{
return true;
}
}

return false;
}

//--------------------------------------------------------------------------------------------------------------------
/**
* Get the difference between data and audit tables.
Expand Down