/// <summary>
 /// This method is called to compare the actual value read to expected. Expected value must be either dbnull or from the given type.
 /// Actual value can be any.
 /// </summary>
 public bool CompareValues(SqlRandomTableColumn columnInfo, object expected, object actual)
 {
     ValidateColumnInfo(columnInfo);
     return(CompareValuesInternal(columnInfo, expected, actual));
 }
 protected abstract bool CompareValuesInternal(SqlRandomTableColumn columnInfo, object expected, object actual);
 protected abstract object ReadInternal(DbDataReader reader, int ordinal, SqlRandomTableColumn columnInfo, Type asType);
 /// <summary>
 /// used to check if this column can be compared; returns true by default (timestamp and column set columns return false)
 /// </summary>
 public virtual bool CanCompareValues(SqlRandomTableColumn columnInfo)
 {
     return(true);
 }
 protected abstract object CreateRandomValueInternal(SqlRandomizer rand, SqlRandomTableColumn columnInfo);
 /// <summary>
 /// creates random, but valued value for the type, based on the given column definition
 /// </summary>
 public object CreateRandomValue(SqlRandomizer rand, SqlRandomTableColumn columnInfo)
 {
     ValidateColumnInfo(columnInfo);
     return(CreateRandomValueInternal(rand, columnInfo));
 }
 protected abstract string GetTSqlTypeDefinitionInternal(SqlRandomTableColumn columnInfo);
 /// <summary>
 /// gets TSQL definition of the column
 /// </summary>
 public string GetTSqlTypeDefinition(SqlRandomTableColumn columnInfo)
 {
     ValidateColumnInfo(columnInfo);
     return(GetTSqlTypeDefinitionInternal(columnInfo));
 }
 protected abstract double GetInRowSizeInternal(SqlRandomTableColumn columnInfo);