diff --git a/src/Propel/Generator/Model/Diff/DatabaseComparator.php b/src/Propel/Generator/Model/Diff/DatabaseComparator.php index e32159d3d6..b45208abdd 100644 --- a/src/Propel/Generator/Model/Diff/DatabaseComparator.php +++ b/src/Propel/Generator/Model/Diff/DatabaseComparator.php @@ -304,15 +304,19 @@ public function compareTables(bool $caseInsensitive = false): int */ protected function isTableExcluded(Table $table): bool { - $tableName = $table->getName(); - if (in_array($tableName, $this->excludedTables, true)) { - return true; - } + $tableNames = [$table->getName(), $table->getCommonName()]; - foreach ($this->excludedTables as $excludedTableName) { - if (preg_match('/^' . str_replace('*', '.*', $excludedTableName) . '$/', $tableName)) { + foreach ($tableNames as $tableName) { + if (in_array($tableName, $this->excludedTables, true)) { return true; } + + foreach ($this->excludedTables as $excludedTableName) { + $pattern = str_replace('\\*', '.*', preg_quote($excludedTableName, '/')); + if (preg_match('/^' . $pattern . '$/', $tableName)) { + return true; + } + } } return false; diff --git a/tests/Propel/Tests/Generator/Model/Diff/DatabaseTableComparatorTest.php b/tests/Propel/Tests/Generator/Model/Diff/DatabaseTableComparatorTest.php index de21c3f99f..3da53fb0b4 100644 --- a/tests/Propel/Tests/Generator/Model/Diff/DatabaseTableComparatorTest.php +++ b/tests/Propel/Tests/Generator/Model/Diff/DatabaseTableComparatorTest.php @@ -573,6 +573,48 @@ public function testExcludedTablesWithoutRenaming() $this->assertInstanceOf('Propel\Generator\Model\Diff\DatabaseDiff', $diff); } + /** + * @return void + */ + public function testExcludedTablesMatchCommonNamesForSchemaQualifiedTables() + { + $d1 = new Database(); + $d1->setPlatform($this->platform); + $d1->setSchema('grapevine'); + $d1->addTable(new Table('t_audit_log')); + + $d2 = new Database(); + $d2->setPlatform($this->platform); + $d2->setSchema('grapevine'); + + $diff = DatabaseComparator::computeDiff($d1, $d2, false, false, true, ['t_audit_log']); + $this->assertFalse($diff); + + $diff = DatabaseComparator::computeDiff($d1, $d2, false, false, true, ['t_*']); + $this->assertFalse($diff); + + $diff = DatabaseComparator::computeDiff($d1, $d2, false, false, true, ['grapevine.t_*']); + $this->assertFalse($diff); + } + + /** + * @return void + */ + public function testExcludedTablePatternsTreatRegexCharactersAsLiterals() + { + $d1 = new Database(); + $d1->setPlatform($this->platform); + $d1->setSchema('grapevine'); + $d1->addTable(new Table('tXaudit_log')); + + $d2 = new Database(); + $d2->setPlatform($this->platform); + $d2->setSchema('grapevine'); + + $diff = DatabaseComparator::computeDiff($d1, $d2, false, false, true, ['t.*']); + $this->assertInstanceOf('Propel\Generator\Model\Diff\DatabaseDiff', $diff); + } + /** * @return void */