nHydrate.Generator.Models.ColumnController.Verify C# (CSharp) Method

Verify() public method

public Verify ( ) : MessageCollection
return MessageCollection
		public override MessageCollection Verify()
		{
			try
			{
				var retval = new MessageCollection();
				retval.AddRange(base.Verify());

				var column = (Column)this.Object;

				#region Check valid name
				if (!ValidationHelper.ValidDatabaseIdenitifer(column.DatabaseName))
					retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextInvalidIdentifier, column.Name), column.Controller);
				if (!ValidationHelper.ValidCodeIdentifier(column.PascalName))
					retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextInvalidIdentifier, column.Name), column.Controller);
				if (!ValidationHelper.ValidFieldIdentifier(column.PascalName))
					retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextInvalidIdentifier, column.Name), column.Controller);

				#endregion

				#region Check valid name based on codefacade
				if ((!string.IsNullOrEmpty(column.CodeFacade)) && !ValidationHelper.ValidDatabaseIdenitifer(column.CodeFacade))
					retval.Add(MessageTypeConstants.Error, ValidationHelper.ErrorTextInvalidCodeFacade, column.Controller);

				if (ModelHelper.IsNumericType(column.DataType))
				{
					if ((column.Min >= double.MinValue) && (column.Max >= double.MinValue))
					{
						if (column.Min > column.Max)
							retval.Add(MessageTypeConstants.Error, ValidationHelper.ErrorTextMinMaxValueMismatch, column.Controller);
					}
				}
				else //Non-numeric
				{
					//Neither should be set
					if ((column.Min >= double.MinValue) || (column.Max >= double.MinValue))
					{
						retval.Add(MessageTypeConstants.Error, ValidationHelper.ErrorTextMinMaxValueInvalidType, column.Controller);
					}
				}
				#endregion

				#region Validate identity field
				if (column.Identity != IdentityTypeConstants.None)
				{
					//If this is an identity then must be of certain datatype
					switch (column.DataType)
					{
						//case System.Data.SqlDbType.TinyInt:
						case System.Data.SqlDbType.SmallInt:
						case System.Data.SqlDbType.Int:
						case System.Data.SqlDbType.BigInt:
						case System.Data.SqlDbType.UniqueIdentifier:
							break;
						default:
							retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextInvalidIdentityColumn, column.Name), column.Controller);
							break;
					}
				}
				#endregion

				#region Varchar Max only supported in SQL 2008

				//if (((ModelRoot)column.Root).SQLServerType == SQLServerTypeConstants.SQL2005)
				//{
				//  if (ModelHelper.SupportsMax(column.DataType) && column.Length == 0)
				//  {
				//    retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextColumnMaxNotSupported, column.Name), column.Controller);
				//  }
				//}

				#endregion

				#region Columns cannot be 0 length

				if (!ModelHelper.SupportsMax(column.DataType) && column.Length == 0)
				{
					retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextColumnLengthNotZero, column.Name), column.Controller);
				}

				#endregion

				#region Validate Decimals

				if (column.DataType == System.Data.SqlDbType.Decimal)
				{
					if (column.Length < 1 || column.Length > 38)
						retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextColumnDecimalPrecision, column.Name), column.Controller);
					if (column.Scale < 0 || column.Scale > column.Length)
						retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextColumnDecimalScale, column.Name), column.Controller);
				}

				#endregion

				#region Verify Datatypes for SQL 2005/2008

				if (!Column.IsSupportedType(column.DataType, ((ModelRoot)this.Object.Root).SQLServerType))
				{
					retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextDataTypeNotSupported, column.Name), column.Controller);
				}

				#endregion

				#region Computed Column

				if (column.ComputedColumn)
				{
					if (column.Formula.Trim() == "")
					{
						retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextComputeColumnNoFormula, column.Name), column.Controller);
					}

					if (column.PrimaryKey)
					{
						retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextComputeColumnNoPK, column.Name), column.Controller);
					}

				}

				if (!column.ComputedColumn && !string.IsNullOrEmpty(column.Formula))
				{
					retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextComputeNonColumnHaveFormula, column.Name), column.Controller);
				}

				#endregion

				#region Validate Defaults

				if (!string.IsNullOrEmpty(column.Default))
				{
					if (!column.CanHaveDefault())
					{
						retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextColumnCannotHaveDefault, column.Name), column.Controller);
					}
					else if (!column.IsValidDefault())
					{
						retval.Add(MessageTypeConstants.Warning, string.Format(ValidationHelper.ErrorTextColumnInvalidDefault, column.Name), column.Controller);
					}
				}

				#endregion

				#region Check Decimals for common error

				if (column.DataType == System.Data.SqlDbType.Decimal)
				{
					if (column.Length == 1)
						retval.Add(MessageTypeConstants.Warning, string.Format(ValidationHelper.ErrorTextDecimalColumnTooSmall, column.Name, column.Length.ToString()), column.Controller);
				}

				#endregion

				return retval;

			}
			catch (Exception ex)
			{
				throw;
			}

		}