protected PrefetchProcessorNode toResultsTree(ClassDescriptor descriptor, PrefetchTreeNode prefetchTree, List<Object[]> rows, int position) { List<DataRow> rowsColumn = new ArrayList<>(rows.size()); for (Object[] row : rows) { rowsColumn.add((DataRow) row[position]); } if (prefetchTree != null) { PrefetchTreeNode prefetchTreeNode = null; for (PrefetchTreeNode prefetch : prefetchTree.getChildren()) { if (descriptor.getEntity().getName().equals(prefetch.getEntityName())) { if (prefetchTreeNode == null) { prefetchTreeNode = new PrefetchTreeNode(); } PrefetchTreeNode addPath = prefetchTreeNode.addPath(prefetch.getPath()); addPath.setSemantics(prefetch.getSemantics()); addPath.setPhantom(false); } } prefetchTree = prefetchTreeNode; } if (prefetchTree == null) { return new ObjectResolver(context, descriptor, metadata.isRefreshingObjects()) .synchronizedRootResultNodeFromDataRows(rowsColumn); } else { HierarchicalObjectResolver resolver = new HierarchicalObjectResolver(context, metadata, descriptor, true); return resolver.synchronizedRootResultNodeFromDataRows(prefetchTree, rowsColumn, prefetchResultsByPath); } }
i); if (prefetchTree != null) { for (PrefetchTreeNode prefetch : prefetchTree.getChildren()) { if (((EJBQLExpression) nextMapping).getText().equals( prefetch.getEjbqlPathEntityId())) {
void merge(PrefetchTreeNode original, PrefetchTreeNode toMerge) { if (toMerge.getSemantics() != UNDEFINED_SEMANTICS) { original.setSemantics(toMerge.getSemantics()); } if (!toMerge.isPhantom()) { original.setPhantom(false); } for (PrefetchTreeNode childToMerge : toMerge.getChildren()) { PrefetchTreeNode childOrigin = original.getChild(childToMerge.getName()); if (childOrigin == null) { childOrigin = original.addPath(childToMerge.getName()); } merge(childOrigin, childToMerge); } }
private PrefetchTreeNode deepClone(PrefetchTreeNode source, PrefetchTreeNode targetParent) { PrefetchTreeNode target = new PrefetchTreeNode(targetParent, source.getName()); target.setEjbqlPathEntityId(source.getEjbqlPathEntityId()); target.setEntityName(source.getEntityName()); target.setPhantom(source.isPhantom()); target.setSemantics(source.getSemantics()); for (PrefetchTreeNode child : source.getChildren()) { target.addChild(deepClone(child, target)); } return target; }
@Test public void testBuildQuery_Prefetches() { SelectQuery<E2> query = new SelectQuery<E2>(E2.class); ResourceEntity<E2> resultFilter = getResourceEntity(E2.class); AgRelationship incoming = resultFilter.getAgEntity().getRelationship(E2.E3S.getName()); @SuppressWarnings("unchecked") AgPersistentEntity<E3> target = Mockito.mock(AgPersistentEntity.class); resultFilter.getChildren().put(E2.E3S.getName(), new ResourceEntity<E3>(target, incoming)); SelectContext<E2> context = new SelectContext<E2>(E2.class); context.setEntity(resultFilter); context.setSelect(query); SelectQuery<E2> amended = makeQueryStage.buildQuery(context); assertSame(query, amended); PrefetchTreeNode rootPrefetch = amended.getPrefetchTree(); assertNotNull(rootPrefetch); assertEquals(1, rootPrefetch.getChildren().size()); PrefetchTreeNode child1 = rootPrefetch.getChildren().iterator().next(); assertEquals(E2.E3S.getName(), child1.getPath()); }
@Override public void writeTo(Output output, PrefetchTreeNode message) throws IOException { if (message.getName() != null) { output.writeString(1, message.getName(), false); } output.writeBool(2, message.isPhantom(), false); output.writeInt32(3, message.getSemantics(), false); if (message.getEjbqlPathEntityId() != null) { output.writeString(4, message.getEjbqlPathEntityId(), false); } if (message.getEntityName() != null) { output.writeString(5, message.getEntityName(), false); } if (message.hasChildren()) { for (PrefetchTreeNode node : message.getChildren()) { output.writeObject(6, node, this, true); } } }
for(PrefetchTreeNode prefetch : query.getPrefetchTree().getChildren()) { prefetch.setEntityName(oe.getName());