class CreateView extends Statement {

    private final QualifiedName name;
    private final Query query;
    private final boolean replaceExisting;

    public CreateView(QualifiedName name, Query query, boolean replaceExisting) {
        this.name = name;
        this.query = query;
        this.replaceExisting = replaceExisting;
    }

    public QualifiedName name() {
        return name;
    }

    public Query query() {
        return query;
    }

    public boolean replaceExisting() {
        return replaceExisting;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        CreateView that = (CreateView) o;

        if (replaceExisting != that.replaceExisting) return false;
        if (!name.equals(that.name)) return false;
        return query.equals(that.query);
    }

    @Override
    public int hashCode() {<FILL_FUNCTION_BODY>}

    @Override
    public String toString() {
        return "CreateView{" +
               "name=" + name +
               ", query=" + query +
               ", replaceExisting=" + replaceExisting +
               '}';
    }

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

        int result = name.hashCode();
        result = 31 * result + query.hashCode();
        result = 31 * result + (replaceExisting ? 1 : 0);
        return result;
    
<methods>public non-sealed void <init>() ,public R accept(AstVisitor<R,C>, C) <variables>