public void CreatePatch(DocumentMapping mapping, IDDLRunner runner) { var systemFields = new string[] { DocumentMapping.LastModifiedColumn, DocumentMapping.DotNetTypeColumn, DocumentMapping.VersionColumn }; var missingNonSystemFields = Missing.Where(x => !systemFields.Contains(x.Name)).ToArray(); var fields = missingNonSystemFields.Select(x => mapping.FieldForColumn(x.Name)).ToArray(); if (fields.Length != missingNonSystemFields.Length) { throw new InvalidOperationException("The expected columns did not match with the DocumentMapping"); } var missingSystemColumns = Missing.Where(x => systemFields.Contains(x.Name)).ToArray(); if (missingSystemColumns.Any()) { missingSystemColumns.Each(col => { var patch = $"alter table {_tableName.QualifiedName} add column {col.ToDeclaration(col.Name.Length + 1)};"; runner.Apply(this, patch); }); } fields.Each(x => x.WritePatch(mapping, runner)); }