コード例 #1
0
		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);
		}
コード例 #2
0
		/// <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);
			}
 		}
コード例 #3
0
ファイル: TableScripts.cs プロジェクト: nhannd/Xian
			public Delta(Configuration configuration)
			{
				From = new RelationalModelInfo(configuration);
				To = new RelationalModelInfo(configuration);
			}
コード例 #4
0
		public abstract string[] GenerateUpgradeScripts(Configuration config, RelationalModelInfo baselineModel);
コード例 #5
0
		public string[] GenerateUpgradeScripts(Configuration config, RelationalModelInfo baselineModel)
		{
			return new string[] { };	// nothing to do
		}
コード例 #6
0
		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();
		}
コード例 #7
0
		public override string[] GenerateUpgradeScripts(Configuration config, RelationalModelInfo baselineModel)
		{
			var currentModel = new RelationalModelInfo(config, _options.NamespaceFilter);

			return GetScripts(config, baselineModel, currentModel);
		}
コード例 #8
0
ファイル: DdlWriterApplication.cs プロジェクト: nhannd/Xian
		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);
			}
		}
コード例 #9
0
		/// <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));
					}
				}
			}
		}