I finally had a chance to look through this and it seems quite cool,
actually. However, it seems to name and therefore register all
queries, even if they aren't supposed to be:
SelectQuery unnamedQuery = new SelectQuery(Order.class, "(isFilled =
0) or (orderID = $orderID)");
List result = dataContext.performQuery(unnamedQuery.queryWithParameters(tmap,
false));
Since I didn't name it, I don't think Cayenne should be caching this
for me, should it? It will probably result in an NPE, anyway. Maybe
there should be a check, like:
if (name != null && !"".equals(name)) {
query.setName(name + parametersHash.toHashCode());
}
Oh... is there any downsides to if the parameter map is arbitrarily
long? Looks like it should be fine.
On 9/6/05, Michael Gentry (Yes, I'm a Contractor)
<michael_gentr..anniemae.com> wrote:
> Could a few eyeballs look over this and give me feedback? It seems to work
> with my test case.
>
> In org.objectstyle.cayenne.query.SelectQuery.java:354 (at least in my 1.2
> checkout):
>
>
> public SelectQuery queryWithParameters(Map parameters, boolean
> pruneMissing) {
> // create a query replica
> SelectQuery query = new SelectQuery();
> query.setDistinct(distinct);
>
> this.selectProperties.copyToProperties(query.selectProperties);
>
> query.setLoggingLevel(logLevel);
> query.setParentObjEntityName(parentObjEntityName);
> query.setParentQualifier(parentQualifier);
> query.setRoot(root);
>
> // TODO: implement algorithm for building the name based on the
> original name and
> // the hashcode of the map of parameters. This way query clone can
> take advantage
> // of caching.
>
> Iterator keyValuePairs = parameters.entrySet().iterator();
> HashCodeBuilder parametersHash = new HashCodeBuilder();
>
> while (keyValuePairs.hasNext()) {
> Map.Entry entry = (Map.Entry) keyValuePairs.next();
>
> parametersHash.append(entry.getKey());
> parametersHash.append(entry.getValue());
> }
>
> query.setName(name + parametersHash.toHashCode());
>
> if (prefetches != null) {
> query.addPrefetches(prefetches);
> }
>
> if (orderings != null) {
> query.addOrderings(orderings);
> }
>
> if (customDbAttributes != null) {
> query.addCustomDbAttributes(customDbAttributes);
> }
>
> // substitute qualifier parameters
> if (qualifier != null) {
> query.setQualifier(qualifier.expWithParameters(parameters,
> pruneMissing));
> }
>
> return query;
> }
>
>
> I bolded the portions of interest. Of course, the TODO can be removed if
> everything thinks this is valid.
>
> Thanks,
>
> /dev/mrg
> --
> I'm Victor. I'm the cleaner.
>
>
This archive was generated by hypermail 2.0.0 : Wed Sep 14 2005 - 08:58:34 EDT