in transforms.go [464:512]
func (t TruncateTransform) Project(name string, pred BoundPredicate) (UnboundPredicate, error) {
if _, ok := pred.Term().(*BoundTransform); ok {
return projectTransformPredicate(t, name, pred)
}
fieldType := pred.Term().Ref().Field().Type
transformer, err := t.Transformer(fieldType)
if err != nil {
return nil, err
}
switch p := pred.(type) {
case BoundUnaryPredicate:
return p.AsUnbound(Reference(name)), nil
case BoundSetPredicate:
if p.Op() != OpIn {
break
}
switch fieldType.(type) {
case Int32Type:
return setApplyTransform(name, p, wrapTransformFn[int32](transformer)), nil
case Int64Type:
return setApplyTransform(name, p, wrapTransformFn[int64](transformer)), nil
case DecimalType:
return setApplyTransform(name, p, wrapTransformFn[Decimal](transformer)), nil
case StringType:
return setApplyTransform(name, p, wrapTransformFn[string](transformer)), nil
case BinaryType:
return setApplyTransform(name, p, wrapTransformFn[[]byte](transformer)), nil
}
case BoundLiteralPredicate:
switch fieldType.(type) {
case Int32Type:
return truncateNumber(name, p, wrapTransformFn[int32](transformer))
case Int64Type:
return truncateNumber(name, p, wrapTransformFn[int64](transformer))
case DecimalType:
return truncateNumber(name, p, wrapTransformFn[Decimal](transformer))
case StringType:
return truncateArray(name, p, wrapTransformFn[string](transformer))
case BinaryType:
return truncateArray(name, p, wrapTransformFn[[]byte](transformer))
}
}
return nil, nil
}