/// <summary> /// Returns a <see cref="RelationalModelTransform"/> object that describe the changes /// required to transform the initial model into the desired model. /// </summary> /// <param name="initial"></param> /// <param name="desired"></param> /// <returns></returns> public RelationalModelTransform CompareModels(RelationalModelInfo initial, RelationalModelInfo desired) { var changes = new List <RelationalModelChange>(); // compare tables changes.AddRange( CompareSets(initial.Tables, desired.Tables, AddTable, DropTable, CompareTables) ); if (_enumOption != EnumOptions.None) { // compare enumeration values changes.AddRange( CompareSets(initial.Enumerations, desired.Enumerations, item => AddEnumeration(desired.GetTable(item.Table), item), item => DropEnumeration(initial.GetTable(item.Table), item), (x, y) => CompareEnumerations(desired.GetTable(y.Table), x, y)) ); } return(new RelationalModelTransform(changes)); }
public string[] GenerateUpgradeScripts(Configuration config, RelationalModelInfo baselineModel) { return(new string[] { }); // nothing to do }
private static void WriteOutput(TextWriter writer, DdlWriterCommandLine cmdLine) { try { // load the persistent store defined by the current set of binaries var store = (PersistentStore)PersistentStoreRegistry.GetDefaultStore(); // get config // run pre-processors var preProcessor = new PreProcessor(cmdLine.CreateIndexes, cmdLine.AutoIndexForeignKeys); preProcessor.Process(store); // if this is an upgrade, load the baseline model file RelationalModelInfo baselineModel = null; if (!string.IsNullOrEmpty(cmdLine.BaselineModelFile)) { var serializer = new RelationalModelSerializer(); baselineModel = serializer.ReadModel(File.OpenText(cmdLine.BaselineModelFile)); } switch (cmdLine.Format) { case DdlWriterCommandLine.FormatOptions.sql: // create script writer and set properties based on command line var scriptWriter = new ScriptWriter(store) { Options = new RelationalSchemaOptions { EnumOption = cmdLine.EnumOption, SuppressForeignKeys = !cmdLine.CreateForeignKeys, SuppressUniqueConstraints = !cmdLine.CreateUniqueKeys, NamespaceFilter = new RelationalSchemaOptions.NamespaceFilterOption(cmdLine.Namespace) }, QualifyNames = cmdLine.QualifyNames, BaselineModel = baselineModel }; // decide whether to write a creation or upgrade script, depending on if a baseline was supplied if (baselineModel == null) { scriptWriter.WriteCreateScript(writer); } else { scriptWriter.WriteUpgradeScript(writer); } break; case DdlWriterCommandLine.FormatOptions.xml: // we don't currently support outputting upgrades in XML format if (baselineModel != null) { throw new NotSupportedException("Upgrade is not compatible with XML output format."); } var serializer = new RelationalModelSerializer(); var relationalModelInfo = new RelationalModelInfo(store, new RelationalSchemaOptions.NamespaceFilterOption(cmdLine.Namespace)); serializer.WriteModel(relationalModelInfo, writer); break; default: throw new NotSupportedException(string.Format("{0} is not a valid output format.", cmdLine.Format)); } } catch (Exception e) { Log(e, LogLevel.Error); } }