Great thing, looks very useful.

> On 11.03.2017, at 23:41, Ricardo Parada <rpar...@mac.com> wrote:
> 
> Hi all,
> 
> Over the years, I’ve worked on an class for doing ad hoc queries.  This class 
> has gotten better and better.  At first, the API of this class and some 
> implementation details were not  ready for public consumption in my opinion.  
> 
> However, recently I took the time to polish the code as much as possible and 
> if I can get my employer's approval I would like to contribute this code to 
> project Wonder which has given us so much in return during the years. 
> 
> Here is a preview of its functionality.  Please let me know if you guys think 
> this would be a useful contribution.
> ERXQuery.java
> This class has a fluent API that mimics a select statement:
> NSArray<NSDictionary<String,Object>> records =
>    ERXQuery.create()
>       .select (keys)
>       .from (entity)
>       .where (qualifier)
>       .groupBy (groupings)
>       .having (havingQualifier)
>       .orderBy (sortings)
>       .fetch();
> 
> Overview
> ERXQuery allows you to use EOF constructs (EOQualifiers, EOAttributes, 
> EOSortOrdering, EOAttribute names, relationships, etc.) to create queries of 
> the form:
> SELECT ...
> FROM ...
> WHERE ...
> GROUP BY ...
> HAVING ...
> ORDER BY ...
> 
> Using Ad Hoc Attributes
> You may use the ERXAdHocAttributes class to easily create ad hoc attributes 
> to use with your query. For example, the code below creates two ad hoc 
> EOAttributes. An ad hoc attribute is an EOAttribute that is not physically 
> attached to an entity and that has a definition. They are useful for 
> aggregating other attributes. The definition of the attribute can reference 
> relationships and attributes as shown below.
> // Using a single query against the order entity, count the number of
> // orders and line items that match the qualifier.
> ERXAdHocAttributes attributes = ERXAdHocAttributes.create(orderEntity)
>    .add("itemCount", "COUNT(DISTINCT lineItems.lineItemID)", "intNumber")
>    .add("orderCount", "COUNT(DISTINCT orderID)", "intNumber");
> 
> NSDictionary<String,Object> row =
>    ERXQuery.create()
>       .select (attributes)
>       .from (orderEntity)
>       .where (qualifier)
>       .fetch()
>       .lastObject();
> 
> int orderCount = ((Number) row.objectForKey("orderCount")).intValue();
> int itemCount = ((Number) row.objectForKey("itemCount")).intValue();
> 
> Fetching into a Custom Record Class
> You can also fetch using a custom class of your choice, i.e. Foo, as shown 
> below:
> // Using java >= 8 is easy with a lambda expression
> NSArray<Foo> objs = query.fetch(editingContext, (ec, row) -> new Foo(ec, 
> row));
>    
> 
> // Using java < 8 you must provide a RecordConstructor 
> ERXQuery.RecordConstructor<Foo> recordConstructor =
>    new ERXQuery.RecordConstructor<Foo> {
>        @Override
>        public Foo constructRecord(EOEditingContext ec, NSMutableDictionary 
> row) {
>           return new Foo(ec, row);
>        }
>    };
> 
> NSArray objs = query.fetch(editingContext, recordConstructor);
> 
> Author: Ricardo J. Parada
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/mailinglists%40kataputt.com
> 
> This email sent to mailingli...@kataputt.com



Markus Ruggiero
mailingli...@kataputt.com
Check out the new book about Project Wonder and WebObjects on 
http://learningthewonders.com/







 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to