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;
}
}