private <O extends Containerable> ObjectQuery createObjectQueryInternal(PrismContainerDefinition<O> objDef, SearchFilterType filterType, PagingType pagingType) throws SchemaException { try { ObjectQuery query = ObjectQueryImpl.createObjectQuery(); if (filterType != null && filterType.containsFilterClause()) { MapXNodeImpl rootFilter = (MapXNodeImpl) filterType.getFilterClauseXNode(); ObjectFilter filter = parseFilter(rootFilter, objDef); query.setFilter(filter); } if (pagingType != null) { ObjectPaging paging = PagingConvertor.createObjectPaging(pagingType, prismContext); query.setPaging(paging); } return query; } catch (SchemaException ex) { throw new SchemaException("Failed to convert query. Reason: " + ex.getMessage(), ex); } }
attributeQuery = queryFactory.createQuery(); attributeQuery.setPaging(query.getPaging());
pagedQuery.setPaging(paging); main: for (;;) { paging.setCookie(lastOid != null ? lastOid : NULL_OID_MARKER);
pagedQuery.setPaging(paging); offset = 0; remaining = repositoryService.countObjects(type, query, options, result);
query.setPaging(paging);
query.setPaging(paging);
private void iterateGeneral(int offset, int size, int batch, final String... names) throws Exception { OperationResult result = new OperationResult("search general"); final List<PrismObject> objects = new ArrayList<>(); ResultHandler handler = new ResultHandler() { int index = 0; @Override public boolean handle(PrismObject object, OperationResult parentResult) { objects.add(object); assertEquals("Incorrect object name was read", names[index++], object.asObjectable().getName().getOrig()); return true; } }; SqlRepositoryConfiguration config = ((SqlRepositoryServiceImpl) repositoryService).getConfiguration(); int oldbatch = config.getIterativeSearchByPagingBatchSize(); config.setIterativeSearchByPagingBatchSize(batch); LOGGER.trace(">>>>>> iterateGeneral: offset = " + offset + ", size = " + size + ", batch = " + batch + " <<<<<<"); ObjectQuery query = prismContext.queryFactory().createQuery(); query.setPaging(prismContext.queryFactory().createPaging(offset, size, ObjectType.F_NAME, OrderDirection.ASCENDING)); repositoryService.searchObjectsIterative(UserType.class, query, handler, null, false, result); result.recomputeStatus(); config.setIterativeSearchByPagingBatchSize(oldbatch); assertTrue(result.isSuccess()); assertEquals(size, objects.size()); }
filter.getConditions().add(attrFilter); query.setPaging(paging);
@Test public void test234SearchObjectsPagedOffsetSortSn() throws Exception { final String TEST_NAME = "test234SearchObjectsPagedOffsetSortSn"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(2, 4); paging.setOrdering(prismContext.queryFactory().createOrdering( ItemPath.create(ShadowType.F_ATTRIBUTES, new QName(RESOURCE_NS, "sn")), OrderDirection.ASCENDING)); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); List<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); result.computeStatus(); assertSuccess(result); display("Search resutls", searchResults); assertSearchResults(searchResults, "jbeckett", "jbond", "cook", "drake" ); assertConnectorOperationIncrement(1, 9); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); }
@Test public void test233SearchObjectsPagedNoOffsetSortSn() throws Exception { final String TEST_NAME = "test233SearchObjectsPagedNoOffsetSortSn"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(null, 4); paging.setOrdering(prismContext.queryFactory().createOrdering( ItemPath.create(ShadowType.F_ATTRIBUTES, new QName(RESOURCE_NS, "sn")), OrderDirection.ASCENDING)); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); SearchResultList<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); result.computeStatus(); assertSuccess(result); display("Search resutls", searchResults); assertSearchResults(searchResults, "monk", "hbarbossa", "jbeckett", "jbond" ); assertConnectorOperationIncrement(1, 9); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); // null offset means SPR search means no estimate assertApproxNumberOfAllResults(searchResults.getMetadata(), null); }
@Test public void test230SearchObjectsPagedNoOffset() throws Exception { final String TEST_NAME = "test230SearchObjectsPagedNoOffset"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(null, 3); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); SearchResultList<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); assertSuccess(result); display("Search resutls", searchResults); assertSearchResults(searchResults, "cook", "drake", "hbarbossa" ); assertConnectorOperationIncrement(1, 7); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); // null offset, SPR, no estimate. assertApproxNumberOfAllResults(searchResults.getMetadata(), null); }
@Test public void test231SearchObjectsPagedOffsetZero() throws Exception { final String TEST_NAME = "test231SearchObjectsPagedOffsetZero"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(0, 4); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); SearchResultList<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); assertSuccess(result); display("Search resutls", searchResults); assertSearchResults(searchResults, "cook", "drake", "hbarbossa", "idm"); assertConnectorOperationIncrement(1, 9); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); // VLV search if forced by using offset. So we have result number estimate. assertApproxNumberOfAllResults(searchResults.getMetadata(), 14); }
@Test public void test232SearchObjectsPagedOffset() throws Exception { final String TEST_NAME = "test232SearchObjectsPagedOffset"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(2, 5); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); SearchResultList<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); result.computeStatus(); assertSuccess(result); display("Search resutls", searchResults); // The results should be this: assertSearchResults(searchResults, "hbarbossa", "idm", "jbeckett", "jbond", "jgibbs" ); assertConnectorOperationIncrement(1, 11); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); // VLV search if forced by using offset. So we have result number estimate. assertApproxNumberOfAllResults(searchResults.getMetadata(), 14); }
query.setPaging(paging); Collection<SelectorOptions<GetOperationOptions>> options = schemaHelper.getOperationOptionsBuilder() .item(ShadowType.F_ASSOCIATION).dontRetrieve()
query.setPaging(paging); query.setAllowPartialResults(true);