Re: performQuery generics

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Fri Dec 28 2007 - 04:31:53 EST

  • Next message: Andrus Adamchik: "Re: Logging changes?"

    On Dec 27, 2007, at 10:55 PM, Tore Halset wrote:
    >>> // new
    >>> <T> List<T> performQuery(Class<T> aClass, Query query);
    >
    > +0. I would like to use a specific interface instead if possible.
    > public <T> List<T> performQuery(PersistentSelectQuery<T> query);
    >
    >>> // new
    >>> List<DataRow> performDataRowQuery(Query query);
    >
    > +0. I would like to use a specific interface instead if possible.
    > public List<DataRow> performQuery(DataRowQuery query);

    Ok, I've played a bit with parameterizing Query... The results are
    mixed at best. I am trying to avoid the explosion of subclasses
    (consider that in addition to SelectQuery we have EJBQLQuery,
    ProcedureQuery, SQLTemplate, NamedQuery, ObjectIdQuery, etc. that can
    return a ResultSet). I think I solved the DataRowQuery subclass
    problem, by making it a decorator instead of a subclass:

    public interface TypedQuery<T> extends Query {

    }

    public class DataRowQuery implements
    TypedQuery<org.apache.cayenne.DataRow> {

            protected Query query;

            public DataRowQuery(Query query) {
                    this.query = query;
            }

            public SQLAction createSQLAction(SQLActionVisitor visitor) {
                    return query.createSQLAction(visitor);
            }
             ...
    }

    But we are still left with 6 extra subclasses that the user will have
    to deal with in the code, as well as the method naming issues that Ari
    mentioned :-/

    Andrus



    This archive was generated by hypermail 2.0.0 : Fri Dec 28 2007 - 04:32:40 EST