Great thing, looks very useful. > On 11.03.2017, at 23:41, Ricardo Parada <[email protected]> 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 ([email protected]) > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/webobjects-dev/mailinglists%40kataputt.com > > This email sent to [email protected]
Markus Ruggiero [email protected] 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 protected]) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to [email protected]
