class ClientSelect implements ClientQueryClause, DeepCloneable<ClientSelect> {

    @Override
    public void accept(ClientQueryVisitor visitor) {
        if (this.fields != null) {
            for (ClientQueryField field: this.fields) {
                field.accept(visitor);
            }
        }

        if (getDistinctFields() != null) {
            for (ClientQueryField field : getDistinctFields()) {
                field.accept(visitor);
            }
        }

        if (this.aggregations != null) {
            for (ClientQueryAggregatedField aggregatedField: this.aggregations) {
                aggregatedField.accept(visitor);
            }
        }
        visitor.visit(this);
    }

    public  ClientSelect();
    public  ClientSelect(ClientSelect source);
    public  ClientSelect(List<ClientQueryField> fields);

}