[ https://issues.apache.org/jira/browse/OFBIZ-4053?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Scott Gray resolved OFBIZ-4053. ------------------------------- Resolution: Fixed Fix Version/s: Upcoming Branch Committed r1627940 Thanks to everyone who provided input here and on the dev mailing list. > Implement an Entity Query Builder > --------------------------------- > > Key: OFBIZ-4053 > URL: https://issues.apache.org/jira/browse/OFBIZ-4053 > Project: OFBiz > Issue Type: New Feature > Components: framework > Affects Versions: Trunk > Reporter: Scott Gray > Assignee: Scott Gray > Fix For: Upcoming Branch > > Attachments: builder.patch, builder.patch, builder.patch > > > As discussed on the dev list here: > http://ofbiz.markmail.org/thread/l6kiywqzfj656dhc > Attached is an initial implementation of builder classes (of sorts) that make > use of method chaining in order to simplify use of the Delegator interface to > query entities. > Rather than taking all possible query parameters into a single method as the > delegator does, this implementation instead builds a query through a > succession of distinct method calls. > A simple example: > {code} > // Using the Delegator interface directly > eli = delegator.find("FinAccountTrans", condition, null, null, > UtilMisc.toList("-transactionDate"), null); > // Using the new implementation > eli = > EntityBuilderUtil.list(delegator).from("FinAccountTrans").where(condition).orderBy("-transactionDate").iterator(); > {code} > A more complex example: > {code} > // Delegator > EntityCondition queryConditionsList = > EntityCondition.makeCondition(allConditions, EntityOperator.AND); > EntityFindOptions options = new EntityFindOptions(true, > EntityFindOptions.TYPE_SCROLL_INSENSITIVE, > EntityFindOptions.CONCUR_READ_ONLY, true); > options.setMaxRows(viewSize * (viewIndex + 1)); > EntityListIterator iterator = delegator.find("OrderHeader", > queryConditionsList, null, null, UtilMisc.toList("orderDate DESC"), options); > // becomes > EntityListIterator iterator = EntityBuilderUtil.list(delegator).distinct() > > .from("OrderHeader") > > .where(allConditions) > > .orderBy("orderDate DESC") > > .maxRows(viewSize * (viewIndex + 1)) > > .cursorScrollInsensitive() > .iterator(); > {code} > A couple of issues with the implementation so far that I'm not entirely happy > with: > - I'm not so sure that I like EntityBuilderUtil.list(delegator) in place of > something like EntityList.use(delegator). The latter requires less typing > and I think is more intuitive than typing EntityBuilderUtil because of its > similarities to the corresponding minilang method calls, I actually kept > having trouble remembering what it was called when converting some delegator > calls over. It also requires a little more typing (16-17 characters vs. > 12-13), not a big deal but every little bit helps with what would be a very > commonly used class. > - I'm struggling to see the point of having the GenericQueryBuilder > interface, the two classes share very little in the way of API and its use > seems a little superfluous to me. > Opinions on the above points or anything else to do with the implementation > are most welcome. I'd like to get the API locked down (and hopefully some > javadocs in place) before committing. -- This message was sent by Atlassian JIRA (v6.3.4#6332)