77use Camcima \MySqlDiff \Model \Database ;
88use Camcima \MySqlDiff \Model \DatabaseDiff ;
99
10+ /**
11+ * Class Differ
12+ *
13+ * @package Camcima\MySqlDiff
14+ */
1015class Differ
1116{
1217 /**
@@ -32,7 +37,8 @@ public function diffDatabases(Database $fromDatabase, Database $toDatabase, arra
3237 }
3338
3439 $ toTable = $ toDatabase ->getTableByName ($ fromTable ->getName ());
35- if ($ fromTable ->generateCreationScript (true ) != $ toTable ->generateCreationScript (true )) {
40+
41+ if ($ fromTable ->generateCreationScript (true ) !== $ toTable ->generateCreationScript (true )) {
3642 $ changedTable = new ChangedTable ($ fromTable , $ toTable );
3743 $ this ->diffChangedTable ($ changedTable );
3844 $ databaseDiff ->addChangedTable ($ changedTable );
@@ -89,18 +95,19 @@ private function diffColumns(ChangedTable $changedTable)
8995
9096 // Determine changed columns
9197 $ fromColumn = $ fromTable ->getColumnByName ($ toColumn ->getName ());
92- if ($ toColumn ->generateCreationScript () != $ fromColumn ->generateCreationScript ()) {
98+ if ($ toColumn ->generateCreationScript () !== $ fromColumn ->generateCreationScript ()) {
9399 $ changedTable ->addChangedColumn ($ toColumn );
94100 continue ;
95101 }
96102
97103 if (!$ fromColumn ->getPreviousColumn () && !$ toColumn ->getPreviousColumn ()) {
98104 continue ;
99- } elseif (!$ fromColumn ->getPreviousColumn () && $ toColumn ->getPreviousColumn () instanceof Column) {
105+ }
106+ if (!$ fromColumn ->getPreviousColumn () && $ toColumn ->getPreviousColumn () instanceof Column) {
100107 $ this ->addChangedColumn ($ changedTable , $ toColumn );
101108 } elseif ($ fromColumn ->getPreviousColumn () instanceof Column && !$ toColumn ->getPreviousColumn ()) {
102109 $ this ->addChangedColumn ($ changedTable , $ toColumn );
103- } elseif ($ fromColumn ->getPreviousColumn ()->getName () != $ toColumn ->getPreviousColumn ()->getName ()) {
110+ } elseif ($ fromColumn ->getPreviousColumn ()->getName () !== $ toColumn ->getPreviousColumn ()->getName ()) {
104111 $ this ->addChangedColumn ($ changedTable , $ toColumn );
105112 }
106113 }
@@ -137,7 +144,7 @@ private function diffPrimaryKey(ChangedTable $changedTable)
137144 return ;
138145 }
139146
140- if ($ fromTable ->generatePrimaryKeyCreationScript () != $ toTable ->generatePrimaryKeyCreationScript ()) {
147+ if ($ fromTable ->generatePrimaryKeyCreationScript () !== $ toTable ->generatePrimaryKeyCreationScript ()) {
141148 $ changedTable ->setChangedPrimaryKeys ($ toTable ->getPrimaryKeys ());
142149 }
143150 }
@@ -167,7 +174,7 @@ private function diffIndexes(ChangedTable $changedTable)
167174
168175 // Determine changed indexes
169176 $ fromIndex = $ fromTable ->getIndexByName ($ toIndex ->getName ());
170- if ($ toIndex ->generateCreationScript () != $ fromIndex ->generateCreationScript ()) {
177+ if ($ toIndex ->generateCreationScript () !== $ fromIndex ->generateCreationScript ()) {
171178 $ changedTable ->addChangedIndex ($ toIndex );
172179 }
173180 }
@@ -198,7 +205,7 @@ private function diffForeignKeys(ChangedTable $changedTable)
198205
199206 // Determine changed foreign keys
200207 $ fromForeignKey = $ fromTable ->getForeignKeyByName ($ toForeignKey ->getName ());
201- if ($ toForeignKey ->generateCreationScript () != $ fromForeignKey ->generateCreationScript ()) {
208+ if ($ toForeignKey ->generateCreationScript () !== $ fromForeignKey ->generateCreationScript ()) {
202209 $ changedTable ->addChangedForeignKey ($ toForeignKey );
203210 }
204211 }
@@ -212,46 +219,69 @@ private function diffForeignKeys(ChangedTable $changedTable)
212219 */
213220 public function generateMigrationScript (DatabaseDiff $ databaseDiff , $ displayProgress = false )
214221 {
215- $ migrationScript = '' ;
216- $ migrationScript .= '# Disable Foreign Keys Check ' . PHP_EOL ;
217- $ migrationScript .= 'SET FOREIGN_KEY_CHECKS = 0; ' . PHP_EOL ;
218- $ migrationScript .= 'SET SQL_MODE = \'\'; ' . PHP_EOL ;
222+ return implode (PHP_EOL , $ this ->generateMigrationScriptArray ($ databaseDiff , $ displayProgress ));
223+ }
219224
220- $ migrationScript .= PHP_EOL . '# Deleted Tables ' . PHP_EOL ;
225+ /**
226+ * @param DatabaseDiff $databaseDiff
227+ * @param bool $displayProgress
228+ *
229+ * @return array
230+ */
231+ public function generateMigrationScriptArray (DatabaseDiff $ databaseDiff , $ displayProgress = false )
232+ {
233+ $ migrationScript = array ();
234+ $ migrationScript [] = '# Disable Foreign Keys Check ' ;
235+ $ migrationScript [] = 'SET FOREIGN_KEY_CHECKS = 0; ' ;
236+ $ migrationScript [] = 'SET SQL_MODE = \'\'; ' ;
237+
238+ $ migrationScript [] = '' ;
239+ $ migrationScript [] = '# Deleted Tables ' ;
221240 foreach ($ databaseDiff ->getDeletedTables () as $ deletedTable ) {
222- $ migrationScript .= PHP_EOL . sprintf ('-- deleted table `%s` ' . PHP_EOL . PHP_EOL , $ deletedTable ->getName ());
241+ $ migrationScript [] = '' ;
242+ $ migrationScript [] = sprintf ('-- deleted table `%s` ' , $ deletedTable ->getName ());
243+ $ migrationScript [] = '' ;
244+
223245
224246 if ($ displayProgress ) {
225- $ migrationScript . = sprintf ("SELECT 'Dropping table %s'; " . PHP_EOL , $ deletedTable ->getName ());
247+ $ migrationScript[] = sprintf ("SELECT 'Dropping table %s'; " , $ deletedTable ->getName ());
226248 }
227249
228- $ migrationScript . = sprintf ('DROP TABLE `%s`; ' . PHP_EOL , $ deletedTable ->getName ());
250+ $ migrationScript[] = sprintf ('DROP TABLE `%s`; ' , $ deletedTable ->getName ());
229251 }
230252
231- $ migrationScript .= PHP_EOL . '# Changed Tables ' . PHP_EOL ;
253+ $ migrationScript [] = '' ;
254+ $ migrationScript [] = '# Changed Tables ' ;
232255 foreach ($ databaseDiff ->getChangedTables () as $ changedTable ) {
233- $ migrationScript .= PHP_EOL . sprintf ('-- changed table `%s` ' . PHP_EOL . PHP_EOL , $ changedTable ->getName ());
256+ $ migrationScript [] = '' ;
257+ $ migrationScript [] = sprintf ('-- changed table `%s` ' , $ changedTable ->getName ());
258+ $ migrationScript [] = '' ;
234259
235260 if ($ displayProgress ) {
236- $ migrationScript . = sprintf ("SELECT 'Altering table %s'; " . PHP_EOL , $ changedTable ->getName ());
261+ $ migrationScript[] = sprintf ("SELECT 'Altering table %s'; " , $ changedTable ->getName ());
237262 }
238263
239- $ migrationScript . = $ changedTable ->generateAlterScript () . PHP_EOL ;
264+ $ migrationScript[] = $ changedTable ->generateAlterScript ();
240265 }
266+ $ migrationScript [] = '' ;
267+ $ migrationScript [] = '# New Tables ' ;
241268
242- $ migrationScript .= PHP_EOL . '# New Tables ' . PHP_EOL ;
243269 foreach ($ databaseDiff ->getNewTables () as $ newTable ) {
244- $ migrationScript .= PHP_EOL . sprintf ('-- new table `%s` ' . PHP_EOL . PHP_EOL , $ newTable ->getName ());
270+ $ migrationScript [] = '' ;
271+ $ migrationScript [] = sprintf ('-- new table `%s` ' , $ newTable ->getName ());
272+ $ migrationScript [] = '' ;
245273
246274 if ($ displayProgress ) {
247- $ migrationScript . = sprintf ("SELECT 'Creating table %s'; " . PHP_EOL , $ newTable ->getName ());
275+ $ migrationScript[] = sprintf ("SELECT 'Creating table %s'; " , $ newTable ->getName ());
248276 }
249277
250- $ migrationScript . = $ newTable ->generateCreationScript (true ) . PHP_EOL ;
278+ $ migrationScript[] = $ newTable ->generateCreationScript (true );
251279 }
252280
253- $ migrationScript .= PHP_EOL . '# Disable Foreign Keys Check ' . PHP_EOL ;
254- $ migrationScript .= 'SET FOREIGN_KEY_CHECKS = 1; ' . PHP_EOL ;
281+ $ migrationScript [] = '' ;
282+ $ migrationScript [] = '# Disable Foreign Keys Check ' ;
283+ $ migrationScript [] = 'SET FOREIGN_KEY_CHECKS = 1; ' ;
284+ $ migrationScript [] = '' ;
255285
256286 return $ migrationScript ;
257287 }
0 commit comments