in client/rpcdataset.go [55:157]
func NewIoTDBRpcDataSet(sql string, columnNameList []string, columnTypeList []string, columnNameIndex map[string]int32, ignoreTimestamp bool, moreData bool, queryId int64, statementId int64, client *rpc.IClientRPCServiceClient, sessionId int64, queryResult [][]byte, fetchSize int32, timeout *int64, zoneId string, timeFormat string, timeFactor int32, columnIndex2TsBlockColumnIndexList []int32) (rpcDataSet *IoTDBRpcDataSet, err error) {
ds := &IoTDBRpcDataSet{
sessionId: sessionId,
statementId: statementId,
ignoreTimestamp: ignoreTimestamp,
sql: sql,
queryId: queryId,
client: client,
fetchSize: fetchSize,
timeout: timeout,
moreData: moreData,
columnSize: int32(len(columnNameList)),
columnNameList: make([]string, 0, len(columnNameList)+1),
columnTypeList: make([]string, 0, len(columnTypeList)+1),
columnOrdinalMap: make(map[string]int32),
columnName2TsBlockColumnIndexMap: make(map[string]int32),
}
columnStartIndex := int32(1)
resultSetColumnSize := int32(len(columnNameList))
// newly generated or updated columnIndex2TsBlockColumnIndexList.size() may not be equal to
// columnNameList.size()
// so we need startIndexForColumnIndex2TsBlockColumnIndexList to adjust the mapping relation
startIndexForColumnIndex2TsBlockColumnIndexList := int32(0)
// for Time Column in tree model which should always be the first column and its index for
// TsBlockColumn is -1
if !ignoreTimestamp {
ds.columnNameList = append(ds.columnNameList, TimestampColumnName)
ds.columnTypeList = append(ds.columnTypeList, "INT64")
ds.columnName2TsBlockColumnIndexMap[TimestampColumnName] = -1
ds.columnOrdinalMap[TimestampColumnName] = 1
if columnIndex2TsBlockColumnIndexList != nil {
newColumnIndex2TsBlockColumnIndexList := make([]int32, 0, len(columnIndex2TsBlockColumnIndexList)+1)
newColumnIndex2TsBlockColumnIndexList = append(newColumnIndex2TsBlockColumnIndexList, -1)
newColumnIndex2TsBlockColumnIndexList = append(newColumnIndex2TsBlockColumnIndexList, columnIndex2TsBlockColumnIndexList...)
columnIndex2TsBlockColumnIndexList = newColumnIndex2TsBlockColumnIndexList
startIndexForColumnIndex2TsBlockColumnIndexList = 1
}
columnStartIndex += 1
resultSetColumnSize += 1
}
ds.columnNameList = append(ds.columnNameList, columnNameList...)
ds.columnTypeList = append(ds.columnTypeList, columnTypeList...)
if columnIndex2TsBlockColumnIndexList == nil {
columnIndex2TsBlockColumnIndexList = make([]int32, 0, resultSetColumnSize)
if !ignoreTimestamp {
startIndexForColumnIndex2TsBlockColumnIndexList = 1
columnIndex2TsBlockColumnIndexList = append(columnIndex2TsBlockColumnIndexList, -1)
}
for i := 0; i < len(columnNameList); i++ {
columnIndex2TsBlockColumnIndexList = append(columnIndex2TsBlockColumnIndexList, int32(i))
}
}
tsBlockColumnSize := int32(0)
for _, value := range columnIndex2TsBlockColumnIndexList {
if value > tsBlockColumnSize {
tsBlockColumnSize = value
}
}
tsBlockColumnSize += 1
ds.dataTypeForTsBlockColumn = make([]TSDataType, tsBlockColumnSize)
for i, columnName := range columnNameList {
tsBlockColumnIndex := columnIndex2TsBlockColumnIndexList[startIndexForColumnIndex2TsBlockColumnIndexList+int32(i)]
if tsBlockColumnIndex != -1 {
columnType, err := GetDataTypeByStr(columnTypeList[i])
if err != nil {
return nil, err
}
ds.dataTypeForTsBlockColumn[tsBlockColumnIndex] = columnType
}
if _, exists := ds.columnName2TsBlockColumnIndexMap[columnName]; !exists {
ds.columnOrdinalMap[columnName] = int32(i) + columnStartIndex
ds.columnName2TsBlockColumnIndexMap[columnName] = tsBlockColumnIndex
}
}
ds.queryResult = queryResult
if queryResult != nil {
ds.queryResultSize = int32(len(queryResult))
} else {
ds.queryResultSize = 0
}
ds.queryResultIndex = 0
ds.tsBlockSize = 0
ds.tsBlockIndex = -1
if ds.zoneId, err = time.LoadLocation(zoneId); err != nil {
return nil, err
}
ds.timeFormat = timeFormat
ds.timeFactor = timeFactor
if ds.timePrecision, err = getTimePrecision(timeFactor); err != nil {
return nil, err
}
if len(columnIndex2TsBlockColumnIndexList) != len(ds.columnNameList) {
return nil, fmt.Errorf("size of columnIndex2TsBlockColumnIndexList %v doesn't equal to size of columnNameList %v", len(columnIndex2TsBlockColumnIndexList), len(ds.columnNameList))
}
ds.columnIndex2TsBlockColumnIndexList = columnIndex2TsBlockColumnIndexList
return ds, nil
}