in oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBEventQueryDAO.java [95:151]
public QueryBuilder<MeasureQuery> buildQuery(final List<EventQueryCondition> conditionList) {
EventQueryCondition condition = conditionList.get(0);
final Order queryOrder = isNull(condition.getOrder()) ? Order.DES : condition.getOrder();
final PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(condition.getPaging());
return new QueryBuilder<MeasureQuery>() {
@Override
protected void apply(MeasureQuery query) {
List<AbstractCriteria> eventsQueryConditions = new ArrayList<>(conditionList.size());
query.limit(page.getLimit());
query.offset(page.getFrom());
if (queryOrder == Order.ASC) {
query.setOrderBy(
new AbstractQuery.OrderBy(Event.START_TIME, AbstractQuery.Sort.ASC));
} else {
query.setOrderBy(
new AbstractQuery.OrderBy(Event.START_TIME, AbstractQuery.Sort.DESC));
}
for (final EventQueryCondition condition : conditionList) {
List<PairQueryCondition<?>> queryConditions = new ArrayList<>();
if (!isNullOrEmpty(condition.getUuid())) {
queryConditions.add(eq(Event.UUID, condition.getUuid()));
}
final Source source = condition.getSource();
if (source != null) {
if (!isNullOrEmpty(source.getService())) {
queryConditions.add(eq(Event.SERVICE, source.getService()));
}
if (!isNullOrEmpty(source.getServiceInstance())) {
queryConditions.add(eq(Event.SERVICE_INSTANCE, source.getServiceInstance()));
}
if (!isNullOrEmpty(source.getEndpoint())) {
queryConditions.add(eq(Event.ENDPOINT, source.getEndpoint()));
}
}
if (!isNullOrEmpty(condition.getName())) {
queryConditions.add(eq(Event.NAME, condition.getName()));
}
if (condition.getType() != null) {
queryConditions.add(eq(Event.TYPE, condition.getType().name()));
}
if (!isNullOrEmpty(condition.getLayer())) {
queryConditions.add(eq(Event.LAYER, Layer.valueOf(condition.getLayer()).value()));
}
eventsQueryConditions.add(and(queryConditions));
}
if (eventsQueryConditions.size() == 1) {
query.criteria(eventsQueryConditions.get(0));
} else if (eventsQueryConditions.size() > 1) {
query.criteria(or(eventsQueryConditions));
}
}
};
}