com.microsoft.sqlserver.jdbc.StreamColInfo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mssql-jdbc Show documentation
Show all versions of mssql-jdbc Show documentation
Microsoft JDBC Driver for SQL Server.
The Azure Key Vault feature in Microsoft JDBC Driver for SQL Server depends on
Azure SDK for JAVA and Azure Active Directory Library For Java.
/*
* Microsoft JDBC Driver for SQL Server
*
* Copyright(c) Microsoft Corporation All rights reserved.
*
* This program is made available under the terms of the MIT License. See the LICENSE file in the project root for more information.
*/
package com.microsoft.sqlserver.jdbc;
/**
* StreamColInfo interprets the data stream from a COLINFO TDS token
*/
final class StreamColInfo extends StreamPacket {
private TDSReader tdsReader;
private TDSReaderMark colInfoMark;
StreamColInfo() {
super(TDS.TDS_COLINFO);
}
void setFromTDS(TDSReader tdsReader) throws SQLServerException {
if (TDS.TDS_COLINFO != tdsReader.readUnsignedByte())
assert false : "Not a COLINFO token";
this.tdsReader = tdsReader;
int tokenLength = tdsReader.readUnsignedShort();
colInfoMark = tdsReader.mark();
tdsReader.skip(tokenLength);
}
int applyTo(Column[] columns) throws SQLServerException {
int numTables = 0;
// Read and apply the column info for each column
TDSReaderMark currentMark = tdsReader.mark();
tdsReader.reset(colInfoMark);
for (Column col : columns) {
// Ignore the column number, per TDS spec.
// Column info is returned for each column, ascending by column index,
// so iterating through the column info is sufficient.
tdsReader.readUnsignedByte();
// Set the column's table number, keeping track of the maximum table number
// representing the number of tables encountered.
col.setTableNum(tdsReader.readUnsignedByte());
if (col.getTableNum() > numTables)
numTables = col.getTableNum();
// Set the other column info
col.setInfoStatus(tdsReader.readUnsignedByte());
if (col.hasDifferentName())
col.setBaseColumnName(tdsReader.readUnicodeString(tdsReader.readUnsignedByte()));
}
tdsReader.reset(currentMark);
return numTables;
}
}