public QueryBuilder buildQuery()

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));
                }
            }
        };
    }