void compile(JqlQuery query) { query.compile(globalIdFactory, typeMapper); } }
List<Change> queryForChanges(JqlQuery query) { queryCompiler.compile(query); if (query.isAnyDomainObjectQuery()) { return repository.getChanges(query.isNewObjectChanges(), query.getQueryParams()); } if (query.isIdQuery()){ return repository.getChangeHistory(query.getIdFilter(), query.getQueryParams()); } if (query.isClassQuery()){ return repository.getChangeHistory(query.getClassFilter(), query.getQueryParams()); } if (query.isVoOwnerQuery()) { VoOwnerFilter filter = query.getVoOwnerFilter(); return repository.getValueObjectChangeHistory( filter.getOwnerEntity(), filter.getPath(), query.getQueryParams()); } throw new JaversException(JaversExceptionCode.MALFORMED_JQL, "queryForChanges: " + query + " is not supported"); } }
VoOwnerFilter getVoOwnerFilter() { return getFilter(VoOwnerFilter.class).get(); }
void validate(){ if (isAggregate()) { if (!(isClassQuery() || isInstanceIdQuery())) { throw new JaversException(JaversExceptionCode.MALFORMED_JQL, "aggregate filter can be enabled only for byClass and byInstanceId queries"); } } if (getShadowScope() != DEEP_PLUS && getMaxGapsToFill() > 0) { throw new JaversException(JaversExceptionCode.MALFORMED_JQL, "maxGapsToFill can be used only in the DEEP_PLUS query scope"); } }
List<Shadow> loadNextPage() { JqlQuery currentQuery = awaitingQuery; Pair<List<Shadow>, List<CdoSnapshot>> result = shadowQueryRunner.queryForShadows(currentQuery, filledGapsSnapshots); queries.add(currentQuery); queries.get(0).appendNextStatsForStream(currentQuery.stats()); filledGapsSnapshots.addAll(result.right()); awaitingQuery = currentQuery.nextQueryForStream(); return result.left(); }
Pair<List<Shadow>, List<CdoSnapshot>> queryForShadows(JqlQuery query, List<CdoSnapshot> gapsFilledInPreviousQuery) { List<CdoSnapshot> coreSnapshots = queryForCoreSnapshots(query); CommitTable commitTable = new CommitTable( coreSnapshots, query.getMaxGapsToFill(), query); commitTable.appendSnapshots(gapsFilledInPreviousQuery); if (query.getShadowScope().isCommitDeep()) { commitTable.loadFullCommits(); } List<Shadow> shadows = commitTable.rootsForQuery(query).stream() .map(r -> shadowFactory.createShadow(r.root, r.context, (cm, targetId) -> commitTable.referenceResolver(cm, targetId))) .collect(toList()); query.stats().stop(); logger.debug("queryForShadows executed: {}", query); return new Pair(shadows, commitTable.getFilledGapsSnapshots()); }
private List<CdoSnapshot> queryForCoreSnapshots(JqlQuery query) { queryCompiler.compile(query); query.aggregateIfEntityQuery(); List<CdoSnapshot> snapshots = snapshotQueryRunner.queryForSnapshots(query); query.stats().logShallowQuery(snapshots); return snapshots; }
JqlQuery nextQueryForStream() { return new JqlQuery(filterDefinition, queryParams.nextPage(), shadowScopeDef); }
Stream<Shadow> queryForShadowsStream(JqlQuery query) { if (query.getQueryParams().skip() > 0) { throw new JaversException(JaversExceptionCode.MALFORMED_JQL, "skip can't be set on a JqlStreamQuery. Use Stream.skip() on a resulting Stream."); } int characteristics = IMMUTABLE | ORDERED; StreamQuery streamQuery = new StreamQuery(query); Spliterator<Shadow> spliterator = Spliterators .spliteratorUnknownSize(streamQuery.lazyIterator(), characteristics); Stream<Shadow> stream = StreamSupport.stream(spliterator, false); return stream; }
public JqlQuery build() { return new JqlQuery(filter, queryParamsBuilder.build(), new ShadowScopeDefinition(shadowScope, maxGapsToFill)); }
List<CdoSnapshot> queryForSnapshots(JqlQuery query){ queryCompiler.compile(query); List<CdoSnapshot> result; if (query.isAnyDomainObjectQuery()) { result = repository.getSnapshots(query.getQueryParams()); } else if (query.isIdQuery()){ result = repository.getStateHistory(query.getIdFilter(), query.getQueryParams()); } else if (query.isClassQuery()){ result = repository.getStateHistory(query.getClassFilter(), query.getQueryParams()); } else if (query.isVoOwnerQuery()) { VoOwnerFilter filter = query.getVoOwnerFilter(); result = repository.getValueObjectStateHistory(filter.getOwnerEntity(), filter.getPath(), query.getQueryParams()); } else { throw new JaversException(JaversExceptionCode.MALFORMED_JQL, "queryForSnapshots: " + query + " is not supported"); } return result; } }
boolean hasFilter(Class<? extends Filter> ofType){ return getFilter(ofType).isPresent(); }
boolean isInstanceIdQuery() { Optional<IdFilter> idFilter = getFilter(IdFilter.class); return idFilter.isPresent() && idFilter.get().isInstanceIdFilter(); }
Set<ManagedType> getClassFilter(){ return getFilter(ClassFilter.class).get().getManagedTypes(); }
GlobalId getIdFilter() { return getFilter(IdFilter.class).get().getGlobalId(); }