• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: ERXQuery Preview
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ERXQuery Preview


  • Subject: Re: ERXQuery Preview
  • From: Ricardo Parada <email@hidden>
  • Date: Tue, 14 Mar 2017 08:31:01 -0400



Thanks all for the feedback. I'll be adding it by the weekend I hope. 


On Mar 14, 2017, at 4:29 AM, Markus Ruggiero <email@hidden> wrote:

Great thing, looks very useful.

On 11.03.2017, at 23:41, Ricardo Parada <email@hidden> 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);
Markus Ruggiero
email@hidden
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      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: ERXQuery Preview
      • From: Ricardo Parada <email@hidden>
References: 
 >ERXQuery Preview (From: Ricardo Parada <email@hidden>)
 >Re: ERXQuery Preview (From: Markus Ruggiero <email@hidden>)

  • Prev by Date: Re: ERXQuery Preview
  • Next by Date: Re: ERXWOConditional - where does it get installed?
  • Previous by thread: Re: ERXQuery Preview
  • Next by thread: Re: ERXQuery Preview
  • Index(es):
    • Date
    • Thread