private int Evaluate(int record)
{
DataRow row = _table._recordManager[record];
if (row == null)
return 0;
DataRowVersion version = DataRowVersion.Default;
if (row._oldRecord == record)
{
version = DataRowVersion.Original;
}
else if (row._newRecord == record)
{
version = DataRowVersion.Current;
}
else if (row._tempRecord == record)
{
version = DataRowVersion.Proposed;
}
IndexField[] fields = _index._indexFields;
for (int i = 0; i < _matchedCandidates; i++)
{
int columnOrdinal = fields[i].Column.Ordinal;
Debug.Assert(_candidateColumns[columnOrdinal] != null, "How come this is not a candidate column");
Debug.Assert(_candidateColumns[columnOrdinal].expr != null, "How come there is no associated expression");
int c = Eval(_candidateColumns[columnOrdinal].expr, row, version);
if (c != 0)
return fields[i].IsDescending ? -c : c;
}
return 0;
}