-
Notifications
You must be signed in to change notification settings - Fork 153
/
transformation.go
60 lines (48 loc) · 1.94 KB
/
transformation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package execute
import (
"context"
"fmt"
"github.com/influxdata/flux"
"github.com/influxdata/flux/memory"
"github.com/influxdata/flux/plan"
)
type Transformation interface {
RetractTable(id DatasetID, key flux.GroupKey) error
Process(id DatasetID, tbl flux.Table) error
UpdateWatermark(id DatasetID, t Time) error
UpdateProcessingTime(id DatasetID, t Time) error
Finish(id DatasetID, err error)
}
// StreamContext represents necessary context for a single stream of
// query data.
type StreamContext interface {
Bounds() *Bounds
}
type Administration interface {
Context() context.Context
ResolveTime(qt flux.Time) Time
StreamContext() StreamContext
Allocator() *memory.Allocator
Parents() []DatasetID
Dependencies() Dependencies
}
// Dependencies represents the provided dependencies to the execution environment.
// The dependencies is opaque.
type Dependencies map[string]interface{}
type CreateTransformation func(id DatasetID, mode AccumulationMode, spec plan.ProcedureSpec, a Administration) (Transformation, Dataset, error)
type CreateNewPlannerTransformation func(id DatasetID, mode AccumulationMode, spec plan.ProcedureSpec, a Administration) (Transformation, Dataset, error)
var procedureToTransformation = make(map[plan.ProcedureKind]CreateNewPlannerTransformation)
// RegisterTransformation adds a new registration mapping of procedure kind to transformation.
func RegisterTransformation(k plan.ProcedureKind, c CreateNewPlannerTransformation) {
if procedureToTransformation[k] != nil {
panic(fmt.Errorf("duplicate registration for transformation with procedure kind %v", k))
}
procedureToTransformation[k] = c
}
// ReplaceTransformation changes an existing transformation registration.
func ReplaceTransformation(k plan.ProcedureKind, c CreateNewPlannerTransformation) {
if procedureToTransformation[k] == nil {
panic(fmt.Errorf("missing registration for transformation with procedure kind %v", k))
}
procedureToTransformation[k] = c
}