if (subfilter instanceof PropertyValueFilter) { PropertyValueFilter<?> valueFilter = (PropertyValueFilter<?>) subfilter; ItemDefinition definition = valueFilter.getDefinition(); if (definition instanceof ResourceAttributeDefinition) { return; // already has a resource-related definition if (!ShadowType.F_ATTRIBUTES.equivalent(valueFilter.getParentPath())) { return; QName attributeName = valueFilter.getElementName(); ResourceAttributeDefinition attributeDefinition = objectClassDefinition.findAttributeDefinition(attributeName); if (attributeDefinition == null) { + attributeName + " in query " + query)); valueFilter.setDefinition(attributeDefinition);
for (ObjectFilter f : conditions) { if (f instanceof PropertyValueFilter) { // TODO ItemPath parentPath = ((PropertyValueFilter) f).getParentPath(); if (parentPath.isEmpty()) { QName elementName = ((PropertyValueFilter) f).getElementName(); if (QNameUtil.match(ShadowType.F_OBJECT_CLASS, elementName) || QNameUtil.match(ShadowType.F_AUXILIARY_OBJECT_CLASS, elementName) || ((PropertyValueFilter) f).getFullPath());
protected Object getValue(PropertyValueFilter filter) throws QueryException { PrismValue val = filter.getSingleValue(); if (val == null) { return null; } else if (val instanceof PrismPropertyValue) { PrismPropertyValue propertyValue = (PrismPropertyValue) val; return propertyValue.getValue(); } else { throw new QueryException("Non-property value in filter: " + filter + ": " + val.getClass()); } }
} else if (filter instanceof PropertyValueFilter) { PropertyValueFilter valFilter = (PropertyValueFilter) filter; ItemPath path = valFilter.getFullPath(); ItemDefinition definition = valFilter.getDefinition(); throw new QueryException("Couldn't find a proper data item to query, given base entity " + baseEntityDefinition + " and this filter: " + valFilter.debugDump());
protected Condition createPropertyVsPropertyCondition(String leftPropertyValuePath) throws QueryException { HqlDataInstance rightItem = getItemPathResolver().resolveItemPath(filter.getRightHandSidePath(), filter.getRightHandSideDefinition(), getBaseHqlEntityForChildren(), true); String rightHqlPath = rightItem.getHqlPath(); RootHibernateQuery hibernateQuery = context.getHibernateQuery(); // TODO take data types into account, e.g. // PolyString vs PolyString // PolyString vs String (and vice versa) // non-string extension items vs non-string static items // // And also take matching rules into account as well. if (filter instanceof EqualFilter) { // left = right OR (left IS NULL AND right IS NULL) Condition condition = hibernateQuery.createCompareXY(leftPropertyValuePath, rightHqlPath, "=", false); OrCondition orCondition = hibernateQuery.createOr( condition, hibernateQuery.createAnd( hibernateQuery.createIsNull(leftPropertyValuePath), hibernateQuery.createIsNull(rightHqlPath) ) ); return orCondition; } else if (filter instanceof ComparativeFilter) { ItemRestrictionOperation operation = findOperationForFilter(filter); Condition condition = hibernateQuery.createCompareXY(leftPropertyValuePath, rightHqlPath, operation.symbol(), false); return condition; } else { throw new QueryException("Right-side ItemPath is supported currently only for EqualFilter or ComparativeFilter, not for " + filter); } }
@Override public Condition interpretInternal() throws QueryException { String propertyValuePath = getHqlDataInstance().getHqlPath(); if (filter.getRightHandSidePath() != null) { return createPropertyVsPropertyCondition(propertyValuePath); } else { Object value = RAnyConverter.getAggregatedRepoObject(getValue(filter)); Condition c = createPropertyVsConstantCondition(propertyValuePath, value, filter); return addIsNotNullIfNecessary(c, propertyValuePath); } } }
@Override public Condition interpretInternal() throws QueryException { if (linkDefinition.getTargetDefinition().isLob()) { throw new QueryException("Can't query based on clob property value '" + linkDefinition + "'."); } String propertyValuePath = getHqlDataInstance().getHqlPath(); if (filter.getRightHandSidePath() != null) { return createPropertyVsPropertyCondition(propertyValuePath); } else { Object value = getValueFromFilter(filter); Condition condition = createPropertyVsConstantCondition(propertyValuePath, value, filter); return addIsNotNullIfNecessary(condition, propertyValuePath); } }
PrismPropertyValue value = ((PropertyValueFilter<?>) filter).getSingleValue(); if (value == null) { throw new SchemaException("'createdTimestamp' filter contains a null value: " + filter);