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;
}
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 ....