Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
 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);
            }
        }