in src/Apache.IoTDB/DataStructure/SessionDataSet.cs [56:110]
public SessionDataSet(string sql, TSExecuteStatementResp resp, Client client, ConcurrentClientQueue clientQueue, long statementId)
{
_clientQueue = clientQueue;
_client = client;
_sql = sql;
_queryDataset = resp.QueryDataSet;
_queryId = resp.QueryId;
_statementId = statementId;
_columnSize = resp.Columns.Count;
_currentBitmap = new byte[_columnSize];
_columnNames = new List<string>();
_timeBuffer = new ByteBuffer(_queryDataset.Time);
// column name -> column location
_columnNameIndexMap = new Dictionary<string, int>();
_columnTypeLst = new List<string>();
_duplicateLocation = new Dictionary<int, int>();
_valueBufferLst = new List<ByteBuffer>();
_bitmapBufferLst = new List<ByteBuffer>();
// some internal variable
_hasCatchedResult = false;
_rowIndex = 0;
RowCount = _queryDataset.Time.Length / sizeof(long);
_columnNames = resp.Columns;
_columnTypeLst = resp.DataTypeList;
int deduplicateIdx = 0;
Dictionary<string, int> columnToFirstIndexMap = new Dictionary<string, int>();
for (var i = 0; i < _columnSize; i++)
{
var columnName = _columnNames[i];
if (_columnNameIndexMap.ContainsKey(columnName))
{
_duplicateLocation[i] = columnToFirstIndexMap[columnName];
}
else
{
columnToFirstIndexMap[columnName] = i;
if (resp.ColumnNameIndexMap != null)
{
int valueIndex = resp.ColumnNameIndexMap[columnName];
_columnNameIndexMap[columnName] = valueIndex;
_valueBufferLst.Add(new ByteBuffer(_queryDataset.ValueList[valueIndex]));
_bitmapBufferLst.Add(new ByteBuffer(_queryDataset.BitmapList[valueIndex]));
}
else
{
_columnNameIndexMap[columnName] = deduplicateIdx;
_valueBufferLst.Add(new ByteBuffer(_queryDataset.ValueList[deduplicateIdx]));
_bitmapBufferLst.Add(new ByteBuffer(_queryDataset.BitmapList[deduplicateIdx]));
}
deduplicateIdx++;
}
}
}