Skip to content

Commit fff794b

Browse files
authored
refactor: use the go generic to rewrite interface of agg iterator (openGemini#580)
Signed-off-by: scuzyj <[email protected]>
1 parent afc5809 commit fff794b

File tree

5 files changed

+46
-245
lines changed

5 files changed

+46
-245
lines changed

engine/executor/agg_func.gen.go

-136
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

engine/executor/agg_func.gen.go.tmpl

-97
Original file line numberDiff line numberDiff line change
@@ -24,64 +24,6 @@ import (
2424
"github.com/openGemini/openGemini/engine/hybridqp"
2525
)
2626

27-
{{range .}}
28-
{{- if or (eq .Name "Float") (eq .Name "Integer")}}
29-
func New{{.Name}}MedianReduce({{.name}}SliceItem *{{.Name}}SliceItem) (int, int64, float64, bool) {
30-
length := len({{.name}}SliceItem.value)
31-
if length == 0 {
32-
return -1, {{.Nil}}, {{.Nil}}, true
33-
}
34-
if length == 1 {
35-
return -1, {{.name}}SliceItem.time[0], float64({{.name}}SliceItem.value[0]), false
36-
}
37-
38-
sort.Stable({{.name}}SliceItem)
39-
40-
if length % 2 == 0 {
41-
lowvalue, highvalue := {{.name}}SliceItem.value[length/2-1], {{.name}}SliceItem.value[length/2]
42-
return -1, {{.name}}SliceItem.time[length/2-1], float64(lowvalue) + float64(highvalue - lowvalue)/2, false
43-
}
44-
return -1, {{.name}}SliceItem.time[length/2], float64({{.name}}SliceItem.value[length/2]), false
45-
}
46-
{{- end}}
47-
{{end}}
48-
49-
{{range .}}
50-
{{- if or (eq .Name "Float") (eq .Name "Integer") (eq .Name "String")}}
51-
func New{{.Name}}ModeReduce({{.Name}}SliceItem *{{.Name}}SliceItem) (int, int64, float64, bool) {
52-
length := len({{.Name}}SliceItem.value)
53-
start := 0
54-
end := length-1
55-
if length == 0 {
56-
return 0, 0, 0, true
57-
}
58-
59-
sort.Stable({{.Name}}SliceItem)
60-
curri := start
61-
currFreq := 0
62-
currValue := {{.Name}}SliceItem.value[start]
63-
modei := start
64-
modeFreq := 0
65-
for i := start; i <= end; i++ {
66-
if {{.Name}}SliceItem.value[i] != currValue{
67-
currFreq = 1
68-
currValue = {{.Name}}SliceItem.value[i]
69-
curri = i
70-
continue
71-
}
72-
currFreq++
73-
if modeFreq > currFreq || (modeFreq == currFreq && {{.Name}}SliceItem.time[curri] > {{.Name}}SliceItem.time[modei]){
74-
continue
75-
}
76-
modeFreq = currFreq
77-
modei = curri
78-
}
79-
return modei, 0, 0, false
80-
}
81-
{{- end}}
82-
{{end}}
83-
84-
8527
func NewBooleanModeReduce(BooleanSliceItem *BooleanSliceItem) (int, int64, float64, bool) {
8628
length := len(BooleanSliceItem.value)
8729
if length == 0 {
@@ -114,23 +56,6 @@ func NewBooleanModeReduce(BooleanSliceItem *BooleanSliceItem) (int, int64, float
11456
return falsei, 0, 0, false
11557
}
11658

117-
118-
{{range .}}
119-
func {{.Name}}CountReduce(c Chunk, ordinal, start, end int) (int, int64, bool) {
120-
var count int64
121-
if c.Column(ordinal).NilCount() == 0 {
122-
// fast path
123-
count = int64(end - start)
124-
return start, count, count == 0
125-
}
126-
127-
// slow path
128-
vs, ve := c.Column(ordinal).GetRangeValueIndexV2(start, end)
129-
count = int64(ve - vs)
130-
return start, count, count == 0
131-
}
132-
{{end}}
133-
13459
func IntegerCountMerge(prevPoint, currPoint *IntegerPoint) {
13560
if currPoint.isNil {
13661
return
@@ -1146,28 +1071,6 @@ func {{.Name}}IrateMerge(prevPoints [2]*{{.Name}}Point, interval *hybridqp.Inter
11461071
{{- end}}
11471072
{{end}}
11481073

1149-
{{range .}}
1150-
func {{.Name}}AbsentReduce(c Chunk, ordinal, start, end int) (int, int64, bool) {
1151-
var count int64
1152-
if c.Column(ordinal).NilCount() == 0 {
1153-
// fast path
1154-
count = int64(end - start)
1155-
if count > 0 {
1156-
return start, 1, false
1157-
}
1158-
return start, 0, true
1159-
}
1160-
1161-
// slow path
1162-
vs, ve := c.Column(ordinal).GetRangeValueIndexV2(start, end)
1163-
count = int64(ve - vs)
1164-
if count > 0 {
1165-
return start, 1, false
1166-
}
1167-
return start, 0, true
1168-
}
1169-
{{end}}
1170-
11711074
func IntegerAbsentMerge(prevPoint, currPoint *IntegerPoint) {
11721075
if prevPoint.isNil && currPoint.isNil {
11731076
prevPoint.isNil = true

engine/executor/agg_func.go

+34
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,37 @@ func NewModeReduce[T util.ExceptBool](si *SliceItem[T]) (int, int64, float64, bo
114114
}
115115
return modei, 0, 0, false
116116
}
117+
118+
func CountReduce(c Chunk, ordinal, start, end int) (int, int64, bool) {
119+
var count int64
120+
if c.Column(ordinal).NilCount() == 0 {
121+
// fast path
122+
count = int64(end - start)
123+
return start, count, count == 0
124+
}
125+
126+
// slow path
127+
vs, ve := c.Column(ordinal).GetRangeValueIndexV2(start, end)
128+
count = int64(ve - vs)
129+
return start, count, count == 0
130+
}
131+
132+
func AbsentReduce(c Chunk, ordinal, start, end int) (int, int64, bool) {
133+
var count int64
134+
if c.Column(ordinal).NilCount() == 0 {
135+
// fast path
136+
count = int64(end - start)
137+
if count > 0 {
138+
return start, 1, false
139+
}
140+
return start, 0, true
141+
}
142+
143+
// slow path
144+
vs, ve := c.Column(ordinal).GetRangeValueIndexV2(start, end)
145+
count = int64(ve - vs)
146+
if count > 0 {
147+
return start, 1, false
148+
}
149+
return start, 0, true
150+
}

engine/executor/call_processor.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -394,22 +394,22 @@ func NewCountRoutineImpl(inRowDataType, outRowDataType hybridqp.RowDataType, opt
394394
switch dataType {
395395
case influxql.Integer:
396396
return NewRoutineImpl(
397-
NewIntegerColIntegerIterator(IntegerCountReduce, IntegerCountMerge, isSingleCall, inOrdinal, outOrdinal,
397+
NewIntegerColIntegerIterator(CountReduce, IntegerCountMerge, isSingleCall, inOrdinal, outOrdinal,
398398
nil, nil),
399399
inOrdinal, outOrdinal), nil
400400
case influxql.Float:
401401
return NewRoutineImpl(
402-
NewFloatColIntegerIterator(FloatCountReduce, IntegerCountMerge, isSingleCall, inOrdinal, outOrdinal,
402+
NewFloatColIntegerIterator(CountReduce, IntegerCountMerge, isSingleCall, inOrdinal, outOrdinal,
403403
nil, nil),
404404
inOrdinal, outOrdinal), nil
405405
case influxql.String:
406406
return NewRoutineImpl(
407-
NewStringColIntegerIterator(StringCountReduce, IntegerCountMerge, isSingleCall, inOrdinal, outOrdinal,
407+
NewStringColIntegerIterator(CountReduce, IntegerCountMerge, isSingleCall, inOrdinal, outOrdinal,
408408
nil, nil),
409409
inOrdinal, outOrdinal), nil
410410
case influxql.Boolean:
411411
return NewRoutineImpl(
412-
NewBooleanColIntegerIterator(BooleanCountReduce, IntegerCountMerge, isSingleCall, inOrdinal, outOrdinal,
412+
NewBooleanColIntegerIterator(CountReduce, IntegerCountMerge, isSingleCall, inOrdinal, outOrdinal,
413413
nil, nil),
414414
inOrdinal, outOrdinal), nil
415415
default:
@@ -929,22 +929,22 @@ func NewAbsentRoutineImpl(inRowDataType, outRowDataType hybridqp.RowDataType, op
929929
switch dataType {
930930
case influxql.Integer:
931931
return NewRoutineImpl(
932-
NewIntegerColIntegerIterator(IntegerAbsentReduce, IntegerAbsentMerge, isSingleCall, inOrdinal, outOrdinal,
932+
NewIntegerColIntegerIterator(AbsentReduce, IntegerAbsentMerge, isSingleCall, inOrdinal, outOrdinal,
933933
nil, nil),
934934
inOrdinal, outOrdinal), nil
935935
case influxql.Float:
936936
return NewRoutineImpl(
937-
NewFloatColIntegerIterator(FloatAbsentReduce, IntegerAbsentMerge, isSingleCall, inOrdinal, outOrdinal,
937+
NewFloatColIntegerIterator(AbsentReduce, IntegerAbsentMerge, isSingleCall, inOrdinal, outOrdinal,
938938
nil, nil),
939939
inOrdinal, outOrdinal), nil
940940
case influxql.String:
941941
return NewRoutineImpl(
942-
NewStringColIntegerIterator(StringAbsentReduce, IntegerAbsentMerge, isSingleCall, inOrdinal, outOrdinal,
942+
NewStringColIntegerIterator(AbsentReduce, IntegerAbsentMerge, isSingleCall, inOrdinal, outOrdinal,
943943
nil, nil),
944944
inOrdinal, outOrdinal), nil
945945
case influxql.Boolean:
946946
return NewRoutineImpl(
947-
NewBooleanColIntegerIterator(BooleanAbsentReduce, IntegerAbsentMerge, isSingleCall, inOrdinal, outOrdinal,
947+
NewBooleanColIntegerIterator(AbsentReduce, IntegerAbsentMerge, isSingleCall, inOrdinal, outOrdinal,
948948
nil, nil),
949949
inOrdinal, outOrdinal), nil
950950
default:

engine/executor/sliding_window_processor.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -97,25 +97,25 @@ func NewSlidingWindowCountRoutineImpl(
9797
case influxql.Integer:
9898
return NewRoutineImpl(
9999
NewIntegerSlidingWindowIntegerIterator(
100-
IntegerCountReduce, IntegerCountMerge, IntegerSlidingWindowMergeFunc,
100+
CountReduce, IntegerCountMerge, IntegerSlidingWindowMergeFunc,
101101
inOrdinal, outOrdinal, slidingNum),
102102
inOrdinal, outOrdinal)
103103
case influxql.Float:
104104
return NewRoutineImpl(
105105
NewIntegerSlidingWindowIntegerIterator(
106-
FloatCountReduce, IntegerCountMerge, IntegerSlidingWindowMergeFunc,
106+
CountReduce, IntegerCountMerge, IntegerSlidingWindowMergeFunc,
107107
inOrdinal, outOrdinal, slidingNum),
108108
inOrdinal, outOrdinal)
109109
case influxql.String:
110110
return NewRoutineImpl(
111111
NewIntegerSlidingWindowIntegerIterator(
112-
StringCountReduce, IntegerCountMerge, IntegerSlidingWindowMergeFunc,
112+
CountReduce, IntegerCountMerge, IntegerSlidingWindowMergeFunc,
113113
inOrdinal, outOrdinal, slidingNum),
114114
inOrdinal, outOrdinal)
115115
case influxql.Boolean:
116116
return NewRoutineImpl(
117117
NewBooleanSlidingWindowIntegerIterator(
118-
BooleanCountReduce, IntegerCountMerge, IntegerSlidingWindowMergeFunc,
118+
CountReduce, IntegerCountMerge, IntegerSlidingWindowMergeFunc,
119119
inOrdinal, outOrdinal, slidingNum),
120120
inOrdinal, outOrdinal)
121121
default:

0 commit comments

Comments
 (0)