Thanks for all your help. Here is the code I am using now (might need some more 
error checking)

Wish you all a WOnder-full day
---markus---

        public NSArray<Product> findProducts(EOEditingContext ec, String query, 
NSArray<String> queryParameters) {

                String resolvedQuery = query;
                for (String aParameter : queryParameters) {
                        resolvedQuery = query.replaceFirst( "\\?", aParameter );
                }
                
                EOEntity entity = ERXEOAccessUtilities.entityNamed(ec, 
Product.ENTITY_NAME);
                String modelName = entity.model().name();
                NSArray<NSDictionary> rows = EOUtilities.rawRowsForSQL( ec, 
modelName, resolvedQuery, null );

                NSMutableArray<String> productCodes = new 
NSMutableArray<String>();
                for (NSDictionary dict : rows) {
                        NSArray<String> values = dict.allValues();  // there is 
only one value in the dict, but we get an Array
                        String productCode = values.objectAtIndex( 0 );
                        if (productCode != null) {
                                productCodes.addObject( productCode );
                        }
                }
                
                EOQualifier qualifier = 
Product.ATTRIBUTE_PRODUCT_CODE_ERXKEY.in( productCodes );
                NSArray<Product> results = Product.fetchProducts( ec, 
qualifier, null );
                return results;
        }

// Example query:
SELECT prod.PRODUCT_CODE FROM PRODUCT prod, SITE site,  INDUSTRY_PRODUCT ipr, 
INDUSTRY ind WHERE prod.SITE_ID = site.ID AND site.SITE_NAME = '?' AND 
ipr.PRODUCT_ID = prod.ID AND ipr.INDUSTRY_ID = ind.ID AND ind.INDUSTRY_NAME 
='ANH' AND prod.PUB_TRIGGER = 'Y' AND ((prod.EXPIRATION_DATE > SYSDATE) OR 
(prod.EXPIRATION_DATE IS NULL));

Some are a lot more complex with inner and outer joins and embedded SELECT FROM 
... WHERE .... IN ....



> On 24.09.2015, at 16:22, Markus Ruggiero <mailingli...@kataputt.com> wrote:
> 
> Folks,
> 
> What is the preferred way to fetch EOs when you have a db vendor specific 
> "select id from ... where ....." statement?
> 
> I need to interface with a legacy system where I have to incorporate the 
> functionality of an external java tool into a Wonder app. This external tool 
> executes raw SQL select statements which it reads from a file. All the 
> statements are in the form given above and return a list of primary key 
> values (single column fortunately). The tool then iterates through that list 
> and does whatever it has to do (issuing tons of more raw sql). My problem is 
> that these select statements are rather complex and there are many of them. 
> It is just not feasible to replace those with proper EOQualifiers. In 
> addition these statements are parameterized with ? so they can be precompiled 
> and then used with different query values. However everything can be done 
> with standard EOs as soon as I have those corresponding to the returned list 
> of ids.
> 
> Thanks a lot
> ---markus---
> _______________________________________________
> 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

 _______________________________________________
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