flushResultBuffer reads dimension and measure data from current OOPK buffer to Results
()
| 64 | |
| 65 | // flushResultBuffer reads dimension and measure data from current OOPK buffer to Results |
| 66 | func (qc *AQLQueryContext) flushResultBuffer() { |
| 67 | start := utils.Now() |
| 68 | defer func() { qc.reportTiming(qc.cudaStreams[0], &start, resultFlushTiming) }() |
| 69 | |
| 70 | if qc.Results == nil { |
| 71 | qc.Results = make(queryCom.AQLQueryResult) |
| 72 | } |
| 73 | |
| 74 | oopkContext := qc.OOPK |
| 75 | dpc := qc.resultFlushContext |
| 76 | dimValues := make([]*string, len(oopkContext.Dimensions)) |
| 77 | |
| 78 | var fromOffset, toOffset int |
| 79 | if qc.fromTime != nil && qc.toTime != nil { |
| 80 | _, fromOffset = qc.fromTime.Time.Zone() |
| 81 | _, toOffset = qc.toTime.Time.Zone() |
| 82 | } |
| 83 | |
| 84 | dimOffsets := make(map[int][2]int) |
| 85 | for dimIndex := range oopkContext.Dimensions { |
| 86 | dimVectorIndex := oopkContext.DimensionVectorIndex[dimIndex] |
| 87 | valueOffset, nullOffset := queryCom.GetDimensionStartOffsets(oopkContext.NumDimsPerDimWidth, dimVectorIndex, oopkContext.ResultSize) |
| 88 | dimOffsets[dimIndex] = [2]int{valueOffset, nullOffset} |
| 89 | } |
| 90 | |
| 91 | for i := 0; i < oopkContext.ResultSize; i++ { |
| 92 | dimReadingStart := utils.Now() |
| 93 | for dimIndex := range oopkContext.Dimensions { |
| 94 | offsets := dimOffsets[dimIndex] |
| 95 | valueOffset, nullOffset := offsets[0], offsets[1] |
| 96 | valuePtr, nullPtr := utils.MemAccess(oopkContext.dimensionVectorH, valueOffset), utils.MemAccess(oopkContext.dimensionVectorH, nullOffset) |
| 97 | |
| 98 | if qc.Query.Dimensions[dimIndex].IsTimeDimension() && dpc.dimensionValueCache[dimIndex] == nil { |
| 99 | dpc.dimensionValueCache[dimIndex] = make(map[queryCom.TimeDimensionMeta]map[int64]string) |
| 100 | } |
| 101 | |
| 102 | var timeDimensionMeta *queryCom.TimeDimensionMeta |
| 103 | |
| 104 | if qc.Query.Dimensions[dimIndex].IsTimeDimension() { |
| 105 | timeDimensionMeta = &queryCom.TimeDimensionMeta{ |
| 106 | TimeBucketizer: qc.Query.Dimensions[dimIndex].TimeBucketizer, |
| 107 | TimeUnit: qc.Query.Dimensions[dimIndex].TimeUnit, |
| 108 | IsTimezoneTable: qc.timezoneTable.tableColumn != "", |
| 109 | TimeZone: qc.fixedTimezone, |
| 110 | DSTSwitchTs: qc.dstswitch, |
| 111 | FromOffset: fromOffset, |
| 112 | ToOffset: toOffset, |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | // don't translate enum if it's for distributed mode (DataOnly == true) |
| 117 | var enumDict []string |
| 118 | if !qc.DataOnly { |
| 119 | enumDict = dpc.reverseDicts[dimIndex] |
| 120 | } |
| 121 | |
| 122 | dimValues[dimIndex] = queryCom.ReadDimension( |
| 123 | valuePtr, nullPtr, i, dpc.dimensionDataTypes[dimIndex], enumDict, |
no test coverage detected