/** * Creates a ObjectSelect that selects objects of a given persistent class * and uses provided expression for its qualifier. */ public static <T> ObjectSelect<T> query(Class<T> entityType, Expression expression) { return new ObjectSelect<T>().entityType(entityType).where(expression); }
/** * Creates a ObjectSelect that fetches data for an {@link ObjEntity} * determined from a provided class and uses provided expression for its * qualifier. */ public static ObjectSelect<DataRow> dataRowQuery(Class<?> entityType, Expression expression) { return query(entityType).fetchDataRows().where(expression); }
public List<T> match(ObjectContext context, Map<Object, Map<String, Object>> mappedSegment) { Collection<Object> keys = mappedSegment.keySet(); List<Expression> expressions = new ArrayList<>(keys.size()); for (Object key : keys) { Expression e = mapper.expressionForKey(key); if (e != null) { expressions.add(e); } } // no keys (?) if (expressions.isEmpty()) { return Collections.emptyList(); } else { return ObjectSelect.query(type).where(ExpressionFactory.or(expressions)).select(context); } } }
/** * Creates a ObjectSelect that fetches DataRows for a {@link DbEntity} * determined from provided "dbEntityName" and uses provided expression for * its qualifier. * * @return this object */ public static ObjectSelect<DataRow> dbQuery(String dbEntityName, Expression expression) { return new ObjectSelect<DataRow>().fetchDataRows().dbEntityName(dbEntityName).where(expression); }
/** * Creates a ObjectSelect that selects objects of a given persistent class * and uses provided expression for its qualifier. */ public static <T> ObjectSelect<T> query(Class<T> entityType, Expression expression, List<Ordering> orderings) { return new ObjectSelect<T>().entityType(entityType).where(expression).orderBy(orderings); }
protected ResultIterator<T> createTargetSelect() { ObjectSelect<T> query = ObjectSelect.query(type).where(targetFilter); return targetCayenneService.newContext().iterator(query); }
private Map<TargetAttribute, Map<Object, Object>> fetchRelated( ObjectContext context, Map<TargetAttribute, Set<Object>> fkMap) { if (fkMap.isEmpty()) { return Collections.emptyMap(); } // map of *path* to map of *pk* to *object*... Map<TargetAttribute, Map<Object, Object>> related = new HashMap<>(); fkMap.forEach((a, fks) -> { if (!fks.isEmpty()) { TargetAttribute relatedPk = a.getForeignKey().get().getTarget(); String relatedPath = relatedPk.getNormalizedPath().substring(ASTDbPath.DB_PREFIX.length()); String relatedEntityName = relatedPk.getEntity().getName(); Map<Object, Object> relatedFetched = new HashMap<>((int) (fks.size() / 0.75)); ObjectSelect .query(Object.class) .entityName(relatedEntityName) .where(ExpressionFactory.inDbExp(relatedPath, fks)) .select(context) // map by fk value (which is a PK of the matched object of course) .forEach(r -> relatedFetched.put(Cayenne.pkForObject((Persistent) r), r)); related.put(a, relatedFetched); } }); return related; }
private Map<?, ?> toMap_AttchedObject_MultiStepPath(ObjectContext context, Persistent persistent) { Iterator<CayenneMapEntry> pathComponents = Cayenne.getObjEntity(persistent).getDbEntity() .resolvePathComponents(this); LinkedList<DbRelationship> reversedPathComponents = new LinkedList<>(); while (pathComponents.hasNext()) { CayenneMapEntry component = pathComponents.next(); if (component instanceof DbRelationship) { DbRelationship rel = (DbRelationship) component; DbRelationship reverseRelationship = rel.getReverseRelationship(); if (reverseRelationship == null) { reverseRelationship = rel.createReverseRelationship(); } reversedPathComponents.addFirst(reverseRelationship); } else { break; // an attribute can only occur at the end of the path } } DbEntity finalEntity = reversedPathComponents.get(0).getSourceEntity(); StringBuilder reversedPathStr = new StringBuilder(); for (int i = 0; i < reversedPathComponents.size(); i++) { reversedPathStr.append(reversedPathComponents.get(i).getName()); if (i < reversedPathComponents.size() - 1) { reversedPathStr.append('.'); } } return ObjectSelect.dbQuery(finalEntity.getName()) .where(ExpressionFactory.matchDbExp(reversedPathStr.toString(), persistent)).selectOne(context); }