Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
8af1d33
fix: correct approx_percentile BVT result file type OID for GROUP BY
ULookup Jun 17, 2026
c257372
Merge branch 'main' into fix/issue-24550-percentile-quantile-agg
ULookup Jun 17, 2026
e405fd0
Merge branch 'main' into fix/issue-24550-percentile-quantile-agg
ULookup Jun 17, 2026
dadac3b
Merge branch 'main' into fix/issue-24550-percentile-quantile-agg
ULookup Jul 6, 2026
b4017fa
Merge branch 'main' into fix/issue-24550-percentile-quantile-agg
ULookup Jul 6, 2026
a672166
fix: correct gofmt indentation for APPROX_PERCENTILE in function_id_t…
ULookup Jul 6, 2026
6250bdb
Merge branch 'main' into fix/issue-24550-percentile-quantile-agg
ULookup Jul 6, 2026
60d2142
Merge remote-tracking branch 'upstream/main' into fix/issue-24550-per…
ULookup Jul 8, 2026
f223153
Merge branch 'main' into fix/issue-24550-percentile-quantile-agg
ULookup Jul 8, 2026
cc8d3c3
Merge remote-tracking branch 'upstream/main' into fix/issue-24550-per…
ULookup Jul 9, 2026
ea7367b
merge: resolve conflicts with main
ULookup Jul 10, 2026
19270fb
merge upstream/main and resolve conflicts
ULookup Jul 15, 2026
3f61ca7
docs: define approx percentile argument contract
ULookup Jul 15, 2026
8644138
docs: plan approx percentile contract fix
ULookup Jul 15, 2026
cea90cb
fix: validate approx percentile argument
ULookup Jul 15, 2026
ac3f1ec
test: cover approx percentile SQL contract
ULookup Jul 15, 2026
ad34b97
chore: keep planning docs out of PR
ULookup Jul 15, 2026
30ea774
fix: bound approx percentile aggregation state
VioletQwQ-0 Jul 20, 2026
7f6cc8f
fix: account approx percentile sketch memory
VioletQwQ-0 Jul 20, 2026
8bd4411
fix: configure percentile in time windows
VioletQwQ-0 Jul 20, 2026
95260cf
fix: avoid approx percentile interpolation overflow
VioletQwQ-0 Jul 20, 2026
ee2cb37
fix: preserve integer percentile precision
VioletQwQ-0 Jul 20, 2026
f7c5a02
fix: preserve max precision percentiles
VioletQwQ-0 Jul 20, 2026
f935280
refactor(aggexec): remove aggregate registration layer
VioletQwQ-0 Jul 20, 2026
6bbd7d7
Merge upstream/main into codex/takeover-24667-approx-percentile
VioletQwQ-0 Jul 22, 2026
8cbe5fe
fix(aggexec): clear state before unmarshal
VioletQwQ-0 Jul 22, 2026
12c0bcd
fix: align decimal percentile helper scale
VioletQwQ-0 Jul 22, 2026
21026c8
fix(agg): preserve empty parity levels during merge
VioletQwQ-0 Jul 23, 2026
fa762ce
Merge upstream/main into codex/takeover-24667-approx-percentile
VioletQwQ-0 Jul 23, 2026
eb3e633
Merge remote-tracking branch 'upstream/main' into codex/takeover-2466…
VioletQwQ-0 Jul 24, 2026
07d1efd
fix: preserve infinite percentile endpoints
VioletQwQ-0 Jul 24, 2026
f828ba6
Merge upstream/main into approx-percentile takeover
VioletQwQ-0 Jul 27, 2026
68be31e
Merge remote-tracking branch 'upstream/main' into HEAD
VioletQwQ-0 Jul 27, 2026
8ef1277
Merge remote-tracking branch 'upstream/main' into HEAD
VioletQwQ-0 Jul 28, 2026
19ad28d
Merge remote-tracking branch 'upstream/main' into HEAD
VioletQwQ-0 Jul 28, 2026
8124bed
Merge remote-tracking branch 'upstream/main' into HEAD
VioletQwQ-0 Jul 29, 2026
b51c8ea
Merge remote-tracking branch 'upstream/main' into HEAD
VioletQwQ-0 Jul 29, 2026
06c652c
Merge remote-tracking branch 'upstream/main' into HEAD
VioletQwQ-0 Jul 29, 2026
1f99494
Merge branch 'main' into codex/takeover-24667-approx-percentile
mergify[bot] Jul 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions pkg/container/batch/batch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ import (
"bytes"
"testing"

"github.com/matrixorigin/matrixone/pkg/sql/colexec/aggexec"

"github.com/matrixorigin/matrixone/pkg/common/mpool"
"github.com/matrixorigin/matrixone/pkg/container/types"
"github.com/matrixorigin/matrixone/pkg/container/vector"
Expand Down Expand Up @@ -155,7 +153,6 @@ func newBatch(ts []types.Type, rows int) *Batch {
}

bat.ExtraBuf = []byte("extra buf")
aggexec.RegisterGroupConcatAgg(0, ",")
bat.Attrs = []string{"1"}
return bat
}
Expand Down
18 changes: 17 additions & 1 deletion pkg/sql/colexec/aggexec/aggState.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ type MarshalerUnmarshaler interface {
UnmarshalFromReader(io.Reader) error
}

type freeableMarshalerUnmarshaler interface {
Free()
}

type aggInfo struct {
aggId int64
isDistinct bool
Expand Down Expand Up @@ -648,6 +652,12 @@ func (ag *aggState) free(mp *mpool.MPool) {
vec.Free(mp)
}
ag.vecs = nil
for _, mob := range ag.mobs {
if freeable, ok := mob.(freeableMarshalerUnmarshaler); ok {
freeable.Free()
}
}
ag.mobs = nil
}

type aggExec struct {
Expand Down Expand Up @@ -822,9 +832,15 @@ func checkAggStateMagic(reader io.Reader) {
}
}

func (ae *aggExec) UnmarshalFromReader(reader io.Reader, mp *mpool.MPool) error {
func (ae *aggExec) UnmarshalFromReader(reader io.Reader, mp *mpool.MPool) (retErr error) {
checkAggStateMagic(reader)
defer checkAggStateMagic(reader)
defer func() {
if retErr != nil {
ae.Free()
ae.state = nil
}
}()

// read number of chunks
cnt, err := types.ReadInt32(reader)
Expand Down
57 changes: 54 additions & 3 deletions pkg/sql/colexec/aggexec/aggexec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,9 @@ func TestMakeAggSpecialAgg(t *testing.T) {
require.Equal(t, int64(0), mp.CurrNB())
}()

const testAggID = -9901
param := types.T_int64.ToType()
RegisterAvgTwCache(testAggID)

exec, err := MakeAgg(mp, testAggID, false, param)
exec, err := MakeAgg(mp, AggIdOfAvgTwCache, false, param)
require.NoError(t, err)

require.NoError(t, exec.GroupGrow(2))
Expand Down Expand Up @@ -73,6 +71,59 @@ func TestVectorsUnmarshalFromReader(t *testing.T) {
exec2.Free()
}

func TestAggExecUnmarshalReplacesExistingState(t *testing.T) {
mp := mpool.MustNewZero()
defer func() {
require.Equal(t, int64(0), mp.CurrNB())
}()
newExec := func() *countColumnExec {
return newCountColumnExec(
mp,
AggIdOfCountColumn,
false,
[]types.Type{types.T_int64.ToType()},
).(*countColumnExec)
}

t.Run("empty", func(t *testing.T) {
target := newExec()
defer target.Free()
require.NoError(t, target.GroupGrow(1))

empty := newExec()
var buf bytes.Buffer
require.NoError(t, empty.SaveIntermediateResult(0, nil, &buf))
empty.Free()
require.NoError(t, target.UnmarshalFromReader(bytes.NewReader(buf.Bytes()), mp))
require.Zero(t, target.GetNumGroups())
})

t.Run("multiple_chunks", func(t *testing.T) {
target := newExec()
defer target.Free()
require.NoError(t, target.GroupGrow(2))

source := newExec()
defer source.Free()
require.NoError(t, source.GroupGrow(AggBatchSize+1))
flags := [][]uint8{make([]uint8, AggBatchSize), {1}}
for i := range flags[0] {
flags[0][i] = 1
}
var buf bytes.Buffer
require.NoError(t, source.SaveIntermediateResult(AggBatchSize+1, flags, &buf))
require.NoError(t, target.UnmarshalFromReader(bytes.NewReader(buf.Bytes()), mp))
require.Equal(t, AggBatchSize+1, target.GetNumGroups())

results, err := target.Flush()
require.NoError(t, err)
require.Len(t, results, 2)
for _, result := range results {
result.Free(mp)
}
})
}

func TestIntermediateResultCompactsAndReusesSingleChunk(t *testing.T) {
mp := mpool.MustNewZero()
defer func() {
Expand Down
Loading
Loading