private void validateAttributes(final AtlasStructType structType, final FilterCriteria filterCriteria) throws AtlasBaseException { if (filterCriteria != null) { FilterCriteria.Condition condition = filterCriteria.getCondition(); if (condition != null && CollectionUtils.isNotEmpty(filterCriteria.getCriterion())) { for (FilterCriteria criteria : filterCriteria.getCriterion()) { validateAttributes(structType, criteria); } } else { String attributeName = filterCriteria.getAttributeName(); if (StringUtils.isNotEmpty(attributeName) && structType.getAttributeType(attributeName) == null) { throw new AtlasBaseException(AtlasErrorCode.UNKNOWN_ATTRIBUTE, attributeName, structType.getTypeName()); } } } }
private boolean isIndexSearchable(FilterCriteria filterCriteria, AtlasStructType structType) throws AtlasBaseException { String qualifiedName = structType.getQualifiedAttributeName(filterCriteria.getAttributeName()); Set<String> indexedKeys = context.getIndexedKeys(); boolean ret = indexedKeys != null && indexedKeys.contains(qualifiedName); if (ret) { // index exists // for string type attributes, don't use index query in the following cases: // - operation is NEQ, as it might return fewer entries due to tokenization of vertex property value // - value-to-compare has special characters AtlasType attributeType = structType.getAttributeType(filterCriteria.getAttributeName()); if (AtlasBaseTypeDef.ATLAS_TYPE_STRING.equals(attributeType.getTypeName())) { if (filterCriteria.getOperator() == SearchParameters.Operator.NEQ) { if (LOG.isDebugEnabled()) { LOG.debug("NEQ operator found for string attribute {}, deferring to in-memory or graph query (might cause poor performance)", qualifiedName); } ret = false; } else if (hasIndexQuerySpecialChar(filterCriteria.getAttributeValue())) { if (LOG.isDebugEnabled()) { LOG.debug("special characters found in filter value {}, deferring to in-memory or graph query (might cause poor performance)", filterCriteria.getAttributeValue()); } ret = false; } } } if (LOG.isDebugEnabled()) { if (!ret) { LOG.debug("Not using index query for: attribute='{}', operator='{}', value='{}'", qualifiedName, filterCriteria.getOperator(), filterCriteria.getAttributeValue()); } } return ret; }
protected void validateEntity(AtlasEntityExtInfo entityExtInfo, AtlasStruct actual, AtlasStruct expected) throws AtlasBaseException, AtlasException { if (expected == null) { Assert.assertNull(actual, "expected null instance. Found " + actual); return; } Assert.assertNotNull(actual, "found null instance"); AtlasStructType entityType = (AtlasStructType) typeRegistry.getType(actual.getTypeName()); for (String attrName : expected.getAttributes().keySet()) { Object expectedVal = expected.getAttribute(attrName); Object actualVal = actual.getAttribute(attrName); AtlasType attrType = entityType.getAttributeType(attrName); validateAttribute(entityExtInfo, actualVal, expectedVal, attrType, attrName); } }
protected void validateEntity(AtlasEntityExtInfo entityExtInfo, AtlasStruct actual, AtlasStruct expected) throws AtlasBaseException, AtlasException { if (expected == null) { Assert.assertNull(actual, "expected null instance. Found " + actual); return; } Assert.assertNotNull(actual, "found null instance"); AtlasStructType entityType = (AtlasStructType) typeRegistry.getType(actual.getTypeName()); for (String attrName : expected.getAttributes().keySet()) { Object expectedVal = expected.getAttribute(attrName); Object actualVal = actual.getAttribute(attrName); AtlasType attrType = entityType.getAttributeType(attrName); validateAttribute(entityExtInfo, actualVal, expectedVal, attrType, attrName); } }