All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.microsoft.sqlserver.jdbc.StreamColInfo Maven / Gradle / Ivy

There is a newer version: 12.7.1.jre11-preview
Show newest version
/*
 * 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;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy