public boolean notAborted() { return !isAborted(); }
protected QueryBuilder createQueryBuilder(PredicatesHolder predicatesHolder) { if (predicatesHolder.isAborted()) return null; return FilterHelper.createFilterBuilder(predicatesHolder); }
protected PredicatesHolder getVertexPredicates(List<Vertex> vertices, Direction direction) { PredicatesHolder outPredicates = this.outVertexSchema.toPredicates(vertices); PredicatesHolder inPredicates = this.inVertexSchema.toPredicates(vertices); if(direction.equals(Direction.OUT) && outPredicates.notAborted()) return outPredicates; if(direction.equals(Direction.IN) && inPredicates.notAborted()) return inPredicates; if (outPredicates.notAborted() && inPredicates.notAborted()) return PredicatesHolderFactory.or(inPredicates, outPredicates); else if (outPredicates.isAborted()) return inPredicates; else if (inPredicates.isAborted()) return outPredicates; else return PredicatesHolderFactory.abort(); }
protected PredicatesHolder getVertexPredicates(List<Vertex> vertices, Direction direction) { PredicatesHolder outPredicates = this.outVertexSchema.toPredicates(vertices); PredicatesHolder inPredicates = this.inVertexSchema.toPredicates(vertices); if (direction.equals(Direction.OUT) && outPredicates.notAborted()) return outPredicates; if (direction.equals(Direction.IN) && inPredicates.notAborted()) return inPredicates; if (outPredicates.notAborted() && inPredicates.notAborted()) return PredicatesHolderFactory.or(inPredicates, outPredicates); else if (outPredicates.isAborted()) return inPredicates; else if (inPredicates.isAborted()) return outPredicates; else return PredicatesHolderFactory.abort(); } }
@Override public QueryBuilder getSearch(SearchVertexQuery query) { PredicatesHolder edgePredicates = this.toPredicates(query.getPredicates()); PredicatesHolder vertexPredicates = this.getVertexPredicates(query.getVertices(), query.getDirection()); PredicatesHolder predicatesHolder = PredicatesHolderFactory.and(edgePredicates, vertexPredicates); if (predicatesHolder.isAborted()) return null; QueryBuilder queryBuilder = createQueryBuilder(predicatesHolder); return queryBuilder; // return createSearch(query, queryBuilder); }
@Override public Select getSearch(SearchQuery<E> query, PredicatesHolder predicatesHolder) { if (predicatesHolder.isAborted()) { return null; } Condition conditions = new JdbcPredicatesTranslator().translate(predicatesHolder); int finalLimit = query.getLimit() < 0 ? Integer.MAX_VALUE : query.getLimit(); SelectConditionStep<Record> where = createSqlQuery(query.getPropertyKeys()) .where(conditions); List<Pair<String, Order>> orders = query.getOrders(); if (orders != null){ List<SortField<Object>> orderValues = orders.stream().filter(order -> !order.getValue1().equals(Order.shuffle)) .filter(order -> getFieldByPropertyKey(order.getValue0()) != null) .map(order -> order.getValue1().equals(Order.incr) ? field(getFieldByPropertyKey(order.getValue0())).asc() : field(getFieldByPropertyKey(order.getValue0())).desc()).collect(Collectors.toList()); if (orderValues.size() > 0) return where.orderBy(orderValues).limit(finalLimit); } return where.limit(finalLimit); }
public QueryBuilder createQueryBuilder(SearchVertexQuery query) { PredicatesHolder edgePredicates = this.toPredicates(query.getPredicates()); if(edgePredicates.isAborted()) return null; PredicatesHolder childPredicates = childVertexSchema.toPredicates(query.getVertices()); childPredicates = PredicatesHolderFactory.and(edgePredicates, childPredicates); QueryBuilder childQuery = createNestedQueryBuilder(childPredicates); if(query.getDirection().equals(parentDirection.opposite())) { if (childPredicates.isAborted()) return null; return childQuery; } else if (!query.getDirection().equals(Direction.BOTH)) childQuery = null; PredicatesHolder parentPredicates = parentVertexSchema.toPredicates(query.getVertices()); QueryBuilder parentQuery = createQueryBuilder(parentPredicates); if(parentQuery != null) { // if (parentPredicates.isAborted()) return null; QueryBuilder edgeQuery = createNestedQueryBuilder(edgePredicates); if (edgeQuery != null) { parentQuery = QueryBuilders.boolQuery().must(parentQuery).must(edgeQuery); } } if(query.getDirection().equals(parentDirection) && parentPredicates.notAborted()) return parentQuery; else if(childQuery == null && parentPredicates.notAborted()) return parentQuery; else if(parentQuery == null && childPredicates.notAborted()) return childQuery; else if(parentPredicates.isAborted() && childPredicates.isAborted()) return null; else return QueryBuilders.boolQuery().should(parentQuery).should(childQuery); }