Compiles the functions in a UserFunctionConfigMap, returning UserFunctions.
(ctx context.Context, config FunctionsConfig)
| 70 | |
| 71 | // Compiles the functions in a UserFunctionConfigMap, returning UserFunctions. |
| 72 | func CompileFunctions(ctx context.Context, config FunctionsConfig) (*db.UserFunctions, error) { |
| 73 | if config.MaxFunctionCount != nil && len(config.Definitions) > *config.MaxFunctionCount { |
| 74 | return nil, fmt.Errorf("too many functions declared (> %d)", *config.MaxFunctionCount) |
| 75 | } |
| 76 | fns := db.UserFunctions{ |
| 77 | MaxRequestSize: config.MaxRequestSize, |
| 78 | Definitions: map[string]db.UserFunction{}, |
| 79 | } |
| 80 | var multiError *base.MultiError |
| 81 | for name, fnConfig := range config.Definitions { |
| 82 | if config.MaxCodeSize != nil && len(fnConfig.Code) > *config.MaxCodeSize { |
| 83 | multiError = multiError.Append(fmt.Errorf("function code too large (> %d bytes)", *config.MaxCodeSize)) |
| 84 | } else if userFn, err := compileFunction(ctx, name, "function", fnConfig); err == nil { |
| 85 | fns.Definitions[name] = userFn |
| 86 | } else { |
| 87 | multiError = multiError.Append(err) |
| 88 | } |
| 89 | } |
| 90 | return &fns, multiError.ErrorOrNil() |
| 91 | } |
| 92 | |
| 93 | // Validates a FunctionsConfig. |
| 94 | func ValidateFunctions(ctx context.Context, config FunctionsConfig) error { |