public void AddSortKey(XmlQueryType keyType)
{
MethodInfo meth = null;
if (keyType == null)
{
meth = XmlILMethods.SortKeyEmpty;
}
else
{
Debug.Assert(keyType.IsAtomicValue, "Sort key must have atomic value type.");
switch (keyType.TypeCode)
{
case XmlTypeCode.String: meth = XmlILMethods.SortKeyString; break;
case XmlTypeCode.Decimal: meth = XmlILMethods.SortKeyDecimal; break;
case XmlTypeCode.Integer: meth = XmlILMethods.SortKeyInteger; break;
case XmlTypeCode.Int: meth = XmlILMethods.SortKeyInt; break;
case XmlTypeCode.Boolean: meth = XmlILMethods.SortKeyInt; break;
case XmlTypeCode.Double: meth = XmlILMethods.SortKeyDouble; break;
case XmlTypeCode.DateTime: meth = XmlILMethods.SortKeyDateTime; break;
case XmlTypeCode.None:
// Empty sequence, so this path will never actually be taken
Emit(OpCodes.Pop);
meth = XmlILMethods.SortKeyEmpty;
break;
case XmlTypeCode.AnyAtomicType:
Debug.Assert(false, "Heterogenous sort key is not allowed.");
return;
default:
Debug.Assert(false, "Sorting over datatype " + keyType.TypeCode + " is not allowed.");
break;
}
}
Call(meth);
}