Thanks for the fast response Dan. Unfortunately, that did not work, given the following...
protected static final String CUSTOMERS_WITH_CONTACTS_QUERY = "SELECT DISTINCT customer FROM /Customers customer, /Contacts contact" + " WHERE customer.firstName = contact.person.firstName AND customer.lastName = contact.person.lastName"; @GemfireFunction public List<Customer> findAllCustomersWithContactInformation(FunctionContext functionContext) { return executeQueryOnRegion(toRegionFunctionContext(functionContext)); } protected List<Customer> executeQueryOnRegion(RegionFunctionContext regionFunctionContext) { return executeQueryOnRegion(*PartitionRegionHelper.* *getLocalDataForContext**(regionFunctionContext)*); } @SuppressWarnings("unchecked") protected List<Customer> executeQueryOnRegion(Region<Long, Customer> customers) { try { QueryService queryService = customers.getRegionService().getQueryService(); Query query = queryService.newQuery(CUSTOMERS_WITH_CONTACTS_QUERY); Object results = query.execute(); Assert.isInstanceOf(SelectResults.class, results); return ((SelectResults<Customer>) results).asList(); } catch (Exception e) { throw new RuntimeException("?", e); } } However, the following does work... @SuppressWarnings("unchecked") protected List<Customer> executeQueryInFunctionContext(RegionFunctionContext *functionContext*) { try { QueryService queryService = functionContext.getDataSet().getRegionService().getQueryService(); Query query = queryService.newQuery(CUSTOMERS_WITH_CONTACTS_QUERY); Object results = *query.execute(functionContext);* Assert.isInstanceOf(SelectResults.class, results); return ((SelectResults<Customer>) results).asList(); } catch (Exception e) { throw new RuntimeException("?", e); } } This would probably make for a good example in the *Apache Geode* examples, sometime, ;-). I can contribute this after SpringOne. Thanks again, John On Tue, Jul 12, 2016 at 6:03 PM, Dan Smith <dsm...@pivotal.io> wrote: > I'm not sure, but I think you might need to use the query method on the > Region returned from PartitionRegionHelper.getLocalDataForContext. > > -Dan > > On Tue, Jul 12, 2016 at 5:57 PM, John Blum <jb...@pivotal.io> wrote: > > > I have 2 PRs (Customers & Contacts) and I am running a query to find all > > customers with contact information. I have collocated both Customers and > > Contacts. Initially, I tried to run the query outside a GemFire > Function, > > which failed with... > > > > java.lang.UnsupportedOperationException: *A query on a Partitioned > Region ( > > Customers ) may not reference any other region if query is NOT executed > > within a Function* > > at > > > > > com.gemstone.gemfire.cache.query.internal.DefaultQuery.checkQueryOnPR(DefaultQuery.java:638) > > at > > > > > com.gemstone.gemfire.cache.query.internal.DefaultQuery.execute(DefaultQuery.java:351) > > at > > > > > org.springframework.data.gemfire.GemfireTemplate.find(GemfireTemplate.java:299) > > > > So, then I proceeded to attempt to execute my query... > > > > SELECT DISTINCT customer > > FROM /Customers customer, /Contacts contact" > > WHERE customer.firstName = contact.person.firstName > > AND customer.lastName = contact.person.lastName > > > > ... in a Function as instructed, however, I ended up with the same > > Exception. > > > > I am trying to figure out how to properly execute a JOIN on 2 > "collocated" > > PRs from within a Function, given the FunctionContext (or possibly the > > local data set of the PR using RegionFunctionContext.getDataSet(), or > > something like that). > > > > Any help is appreciated. > > > > Thanks, > > > > -John > > > -- -John 503-504-8657 john.blum10101 (skype)