-
Notifications
You must be signed in to change notification settings - Fork 15
/
transform.go
97 lines (77 loc) · 4.17 KB
/
transform.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package transform
// Transform definition functions can be used to build a list of transforms
// The transform functions chain must be started with a From... function
// FromConstant returns a constant value (specified by 'param')
func FromConstant(value interface{}) *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: ConstantValue, Param: value}}}
}
// FromMethod invokes a function on the hydrate item coming from transform data
func FromMethod(methodName string) *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: MethodValue, Param: methodName}}}
}
// FromField generates a value by retrieving a field or a set of fields from the source item
func FromField(fieldNames ...string) *ColumnTransforms {
var fieldNameArray []string
for _, fieldName := range fieldNames {
fieldNameArray = append(fieldNameArray, fieldName)
}
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: FieldValue, Param: fieldNameArray}}}
}
// FromQual takes the specific column and generates it's values from key column quals
func FromQual(qual string) *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: QualValue, Param: qual}}}
}
// FromValue generates a value by returning the raw hydrate item
func FromValue() *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: RawValue}}}
}
// FromCamel generates a value by converting the given field name to camel case and retrieving from the source item
func FromCamel() *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: FieldValueCamelCase}}}
}
// FromGo generates a value by converting the given field name to camel case and retrieving from the source item
func FromGo() *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: FieldValueGo}}}
}
// FromMatrixItem takes key from transform data and generates the value from Matrix Items
func FromMatrixItem(key string) *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: MatrixItemValue, Param: key}}}
}
// From generate a value by calling 'transformFunc'
func From(transformFunc TransformFunc) *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: transformFunc}}}
}
// FromJSONTag generates a value by finding a struct property with the json tag matching the column name
func FromJSONTag() *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: FieldValueTag, Param: "json"}}}
}
// FromTag generates a value by finding a struct property with the tag 'tagName' matching the column name
func FromTag(tagName string) *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: FieldValueTag, Param: tagName}}}
}
// FromP generates a value by calling 'transformFunc' passing param
func FromP(transformFunc TransformFunc, param interface{}) *ColumnTransforms {
return &ColumnTransforms{Transforms: []*TransformCall{{Transform: transformFunc, Param: param}}}
}
// TRANSFORM functions
// these can be chained after a From function to transform the data
// Transform function applies an arbitrary transform to the data (specified by 'transformFunc')
func (t *ColumnTransforms) Transform(transformFunc TransformFunc) *ColumnTransforms {
t.Transforms = append(t.Transforms, &TransformCall{Transform: transformFunc})
return t
}
// TransformP function applies an arbitrary transform to the data, passing a parameter
func (t *ColumnTransforms) TransformP(transformFunc TransformFunc, param interface{}) *ColumnTransforms {
t.Transforms = append(t.Transforms, &TransformCall{Transform: transformFunc, Param: param})
return t
}
// NullIfEqual returns nil if the input Value equals the transform param
func (t *ColumnTransforms) NullIfEqual(nullValue interface{}) *ColumnTransforms {
t.Transforms = append(t.Transforms, &TransformCall{Transform: NullIfEqualParam, Param: nullValue})
return t
}
// NullIfZero returns nil if the input value equals the zero value of its type
func (t *ColumnTransforms) NullIfZero() *ColumnTransforms {
t.Transforms = append(t.Transforms, &TransformCall{Transform: NullIfZeroValue})
return t
}