private Predicate[] getPredicates(io.onedev.server.search.entity.EntityCriteria<CodeComment> criteria, Project project, PullRequest request, QueryBuildContext<CodeComment> context, User user) { List<Predicate> predicates = new ArrayList<>(); if (request != null) { Join<?, ?> relations = context.getRoot().join(CodeCommentConstants.ATTR_RELATIONS, JoinType.INNER); relations.on(context.getBuilder().equal(relations.get(CodeCommentRelation.ATTR_REQUEST), request)); } else { predicates.add(context.getBuilder().equal(context.getRoot().get("project"), project)); } if (criteria != null) predicates.add(criteria.getPredicate(project, context, user)); return predicates.toArray(new Predicate[0]); }
private Predicate[] getPredicates(io.onedev.server.search.entity.EntityCriteria<Build> criteria, Project project, QueryBuildContext<Build> context, User user) { List<Predicate> predicates = new ArrayList<>(); Join<?, ?> join = context.getRoot().join(BuildConstants.ATTR_CONFIGURATION, JoinType.INNER); join.on(context.getBuilder().equal(join.get(Configuration.ATTR_PROJECT), project)); if (criteria != null) predicates.add(criteria.getPredicate(project, context, user)); return predicates.toArray(new Predicate[0]); }
protected void generateDesciptionJoin(final HashMap<String, From<?, ?>> joinTables, final Set<JPAPath> pathSet, final From<?, ?> target) { for (final JPAPath descriptionFieldPath : pathSet) { final JPADescriptionAttribute desciptionField = ((JPADescriptionAttribute) descriptionFieldPath.getLeaf()); Join<?, ?> join = createJoinFromPath(descriptionFieldPath.getAlias(), descriptionFieldPath.getPath(), target, JoinType.LEFT); if (desciptionField.isLocationJoin()) join.on(createOnCondition(join, desciptionField, getLocale().toString())); else join.on(createOnCondition(join, desciptionField, getLocale().getLanguage())); joinTables.put(desciptionField.getInternalName(), join); } }
.on(cb.in(from.get(parentIdAttribute.getName())).value(parentIdValue));
join.on(predicate);
private CriteriaQuery<Issue> buildCriteriaQuery(Session session, Project project, EntityQuery<Issue> issueQuery, User user) { CriteriaBuilder builder = session.getCriteriaBuilder(); CriteriaQuery<Issue> query = builder.createQuery(Issue.class); Root<Issue> root = query.from(Issue.class); QueryBuildContext<Issue> context = new IssueQueryBuildContext(root, builder); query.where(getPredicates(issueQuery.getCriteria(), project, context, user)); List<javax.persistence.criteria.Order> orders = new ArrayList<>(); for (EntitySort sort: issueQuery.getSorts()) { if (IssueConstants.ORDER_FIELDS.containsKey(sort.getField())) { if (sort.getDirection() == Direction.ASCENDING) orders.add(builder.asc(IssueQuery.getPath(root, IssueConstants.ORDER_FIELDS.get(sort.getField())))); else orders.add(builder.desc(IssueQuery.getPath(root, IssueConstants.ORDER_FIELDS.get(sort.getField())))); } else { Join<Issue, IssueFieldUnary> join = root.join(IssueConstants.ATTR_FIELD_UNARIES, JoinType.LEFT); join.on(builder.equal(join.get(IssueFieldUnary.FIELD_ATTR_NAME), sort.getField())); if (sort.getDirection() == Direction.ASCENDING) orders.add(builder.asc(join.get(IssueFieldUnary.FIELD_ATTR_ORDINAL))); else orders.add(builder.desc(join.get(IssueFieldUnary.FIELD_ATTR_ORDINAL))); } } if (orders.isEmpty()) orders.add(builder.desc(root.get("number"))); query.orderBy(orders); return query; }
@Override public Join<?, ?> newJoin(String joinName) { switch (joinName) { case IssueConstants.FIELD_COMMENT: return getRoot().join(IssueConstants.ATTR_COMMENTS, JoinType.LEFT); case IssueConstants.FIELD_MILESTONE: return getRoot().join(IssueConstants.ATTR_MILESTONE, JoinType.LEFT); default: Join<Issue, ?> join = getRoot().join(IssueConstants.ATTR_FIELD_UNARIES, JoinType.LEFT); join.on(getBuilder().equal(join.get(IssueFieldUnary.FIELD_ATTR_NAME), joinName)); return join; } }