private Collection coalesceOrderedResults(Collection<Collection> results, ExecutionContext context, CompiledSelect cs, int limit) { List<Collection> sortedResults = new ArrayList<Collection>(results.size()); // TODO :Asif : Deal with UNDEFINED for (Object o : results) { if (o instanceof Collection) { sortedResults.add((Collection) o); } } return new NWayMergeResults(sortedResults, cs.isDistinct(), limit, cs.getOrderByAttrs(), context, cs.getElementTypeForOrderByQueries()); }
/** * Applies order-by on the results returned from PR nodes and puts the results in the cumulative * result set. The order-by is applied by running a generated query on the each result returned by * the remote nodes. Example generated query: SELECT DISTINCT * FROM $1 p ORDER BY p.ID Where * results are passed as bind parameter. This is added as quick turn-around, this is added based * on most commonly used queries, needs to be investigated further. */ private SelectResults buildSortedResult(CompiledSelect cs, int limit) throws QueryException { try { ExecutionContext localContext = new QueryExecutionContext(this.parameters, this.pr.cache); List<Collection> allResults = new ArrayList<Collection>(); for (Collection<Collection> memberResults : this.resultsPerMember.values()) { for (Collection res : memberResults) { if (res != null) { allResults.add(res); } } } this.cumulativeResults = new NWayMergeResults(allResults, cs.isDistinct(), limit, cs.getOrderByAttrs(), localContext, cs.getElementTypeForOrderByQueries()); return this.cumulativeResults; } catch (Exception ex) { throw new QueryException( "Unable to apply order-by on the partition region cumulative results.", ex); } }
/** * set keepSerialized flag for remote queries of type 'select *' having independent operators */ void keepResultsSerialized(CompiledSelect cs, ExecutionContext context) { if (isRemoteQuery()) { // for dependent iterators, deserialization is required if (cs.getIterators().size() == context.getAllIndependentIteratorsOfCurrentScope().size() && cs.getWhereClause() == null && cs.getProjectionAttributes() == null && !cs.isDistinct() && cs.getOrderByAttrs() == null) { setKeepSerialized(); } } }
if (select.isDistinct()) { throw new UnsupportedOperationException( "select DISTINCT queries not supported in CQ");
if (selectExpr.isDistinct()) { results = new ResultsCollectionWrapper(elementType, results.asSet()); if (selectExpr.isCount() && (results.isEmpty() || selectExpr.isDistinct())) {
? ((DefaultQuery) context.getQuery()).getSelect().isDistinct() : false;
if (this.whereClause == null && iterators.size() == 1 && isCount() && !isDistinct() && sr instanceof QRegion) { QRegion qr = (QRegion) sr;
@Override @Test public void testConvertibleGroupByQuery_1() throws Exception { Region region = this.createRegion("portfolio", Portfolio.class); for (int i = 1; i < 200; ++i) { Portfolio pf = new Portfolio(i); pf.shortID = (short) ((short) i / 5); region.put("" + i, pf); } String queryStr = "select p.status as status, p.ID from /portfolio p where p.ID > 0 group by status, p.ID "; QueryService qs = CacheUtils.getQueryService(); Query query = qs.newQuery(queryStr); CompiledSelect cs = ((DefaultQuery) query).getSelect(); assertTrue(cs.isDistinct()); assertTrue(cs.isOrderBy()); assertFalse(cs.isGroupBy()); }
@Override @Test public void testConvertibleGroupByQuery_1() throws Exception { Region region = this.createRegion("portfolio", PortfolioPdx.class); for (int i = 1; i < 200; ++i) { PortfolioPdx pf = new PortfolioPdx(i); pf.shortID = (short) ((short) i / 5); region.put("key-" + i, pf); } String queryStr = "select p.status as status, p.ID from /portfolio p where p.ID > 0 group by status, p.ID "; QueryService qs = CacheUtils.getQueryService(); Query query = qs.newQuery(queryStr); CompiledSelect cs = ((DefaultQuery) query).getSelect(); assertTrue(cs.isDistinct()); assertTrue(cs.isOrderBy()); assertFalse(cs.isGroupBy()); }
cs = this.query.getSimpleSelect(); limit = this.query.getLimit(parameters); isDistinct = (cs != null) ? cs.isDistinct() : true; isCount = (cs != null) ? cs.isCount() : false;
&& ((DefaultQuery) context.getQuery()).getSelect().isDistinct()) { set = intermediateResults; intermediateResults = null;