StringBuilder str = new StringBuilder(); str.append("Kind=" + table); if (primaryDatastoreQuery.isKeysOnly()) { str.append(" KEYS-ONLY");
/** * Make a new Query object that is exactly like the old. Too bad Query isn't Cloneable. */ protected com.google.appengine.api.datastore.Query cloneRawQuery(com.google.appengine.api.datastore.Query orig) { com.google.appengine.api.datastore.Query copy = new com.google.appengine.api.datastore.Query(orig.getKind(), orig.getAncestor()); for (FilterPredicate filter: orig.getFilterPredicates()) copy.addFilter(filter.getPropertyName(), filter.getOperator(), filter.getValue()); for (SortPredicate sort: orig.getSortPredicates()) copy.addSort(sort.getPropertyName(), sort.getDirection()); // This should be impossible but who knows what might happen in the future if (orig.isKeysOnly()) copy.setKeysOnly(); return copy; }
@Test public void testCompositeFilter() { Query query = new Query(kindName, rootKey); Filter filter = Query.CompositeFilterOperator.and( Query.FilterOperator.LESS_THAN_OR_EQUAL.of("intData", 40), Query.FilterOperator.GREATER_THAN.of("intData", 0)); query.setFilter(filter); query.addSort("intData", Query.SortDirection.DESCENDING); List<Entity> es = service.prepare(query).asList(fo); assertEquals("check return count", 2, es.size()); assertEquals("check query filter", filter, query.getFilter()); assertEquals("check query key only", false, query.isKeysOnly()); Query.CompositeFilter cf = (Query.CompositeFilter) query.getFilter(); assertEquals(2, cf.getSubFilters().size()); assertEquals(Query.CompositeFilterOperator.AND, cf.getOperator()); }