class VersionFunction extends Scalar<String, Void> {

    public static final String NAME = "version";

    private static final FunctionName FQN = new FunctionName(PgCatalogSchemaInfo.NAME, NAME);

    public static void register(Functions.Builder module) {
        module.add(
            Signature.scalar(
                FQN,
                DataTypes.STRING.getTypeSignature()
            ).withFeatures(EnumSet.of(Feature.NON_NULLABLE)),
            VersionFunction::new
        );

    }

    private static String formatVersion() {<FILL_FUNCTION_BODY>}

    private static final String VERSION = formatVersion();

    public VersionFunction(Signature signature, BoundSignature boundSignature) {
        super(signature, boundSignature);
    }

    @Override
    @SafeVarargs
    public final String evaluate(TransactionContext txnCtx, NodeContext nodeCtx, Input<Void>... args) {
        return VERSION;
    }
}

        String version = Version.displayVersion(Version.CURRENT, Version.CURRENT.isSnapshot());
        String built = String.format(
            Locale.ENGLISH,
            "built %s/%s",
            Build.CURRENT.hashShort(),
            Build.CURRENT.timestamp());
        String vmVersion = String.format(
            Locale.ENGLISH,
            "%s %s",
            System.getProperty("java.vm.name"),
            System.getProperty("java.vm.version"));
        String osVersion = String.format(
            Locale.ENGLISH,
            "%s %s %s",
            System.getProperty("os.name"),
            System.getProperty("os.version"),
            System.getProperty("os.arch"));

        return String.format(
            Locale.ENGLISH,
            "CrateDB %s (%s, %s, %s)",
            version,
            built,
            osVersion,
            vmVersion);
    
<methods>public BoundSignature boundSignature() ,public Scalar<java.lang.String,java.lang.Void> compile(List<io.crate.expression.symbol.Symbol>, java.lang.String, io.crate.role.Roles) ,public transient abstract java.lang.String evaluate(io.crate.metadata.TransactionContext, io.crate.metadata.NodeContext, Input<java.lang.Void>[]) ,public io.crate.expression.symbol.Symbol normalizeSymbol(io.crate.expression.symbol.Function, io.crate.metadata.TransactionContext, io.crate.metadata.NodeContext) ,public io.crate.metadata.functions.Signature signature() <variables>public static final Set<io.crate.metadata.Scalar.Feature> DETERMINISTIC_AND_COMPARISON_REPLACEMENT,public static final Set<io.crate.metadata.Scalar.Feature> DETERMINISTIC_ONLY,public static final Set<io.crate.metadata.Scalar.Feature> NO_FEATURES,protected final non-sealed BoundSignature boundSignature,protected final non-sealed io.crate.metadata.functions.Signature signature