}
}
public NSMutableArray<NSMutableDictionary<String, Object>> fetch(NSArray<EOAttribute> attributesToFetch,
EOFetchSpecification fetchSpecification, boolean shouldLock, EOEntity entity, ERMemoryAdaptorContext context) {
EOQualifier qualifier = null;
int fetchLimit = 0;
NSArray<EOSortOrdering> sortOrderings = null;
if (fetchSpecification != null) {
qualifier = fetchSpecification.qualifier();
fetchLimit = fetchSpecification.fetchLimit();
sortOrderings = fetchSpecification.sortOrderings();
}
if (entity.restrictingQualifier() != null) {
if (qualifier != null) {
qualifier = new EOAndQualifier(new NSArray(new EOQualifier[] { qualifier, entity.restrictingQualifier() }));
} else {
qualifier = entity.restrictingQualifier();
}
}
NSMutableArray<EORelationship> mergeRelationships = new NSMutableArray<EORelationship>();
if (qualifier != null && context != null) {
NSArray<EOKeyValueQualifier> keyValueQualifiers = ERXQ.extractKeyValueQualifiers(qualifier);
for (EOKeyValueQualifier keyValueQualifier : keyValueQualifiers) {
String qualifierKey = keyValueQualifier.key();
String relationshipName = qualifierKey;
if (relationshipName.contains(".")) {
relationshipName = ERXStringUtilities.firstPropertyKeyInKeyPath(relationshipName);
}
EORelationship mergeRelationship = entity.relationshipNamed(relationshipName);
if (mergeRelationship != null) {
mergeRelationships.add(mergeRelationship);
qualifier = ERXQ.replaceQualifierWithQualifier(qualifier, keyValueQualifier,
ERXQ.has(qualifierKey, new NSArray(keyValueQualifier.value())));
} else if (qualifierKey.equals(entity.primaryKeyAttributeNames().get(0))
&& keyValueQualifier.selector().name().equals("doesContain") && !(keyValueQualifier.value() instanceof NSArray)) {
// fix wrong schemaBasedQualifier
qualifier= ERXQ.replaceQualifierWithQualifier(qualifier, keyValueQualifier,
ERXQ.is(qualifierKey, keyValueQualifier.value()));
}
}
}
// int count = 0;
NSMutableArray<NSMutableDictionary<String, Object>> fetchedRows = new NSMutableArray<NSMutableDictionary<String, Object>>();
Iterator<NSMutableDictionary<String, Object>> i = iterator();
while (i.hasNext()) {
NSMutableDictionary<String, Object> rawRow = i.next();
NSMutableDictionary<String, Object> row = rowFromStoredValues(rawRow, entity);
for (EORelationship mergeRelationship : mergeRelationships) {
NSArray<NSMutableDictionary<String, Object>> found = null;
if (mergeRelationship.isFlattened() && mergeRelationship.isToMany()) {
found = fetchRelatedManyToManyRows(entity, row, mergeRelationship, context);
} else {
found = fetchRelatedRows(entity, row, mergeRelationship, context);
}
if (found != null && !found.isEmpty()) {
row.setObjectForKey(found, mergeRelationship.name());
}
}
if (qualifier == null || qualifier.evaluateWithObject(row)) {
for (EORelationship mergeRelationship : mergeRelationships) {
row.removeObjectForKey(mergeRelationship.name());
}
fetchedRows.addObject(row);
// count++;