private bool TryProcessOneTable(TdsParserStateObject stateObj, ref int length, out MultiPartTableName multiPartTableName)
{
ushort tableLen;
MultiPartTableName mpt;
string value;
multiPartTableName = default(MultiPartTableName);
mpt = new MultiPartTableName();
byte nParts;
// Find out how many parts in the TDS stream
if (!stateObj.TryReadByte(out nParts))
{
return false;
}
length--;
if (nParts == 4)
{
if (!stateObj.TryReadUInt16(out tableLen))
{
return false;
}
length -= 2;
if (!stateObj.TryReadString(tableLen, out value))
{
return false;
}
mpt.ServerName = value;
nParts--;
length -= (tableLen * 2); // wide bytes
}
if (nParts == 3)
{
if (!stateObj.TryReadUInt16(out tableLen))
{
return false;
}
length -= 2;
if (!stateObj.TryReadString(tableLen, out value))
{
return false;
}
mpt.CatalogName = value;
length -= (tableLen * 2); // wide bytes
nParts--;
}
if (nParts == 2)
{
if (!stateObj.TryReadUInt16(out tableLen))
{
return false;
}
length -= 2;
if (!stateObj.TryReadString(tableLen, out value))
{
return false;
}
mpt.SchemaName = value;
length -= (tableLen * 2); // wide bytes
nParts--;
}
if (nParts == 1)
{
if (!stateObj.TryReadUInt16(out tableLen))
{
return false;
}
length -= 2;
if (!stateObj.TryReadString(tableLen, out value))
{
return false;
}
mpt.TableName = value;
length -= (tableLen * 2); // wide bytes
nParts--;
}
Debug.Assert(nParts == 0, "ProcessTableName:Unidentified parts in the table name token stream!");
multiPartTableName = mpt;
return true;
}