public ExistsRestriction(InterpretationContext context, ExistsFilter filter, JpaEntityDefinition baseEntityDefinition, Restriction parent) { super(context, filter, filter.getFullPath(), null, baseEntityDefinition, parent); }
private MapXNodeImpl serializeExistsFilter(ExistsFilter filter, PrismSerializer<RootXNode> xnodeSerializer) throws SchemaException{ MapXNodeImpl content = new MapXNodeImpl(); serializePath(content, filter.getFullPath(), filter); if (filter.getFilter() != null){ content.put(ELEMENT_FILTER, serializeFilter(filter.getFilter(), xnodeSerializer)); } return createFilter(CLAUSE_EXISTS, content); }
@Test public void test500ExistsAll() throws Exception { System.out.println("===[ test500ExistsAll ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN ObjectFilter filter = prismContext.queryFor(UserType.class) .exists(UserType.F_ASSIGNMENT).all() .buildFilter(); System.out.println("Original filter:\n" + filter.debugDump()); // THEN ObjectFilter simplified = ObjectQueryUtil.simplify(filter, prismContext); System.out.println("Simplified filter:\n" + DebugUtil.debugDump(simplified)); assertTrue("Wrong simplified filter: " + simplified, simplified instanceof ExistsFilter); ExistsFilter existsSimplified = (ExistsFilter) simplified; assertEquals("Wrong simplified filter path", UserType.F_ASSIGNMENT, existsSimplified.getFullPath()); assertTrue("Wrong simplified filter subfilter: " + existsSimplified.getFilter(), ObjectQueryUtil.isAll(existsSimplified.getFilter())); }
@Test public void test520ExistsUndefined() throws Exception { System.out.println("===[ test520ExistsUndefined ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN ObjectFilter filter = prismContext.queryFor(UserType.class) .exists(UserType.F_ASSIGNMENT).undefined() .buildFilter(); System.out.println("Original filter:\n" + filter.debugDump()); // THEN ObjectFilter simplified = ObjectQueryUtil.simplify(filter, prismContext); System.out.println("Simplified filter:\n" + DebugUtil.debugDump(simplified)); assertTrue("Wrong simplified filter: " + simplified, simplified instanceof ExistsFilter); ExistsFilter existsSimplified = (ExistsFilter) simplified; assertEquals("Wrong simplified filter path", UserType.F_ASSIGNMENT, existsSimplified.getFullPath()); assertTrue("Wrong simplified filter subfilter: " + existsSimplified.getFilter(), ObjectQueryUtil.isAll(existsSimplified.getFilter())); }
@Override public Condition interpret() throws QueryException { HqlDataInstance dataInstance = getItemPathResolver() .resolveItemPath(filter.getFullPath(), filter.getDefinition(), getBaseHqlEntity(), false); boolean isAll = filter.getFilter() == null || filter.getFilter() instanceof AllFilter; JpaDataNodeDefinition jpaDefinition = dataInstance.getJpaDefinition(); if (!isAll) { if (!(jpaDefinition instanceof JpaEntityDefinition)) { // partially checked already (for non-null-ness) throw new QueryException("ExistsRestriction with non-empty subfilter points to non-entity node: " + jpaDefinition); } setHqlDataInstance(dataInstance); QueryInterpreter2 interpreter = context.getInterpreter(); return interpreter.interpretFilter(context, filter.getFilter(), this); } else if (jpaDefinition instanceof JpaPropertyDefinition && (((JpaPropertyDefinition) jpaDefinition).isCount())) { RootHibernateQuery hibernateQuery = context.getHibernateQuery(); return hibernateQuery.createSimpleComparisonCondition(dataInstance.getHqlPath(), 0, ">"); } else { // TODO support exists also for other properties (single valued or multi valued) throw new UnsupportedOperationException("Exists filter with 'all' subfilter is currently not supported"); } }
} else if (filter instanceof ExistsFilter) { ExistsFilter existsFilter = (ExistsFilter) filter; ItemPath path = existsFilter.getFullPath(); ItemDefinition definition = existsFilter.getDefinition(); ProperDataSearchResult<JpaDataNodeDefinition> searchResult = resolver.findProperDataDefinition(