forked from microsoft/mssql-jdbc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStreamColInfo.java
62 lines (50 loc) · 2.06 KB
/
StreamColInfo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
* 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 (int i = 0; i < columns.length; i++) {
Column col = columns[i];
// 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;
}
}