1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-08-15 20:02:56 +02:00

Refactor collect compilation; rename grouping methods to unify collect logic and improve clarity

This commit is contained in:
Tim Voronov
2025-06-18 17:29:05 -04:00
parent 2e78bc4c64
commit f3e660ed5e

View File

@@ -19,7 +19,7 @@ func NewCollectCompiler(ctx *CompilerContext) *CollectCompiler {
func (cc *CollectCompiler) Compile(ctx fql.ICollectClauseContext) { func (cc *CollectCompiler) Compile(ctx fql.ICollectClauseContext) {
aggregator := ctx.CollectAggregator() aggregator := ctx.CollectAggregator()
kvKeyReg, kvValReg, groupSelectors := cc.compileGrouping(ctx, aggregator != nil) kvKeyReg, kvValReg, groupSelectors := cc.compileCollect(ctx, aggregator != nil)
// Aggregation loop // Aggregation loop
if aggregator != nil { if aggregator != nil {
@@ -32,7 +32,7 @@ func (cc *CollectCompiler) Compile(ctx fql.ICollectClauseContext) {
} }
} }
func (cc *CollectCompiler) compileGrouping(ctx fql.ICollectClauseContext, aggregation bool) (vm.Operand, vm.Operand, []fql.ICollectSelectorContext) { func (cc *CollectCompiler) compileCollect(ctx fql.ICollectClauseContext, aggregation bool) (vm.Operand, vm.Operand, []fql.ICollectSelectorContext) {
var kvKeyReg, kvValReg vm.Operand var kvKeyReg, kvValReg vm.Operand
var groupSelectors []fql.ICollectSelectorContext var groupSelectors []fql.ICollectSelectorContext
grouping := ctx.CollectGrouping() grouping := ctx.CollectGrouping()
@@ -45,8 +45,7 @@ func (cc *CollectCompiler) compileGrouping(ctx fql.ICollectClauseContext, aggreg
loop := cc.ctx.Loops.Current() loop := cc.ctx.Loops.Current()
if grouping != nil { if grouping != nil {
groupSelectors = grouping.AllCollectSelector() kvKeyReg, groupSelectors = cc.compileGrouping(grouping)
kvKeyReg = cc.compileGroupSelectors(groupSelectors)
} }
kvValReg = cc.ctx.Registers.Allocate(core.Temp) kvValReg = cc.ctx.Registers.Allocate(core.Temp)
@@ -270,9 +269,11 @@ func (cc *CollectCompiler) compileAggregationFuncCall(selectors []fql.ICollectAg
} }
} }
func (cc *CollectCompiler) compileGroupSelectors(selectors []fql.ICollectSelectorContext) vm.Operand { func (cc *CollectCompiler) compileGrouping(ctx fql.ICollectGroupingContext) (vm.Operand, []fql.ICollectSelectorContext) {
selectors := ctx.AllCollectSelector()
if len(selectors) == 0 { if len(selectors) == 0 {
return vm.NoopOperand return vm.NoopOperand, selectors
} }
var kvKeyReg vm.Operand var kvKeyReg vm.Operand
@@ -296,7 +297,7 @@ func (cc *CollectCompiler) compileGroupSelectors(selectors []fql.ICollectSelecto
kvKeyReg = cc.ctx.ExprCompiler.Compile(selectors[0].Expression()) kvKeyReg = cc.ctx.ExprCompiler.Compile(selectors[0].Expression())
} }
return kvKeyReg return kvKeyReg, selectors
} }
func (cc *CollectCompiler) compileGroupSelectorVariables(selectors []fql.ICollectSelectorContext, kvKeyReg, kvValReg vm.Operand, isAggregation bool) { func (cc *CollectCompiler) compileGroupSelectorVariables(selectors []fql.ICollectSelectorContext, kvKeyReg, kvValReg vm.Operand, isAggregation bool) {