private void WriteTvpOrderUnique(MSS.SmiExtendedMetaData metaData, TdsParserStateObject stateObj)
{
// TVP_ORDER_UNIQUE token (uniqueness and sort order)
// Merge order and unique keys into a single token stream
MSS.SmiOrderProperty orderProperty = (MSS.SmiOrderProperty)metaData.ExtendedProperties[MSS.SmiPropertySelector.SortOrder];
MSS.SmiUniqueKeyProperty uniqueKeyProperty = (MSS.SmiUniqueKeyProperty)metaData.ExtendedProperties[MSS.SmiPropertySelector.UniqueKey];
// Build list from
List<TdsOrderUnique> columnList = new List<TdsOrderUnique>(metaData.FieldMetaData.Count);
for (int i = 0; i < metaData.FieldMetaData.Count; i++)
{
// Add appropriate SortOrder flag
byte flags = 0;
MSS.SmiOrderProperty.SmiColumnOrder columnOrder = orderProperty[i];
if (SortOrder.Ascending == columnOrder.Order)
{
flags = TdsEnums.TVP_ORDERASC_FLAG;
}
else if (SortOrder.Descending == columnOrder.Order)
{
flags = TdsEnums.TVP_ORDERDESC_FLAG;
}
// Add unique key flag if appropriate
if (uniqueKeyProperty[i])
{
flags |= TdsEnums.TVP_UNIQUE_FLAG;
}
// Remember this column if any flags were set
if (0 != flags)
{
columnList.Add(new TdsOrderUnique(checked((short)(i + 1)), flags));
}
}
// Write flagged columns to wire...
if (0 < columnList.Count)
{
stateObj.WriteByte(TdsEnums.TVP_ORDER_UNIQUE_TOKEN);
WriteShort(columnList.Count, stateObj);
foreach (TdsOrderUnique column in columnList)
{
WriteShort(column.ColumnOrdinal, stateObj);
stateObj.WriteByte(column.Flags);
}
}
}