Skip to content

Commit

Permalink
Display the new column type when logging altered table columns.
Browse files Browse the repository at this point in the history
  • Loading branch information
prwater committed Jan 6, 2023
1 parent f6895e2 commit 6bd58b7
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 13 deletions.
2 changes: 1 addition & 1 deletion src/Audit/AlterAuditTable.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ private function compareTable(string $tableName): void
*/
private function compareTableColumns(TableMetadata $dataTable, TableMetadata $auditTable): void
{
$diff = TableColumnsMetadata::differentColumnTypes($dataTable->getColumns(), $auditTable->getColumns());
$diff = TableColumnsMetadata::differentColumnTypes($auditTable->getColumns(), $dataTable->getColumns());

if (!empty($diff->getColumns()))
{
Expand Down
24 changes: 12 additions & 12 deletions src/Metadata/TableColumnsMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,27 +57,27 @@ public static function combine(TableColumnsMetadata $columns1, TableColumnsMetad

//--------------------------------------------------------------------------------------------------------------------
/**
* Compares two lists of table columns and returns a list of table columns the are in both lists but have different
* metadata
* Compares two lists of table columns and returns a list of table columns that are in both lists but have different
* metadata.
*
* @param TableColumnsMetadata $columns1 The first list of table columns.
* @param TableColumnsMetadata $columns2 The second list of table columns.
* @param string[] $ignore The properties to be ignored.
* @param TableColumnsMetadata $oldColumns The old metadata of the table columns.
* @param TableColumnsMetadata $newColumns The new metadata of the table columns.
* @param string[] $ignore The properties to be ignored.
*
* @return TableColumnsMetadata
*/
public static function differentColumnTypes(TableColumnsMetadata $columns1,
TableColumnsMetadata $columns2,
array $ignore = []): TableColumnsMetadata
public static function differentColumnTypes(TableColumnsMetadata $oldColumns,
TableColumnsMetadata $newColumns,
array $ignore = []): TableColumnsMetadata
{
$diff = new TableColumnsMetadata();
foreach ($columns1->columns as $columnName => $column1)
foreach ($oldColumns->columns as $columnName => $oldColumn)
{
if (isset($columns2->columns[$columnName]))
if (isset($newColumns->columns[$columnName]))
{
if (!ColumnMetadata::compare($column1, $columns2->columns[$columnName], $ignore))
if (!ColumnMetadata::compare($oldColumn, $newColumns->columns[$columnName], $ignore))
{
$diff->appendTableColumn($column1);
$diff->appendTableColumn($newColumns->columns[$columnName]);
}
}
}
Expand Down
39 changes: 39 additions & 0 deletions test/MySql/AuditCommand/AlterColumn/AlterColumnTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php
declare(strict_types=1);

namespace SetBased\Audit\Test\MySql\AuditCommand\AlterColumn;

use SetBased\Audit\MySql\AuditDataLayer;
use SetBased\Audit\Test\MySql\AuditCommand\AuditCommandTestCase;

/**
* Tests for running audit with an altered table column.
*/
class AlterColumnTest extends AuditCommandTestCase
{
//--------------------------------------------------------------------------------------------------------------------
/**
* @inheritdoc
*/
public static function setUpBeforeClass(): void
{
self::$dir = __DIR__;

parent::setUpBeforeClass();
}

//--------------------------------------------------------------------------------------------------------------------
public function test01(): void
{
$this->runAudit();

AuditDataLayer::$dl->executeMulti(file_get_contents(__DIR__.'/config/alter_column.sql'));

$output = $this->runAudit();
self::assertSame('Type of TABLE1.c2 has been altered to varchar(80)', trim($output));
}

//--------------------------------------------------------------------------------------------------------------------
}

//----------------------------------------------------------------------------------------------------------------------
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
alter table `TABLE1` modify `c2` varchar(80);
12 changes: 12 additions & 0 deletions test/MySql/AuditCommand/AlterColumn/config/audit.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"database": {
"credentials": "credentials.ini"
},
"tables": {
"TABLE1": {
"audit": true,
"skip": null,
"alias": "t1"
}
}
}
6 changes: 6 additions & 0 deletions test/MySql/AuditCommand/AlterColumn/config/credentials.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[database]
host = 127.0.0.1
user = test
password = test
data_schema = test_data
audit_schema = test_audit
6 changes: 6 additions & 0 deletions test/MySql/AuditCommand/AlterColumn/config/setup.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
create table `TABLE1` (
c1 tinyint,
c2 varchar(40),
c4 int
);

0 comments on commit 6bd58b7

Please sign in to comment.