[ 
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)

Reply via email to