interface SqmFunctionTemplateRegistry {
void register(String name, SqmFunctionTemplate functionTemplate);
SqmFunctionTemplateBuilder build(String name);
}
interface SqmFunctionTemplateBuilder {
SqmFunctionTemplateBuilder minArgumentCount(int minCount);
SqmFunctionTemplateBuilder maxArgumentCount(int maxCount);
SqmFunctionTemplateBuilder argumentTypes(Class<?>... types);
SqmFunctionTemplateBuilder argumentTypes(Type... types);
SqmFunctionTemplateBuilder argumentTypeValidator(ArgumentTypeValidator validator);
SqmFunctionTemplateBuilder returnType(Class<?> returnType);
SqmFunctionTemplateBuilder returnTypeLikeArgument(int argumentIndex);
SqmFunctionTemplateBuilder passThrough();
SqmFunctionTemplateBuilder invariant(String output);
SqmFunctionTemplateBuilder patterned(String outputPattern);
void register();
}