@Override public ClassDescriptor getClassDescriptor() { return mdDelegate.getClassDescriptor(); }
InheritanceAwareRowReader(RowDescriptor descriptor, QueryMetadata queryMetadata, DataRowPostProcessor postProcessor) { super(descriptor, queryMetadata, postProcessor); this.entityInheritanceTree = queryMetadata.getClassDescriptor().getEntityInheritanceTree(); }
protected List<ColumnDescriptor> buildResultColumns() { this.defaultAttributesByColumn = new HashMap<>(); List<ColumnDescriptor> columns = new ArrayList<>(); SelectQuery<?> query = getSelectQuery(); if(query.getColumns() != null && !query.getColumns().isEmpty()) { appendOverriddenColumns(columns, query); } else if (query.getRoot() instanceof DbEntity) { appendDbEntityColumns(columns, query); } else if (getQueryMetadata().getPageSize() > 0) { appendIdColumns(columns, queryMetadata.getClassDescriptor().getEntity()); } else { appendQueryColumns(columns, query, queryMetadata.getClassDescriptor(), null); } return columns; }
private RowReader<?> createFullRowReader(RowDescriptor descriptor, QueryMetadata queryMetadata, PostprocessorFactory postProcessorFactory) { if (queryMetadata.getPageSize() > 0) { return new IdRowReader<Object>(descriptor, queryMetadata, null, postProcessorFactory.get()); } else if (queryMetadata.getClassDescriptor() != null && queryMetadata.getClassDescriptor().hasSubclasses()) { return new InheritanceAwareRowReader(descriptor, queryMetadata, postProcessorFactory.get()); } else { return new FullRowReader(descriptor, queryMetadata, postProcessorFactory.get()); } }
ClassDescriptor rootDescriptor = queryMetadata.getClassDescriptor();
/** * Routes query prefetches, but not the query itself. */ void route(SelectQuery query, QueryRouter router, EntityResolver resolver) { if (!query.isFetchingDataRows() && query.getPrefetchTree() != null) { this.query = query; this.router = router; this.resolver = resolver; this.classDescriptor = query.getMetaData(resolver).getClassDescriptor(); query.getPrefetchTree().traverse(this); } }
@Override void convert(List<DataRow> mainRows) { PrefetchTreeNode prefetchTree = metadata.getPrefetchTree(); List<Object> rsMapping = metadata.getResultSetMapping(); EntityResultSegment resultSegment = null; if(rsMapping != null && !rsMapping.isEmpty()) { resultSegment = (EntityResultSegment)rsMapping.get(0); } ClassDescriptor descriptor = resultSegment == null ? metadata.getClassDescriptor() : resultSegment.getClassDescriptor(); PrefetchProcessorNode node = toResultsTree(descriptor, prefetchTree, mainRows); List<Persistent> objects = node.getObjects(); updateResponse(mainRows, objects != null ? objects : new ArrayList<>(1)); // apply POST_LOAD callback LifecycleCallbackRegistry callbackRegistry = context.getEntityResolver().getCallbackRegistry(); if (!callbackRegistry.isEmpty(LifecycleEvent.POST_LOAD)) { performPostLoadCallbacks(node, callbackRegistry); } } }
@SuppressWarnings("unchecked") @Override public <T> ResultIterator<T> iterator(final Select<T> query) { final ResultIterator<?> rows = performIteratedQuery(query); final QueryMetadata md = query.getMetaData(getEntityResolver()); if (md.isFetchingDataRows() || isObjectArrayResult(md)) { // no need to convert result return (ResultIterator<T>) rows; } else { // this is a bit optimized version of 'objectFromDataRow' with // resolver cached for reuse... still the rest is pretty suboptimal final ObjectResolver resolver = new ObjectResolver(this, md.getClassDescriptor(), true); return new DataRowResultIterator(rows, resolver); } }
descriptor = this.descriptor; } else { descriptor = queryMetadata.getClassDescriptor();