package aggregate

import (
	"github.com/pingcap-inc/clinic/pkg/ngm/statements/api"
	"github.com/pingcap-inc/clinic/pkg/ngm/statements/load"
)

func AggPlanCount() Aggregator {
	return &PlanCount{map[string]struct{}{}}
}

type PlanCount struct {
	plans map[string]struct{}
}

func (a *PlanCount) Add(record *load.StmtRecord) {
	a.plans[record.PlanDigest] = struct{}{}
}

func (a *PlanCount) Merge(agg Aggregator) {
	if agg, ok := agg.(*PlanCount); ok {
		for k := range agg.plans {
			a.plans[k] = struct{}{}
		}
	}
}

func (a *PlanCount) Output(model *api.Model) {
	model.PlanCount = len(a.plans)
}
