Ejemplo n.º 1
0
		/// <summary>
		/// 
		/// </summary>
		public void Update()
		{
			using (var connection = new DatabaseConnectionProvider().GetConnection(_context.SqlConnectionString))
			{
				connection.Open();

				var exproc = connection.ExecuteScalar<int>("select object_id('" + _context.MetadataTable + "Register')");
				if (0 == exproc)
				{
					throw new Exception("В целевой БД отсутвует процедура " + _context.MetadataTable+"Register");
				}
				//сначала надо прорегистрировать скрипт, и только потом его выполнять, так как на него могут идти ссылки
				var register = "exec " + _context.MetadataTable +
							   "Register @code=@code,@name=@code,@content=@content, @hash=@hash,@revision=@revision,@filetime=@filetime,@comment=@comment";

				connection.ExecuteNonQuery(register, new { code = _context.ProjectName + ".project",comment=_context.FullUpdate||!_context.GitBaseRevision.ToBool()?"full":"diff", content = string.Join("\r\nGO\r\n", _context.SqlScripts), filetime = DateTime.Now, hash = _context.ResolvedUpdateRevision, revision = _context.ResolvedUpdateRevision.Substring(0, 7) });
				if (_context.OnlyRegister){
					_context.Log.Trace("Включен режим 'только регистрация', сам скрипт обновления не выполняется");
				}
				else{

					foreach (var script in _context.SqlScripts){
						_context.Log.Trace("Begin ExecuteSql : '"+script.Substring(0,Math.Min(100,script.Length))+"' at "+DateTime.Now.ToString());
						connection.ExecuteNonQuery(script, timeout: 30000);
						_context.Log.Trace("End ExecuteSql : '" + script.Substring(0, Math.Min(100, script.Length)) + "' at " + DateTime.Now.ToString());
					}
					
				}

			}
		}
		/// <summary>
		/// 
		/// </summary>
		public void Determine(){
			using (var connection = new DatabaseConnectionProvider().GetConnection(_context.SqlConnectionString)){
				connection.Open();
				var exproc = connection.ExecuteScalar<int>("select object_id('" + _context.MetadataTable + "')");
				if (0 == exproc){
					throw new Exception("В целевой БД отсутвует таблица "+_context.MetadataTable);
				}
				var currev =
					connection.ExecuteScalar<string>("select ActiveRevisionRevision from " + _context.MetadataTable +
					                                 "Full where Code='" + _context.ProjectName + ".project'");
				_context.GitBaseRevision = currev;
			}
		}