public override string[] GenerateCreateScripts(Configuration config) { var currentModel = new RelationalModelInfo(config, _options.NamespaceFilter); var baselineModel = new RelationalModelInfo(); // baseline model is empty return GetScripts(config, baselineModel, currentModel); }
/// <summary> /// Writes the specified model. /// </summary> public void WriteModel(RelationalModelInfo model, TextWriter tw) { using (var writer = new XmlTextWriter(tw)) { writer.Formatting = Formatting.Indented; Write(writer, model); } }
public Delta(Configuration configuration) { From = new RelationalModelInfo(configuration); To = new RelationalModelInfo(configuration); }
public abstract string[] GenerateUpgradeScripts(Configuration config, RelationalModelInfo baselineModel);
public string[] GenerateUpgradeScripts(Configuration config, RelationalModelInfo baselineModel) { return new string[] { }; // nothing to do }
private string[] GetScripts(Configuration config, RelationalModelInfo baselineModel, RelationalModelInfo currentModel) { var comparator = new RelationalModelComparator(_options.EnumOption); var transform = comparator.CompareModels(baselineModel, currentModel); var renderer = Renderer.GetRenderer(config); return CollectionUtils.Map(transform.Render(renderer, new RenderOptions(_options)), (Statement s) => s.Sql).ToArray(); }
public override string[] GenerateUpgradeScripts(Configuration config, RelationalModelInfo baselineModel) { var currentModel = new RelationalModelInfo(config, _options.NamespaceFilter); return GetScripts(config, baselineModel, currentModel); }
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); } }
/// <summary> /// Adds an explicit unique constraint for each column that is marked as unique. /// </summary> /// <remarks> /// This is to support backwards compatability with prior versions, where /// the Unique flag was set to indicate that a column had a unique constraint. /// </remarks> /// <param name="model"></param> private static void MakeUniqueConstraintsExplicit(RelationalModelInfo model) { foreach (var table in model.Tables) { // explicitly model any unique columns as unique constraints foreach (var col in table.Columns) { if (col.Unique) { table.UniqueKeys.Add(new ConstraintInfo(table, col)); } } } }