@@ -88,8 +88,16 @@ private function doCompareSchemas(
88
88
Schema $ fromSchema ,
89
89
Schema $ toSchema
90
90
) {
91
- $ diff = new SchemaDiff ();
92
- $ diff ->fromSchema = $ fromSchema ;
91
+ $ createdSchemas = [];
92
+ $ droppedSchemas = [];
93
+ $ createdTables = [];
94
+ $ alteredTables = [];
95
+ $ droppedTables = [];
96
+ $ createdSequences = [];
97
+ $ alteredSequences = [];
98
+ $ droppedSequences = [];
99
+
100
+ $ orphanedForeignKeys = [];
93
101
94
102
$ foreignKeysToTable = [];
95
103
@@ -98,29 +106,29 @@ private function doCompareSchemas(
98
106
continue ;
99
107
}
100
108
101
- $ diff -> newNamespaces [$ namespace ] = $ namespace ;
109
+ $ createdSchemas [$ namespace ] = $ namespace ;
102
110
}
103
111
104
112
foreach ($ fromSchema ->getNamespaces () as $ namespace ) {
105
113
if ($ toSchema ->hasNamespace ($ namespace )) {
106
114
continue ;
107
115
}
108
116
109
- $ diff -> removedNamespaces [$ namespace ] = $ namespace ;
117
+ $ droppedSchemas [$ namespace ] = $ namespace ;
110
118
}
111
119
112
120
foreach ($ toSchema ->getTables () as $ table ) {
113
121
$ tableName = $ table ->getShortestName ($ toSchema ->getName ());
114
122
if (! $ fromSchema ->hasTable ($ tableName )) {
115
- $ diff -> newTables [$ tableName ] = $ toSchema ->getTable ($ tableName );
123
+ $ createdTables [$ tableName ] = $ toSchema ->getTable ($ tableName );
116
124
} else {
117
125
$ tableDifferences = $ this ->diffTable (
118
126
$ fromSchema ->getTable ($ tableName ),
119
127
$ toSchema ->getTable ($ tableName ),
120
128
);
121
129
122
130
if ($ tableDifferences !== false ) {
123
- $ diff -> changedTables [$ tableName ] = $ tableDifferences ;
131
+ $ alteredTables [$ tableName ] = $ tableDifferences ;
124
132
}
125
133
}
126
134
}
@@ -131,7 +139,7 @@ private function doCompareSchemas(
131
139
132
140
$ table = $ fromSchema ->getTable ($ tableName );
133
141
if (! $ toSchema ->hasTable ($ tableName )) {
134
- $ diff -> removedTables [$ tableName ] = $ table ;
142
+ $ droppedTables [$ tableName ] = $ table ;
135
143
}
136
144
137
145
// also remember all foreign keys that point to a specific table
@@ -145,37 +153,37 @@ private function doCompareSchemas(
145
153
}
146
154
}
147
155
148
- foreach ($ diff -> removedTables as $ tableName => $ table ) {
156
+ foreach ($ droppedTables as $ tableName => $ table ) {
149
157
if (! isset ($ foreignKeysToTable [$ tableName ])) {
150
158
continue ;
151
159
}
152
160
153
161
foreach ($ foreignKeysToTable [$ tableName ] as $ foreignKey ) {
154
- if (isset ($ diff -> removedTables [strtolower ($ foreignKey ->getLocalTableName ())])) {
162
+ if (isset ($ droppedTables [strtolower ($ foreignKey ->getLocalTableName ())])) {
155
163
continue ;
156
164
}
157
165
158
- $ diff -> orphanedForeignKeys [] = $ foreignKey ;
166
+ $ orphanedForeignKeys [] = $ foreignKey ;
159
167
}
160
168
161
169
// deleting duplicated foreign keys present on both on the orphanedForeignKey
162
170
// and the removedForeignKeys from changedTables
163
171
foreach ($ foreignKeysToTable [$ tableName ] as $ foreignKey ) {
164
172
// strtolower the table name to make if compatible with getShortestName
165
173
$ localTableName = strtolower ($ foreignKey ->getLocalTableName ());
166
- if (! isset ($ diff -> changedTables [$ localTableName ])) {
174
+ if (! isset ($ alteredTables [$ localTableName ])) {
167
175
continue ;
168
176
}
169
177
170
- foreach ($ diff -> changedTables [$ localTableName ]->getDroppedForeignKeys () as $ droppedForeignKey ) {
178
+ foreach ($ alteredTables [$ localTableName ]->getDroppedForeignKeys () as $ droppedForeignKey ) {
171
179
assert ($ droppedForeignKey instanceof ForeignKeyConstraint);
172
180
173
181
// We check if the key is from the removed table if not we skip.
174
182
if ($ tableName !== strtolower ($ droppedForeignKey ->getForeignTableName ())) {
175
183
continue ;
176
184
}
177
185
178
- $ diff -> changedTables [$ localTableName ]->unsetDroppedForeignKey ($ droppedForeignKey );
186
+ $ alteredTables [$ localTableName ]->unsetDroppedForeignKey ($ droppedForeignKey );
179
187
}
180
188
}
181
189
}
@@ -184,11 +192,11 @@ private function doCompareSchemas(
184
192
$ sequenceName = $ sequence ->getShortestName ($ toSchema ->getName ());
185
193
if (! $ fromSchema ->hasSequence ($ sequenceName )) {
186
194
if (! $ this ->isAutoIncrementSequenceInSchema ($ fromSchema , $ sequence )) {
187
- $ diff -> newSequences [] = $ sequence ;
195
+ $ createdSequences [] = $ sequence ;
188
196
}
189
197
} else {
190
198
if ($ this ->diffSequence ($ sequence , $ fromSchema ->getSequence ($ sequenceName ))) {
191
- $ diff -> changedSequences [] = $ toSchema ->getSequence ($ sequenceName );
199
+ $ alteredSequences [] = $ toSchema ->getSequence ($ sequenceName );
192
200
}
193
201
}
194
202
}
@@ -204,9 +212,23 @@ private function doCompareSchemas(
204
212
continue ;
205
213
}
206
214
207
- $ diff -> removedSequences [] = $ sequence ;
215
+ $ droppedSequences [] = $ sequence ;
208
216
}
209
217
218
+ $ diff = new SchemaDiff (
219
+ $ createdTables ,
220
+ $ alteredTables ,
221
+ $ droppedTables ,
222
+ $ fromSchema ,
223
+ $ createdSchemas ,
224
+ $ droppedSchemas ,
225
+ $ createdSequences ,
226
+ $ alteredSequences ,
227
+ $ droppedSequences ,
228
+ );
229
+
230
+ $ diff ->orphanedForeignKeys = $ orphanedForeignKeys ;
231
+
210
232
return $ diff ;
211
233
}
212
234
0 commit comments