class TableFunction extends QueryBody {

    private final FunctionCall functionCall;

    public TableFunction(FunctionCall functionCall) {
        this.functionCall = functionCall;
    }

    public String name() {
        return functionCall.getName().toString();
    }

    public FunctionCall functionCall() {
        return functionCall;
    }

    @Override
    public boolean equals(Object o) {<FILL_FUNCTION_BODY>}

    @Override
    public int hashCode() {
        return Objects.hash(functionCall);
    }

    @Override
    public String toString() {
        return "TableFunction{" +
               "functionCall=" + functionCall +
               '}';
    }

    @Override
    public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
        return visitor.visitTableFunction(this, context);
    }
}

        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        TableFunction that = (TableFunction) o;
        return Objects.equals(functionCall, that.functionCall);
    
<methods>public non-sealed void <init>() ,public R accept(AstVisitor<R,C>, C) ,public abstract boolean equals(java.lang.Object) ,public abstract int hashCode() ,public abstract java.lang.String toString() <variables>