class SetSessionAuthorizationStatement extends Statement {

    public enum Scope {
        SESSION, LOCAL
    }

    @Nullable
    private final String user;
    private final Scope scope;

    public SetSessionAuthorizationStatement(Scope scope) {
        this(null, scope);
    }

    public SetSessionAuthorizationStatement(@Nullable String user, Scope scope) {
        this.scope = scope;
        this.user = user;
    }

    /**
     * user is null for the following statements::
     * <p>
     * SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
     * and
     * RESET SESSION AUTHORIZATION
     */
    @Nullable
    public String user() {
        return user;
    }

    public Scope scope() {
        return scope;
    }

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

    @Override
    public int hashCode() {
        return Objects.hash(user, scope);
    }

    @Override
    public String toString() {
        return "SetSessionAuthorizationStatement{" +
               "user='" + user + '\'' +
               ", scope=" + scope +
               '}';
    }

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

        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        SetSessionAuthorizationStatement that = (SetSessionAuthorizationStatement) o;
        return Objects.equals(user, that.user) &&
               scope == that.scope;
    
<methods>public non-sealed void <init>() ,public R accept(AstVisitor<R,C>, C) <variables>