in client/rpcdataset.go [510:566]
func NewIoTDBRpcDataSet(sql string, columnNameList []string, columnTypes []string,
columnNameIndex map[string]int32,
queryId int64, client *rpc.TSIServiceClient, sessionId int64, queryDataSet *rpc.TSQueryDataSet,
ignoreTimeStamp bool, fetchSize int32, timeoutMs *int64) *IoTDBRpcDataSet {
ds := &IoTDBRpcDataSet{
sql: sql,
columnNameList: columnNameList,
ignoreTimeStamp: ignoreTimeStamp,
queryId: queryId,
client: client,
sessionId: sessionId,
queryDataSet: queryDataSet,
fetchSize: fetchSize,
currentBitmap: make([]byte, len(columnNameList)),
values: make([][]byte, len(columnTypes)),
columnCount: len(columnNameList),
closed: false,
timeoutMs: timeoutMs,
}
ds.columnTypeList = make([]TSDataType, 0)
// deduplicate and map
ds.columnOrdinalMap = make(map[string]int32)
if !ignoreTimeStamp {
ds.columnOrdinalMap[TimestampColumnName] = 1
}
if columnNameIndex != nil {
ds.columnTypeDeduplicatedList = make([]TSDataType, len(columnNameIndex))
for i, name := range columnNameList {
columnTypeString := columnTypes[i]
columnDataType := tsTypeMap[columnTypeString]
ds.columnTypeList = append(ds.columnTypeList, columnDataType)
if _, exists := ds.columnOrdinalMap[name]; !exists {
index := columnNameIndex[name]
ds.columnOrdinalMap[name] = index + startIndex
ds.columnTypeDeduplicatedList[index] = tsTypeMap[columnTypeString]
}
}
} else {
ds.columnTypeDeduplicatedList = make([]TSDataType, ds.columnCount)
index := startIndex
for i := 0; i < len(columnNameList); i++ {
name := columnNameList[i]
dataType := tsTypeMap[columnTypes[i]]
ds.columnTypeList = append(ds.columnTypeList, dataType)
ds.columnTypeDeduplicatedList[i] = dataType
if _, exists := ds.columnOrdinalMap[name]; !exists {
ds.columnOrdinalMap[name] = int32(index)
index++
}
}
}
return ds
}