selections.add(toExpressionRecursively(root, path, true).alias(property));
private Expression<?> buildExpression(Root<?> root, CriteriaBuilder criteriaBuilder, String name, String alias) { Expression<?> expr = parseExpr(root, criteriaBuilder, name, null); if (alias != null) { expr.alias(alias); } return expr; }
@Override public List<Selection<?>> toSelect(Map<Expression<?>, String> paths, Root<T> root, CriteriaBuilder cb) { List<Selection<?>> selection = new ArrayList<>(); selection.addAll(paths.entrySet().stream().map(en -> en.getKey().alias(en.getValue())).collect(Collectors.toList())); selection.addAll(getAggregations(paths, root, cb)); return selection; }
@Override protected List<Selection<?>> getAggregations(Map<Expression<?>, String> paths, Root<CocosUser> root, CriteriaBuilder cb) { Function<Expression<Number>, Expression<Number>> getInMb = x -> cb.quot(x, 1024 * 1024l); Function<Expression<Number>, Expression<Number>> sum = x -> cb.sum(x); final Expression<Number> filesystemQuota = cb.sum(createPath("filesystemQuota", root, false)); final Expression<Number> usedQuota = createAggregableSubQuery(paths, cb, Number.class, CocosUserFileQuery.class, getInMb.andThen(sum), "fileSize").getSelection(); return Arrays.asList( filesystemQuota.alias("filesystemQuota"), usedQuota.alias("usedQuota"), cb.quot(cb.prod(usedQuota, 100), filesystemQuota).alias("percentageQuotaUse"), cb.diff(filesystemQuota, usedQuota).alias("remainingQuota"), createAggregableSubQuery(paths, cb, Long.class, CocosUserCreateTableQuery.class, cb::count, "id").getSelection().alias("tables") ); }
@Override protected List<Selection<?>> getAggregations(Map<Expression<?>, String> paths, Root<CocosUserAuditEntryBase> root, CriteriaBuilder cb) { return Arrays.asList( cb.count(cb.selectCase().when(cb.equal(root.type(), CocosUserLoginAuditEntry.class), 1).otherwise(cb.nullLiteral(Long.class))).alias("login"), cb.count(cb.selectCase().when(cb.equal(root.type(), CocosUserHttpAuditEntry.class), 1).otherwise(cb.nullLiteral(Long.class))).alias("http")); }
private Map<String, Long> count() throws ODataApplicationException { final int handle = debugger.startRuntimeMeasurement(this, "count"); final List<UriResource> uriResourceParts = uriResource.getUriResourceParts(); if (uriResource.getCountOption() != null || uriResourceParts != null && !uriResourceParts.isEmpty() && uriResourceParts.get(uriResourceParts.size() - 1) instanceof UriResourceCount) { // SELECT "BusinessPartnerID", count(*) // FROM findings_test."sap.hc.studyproxy::Config.ReferenceRanges" // WHERE "BusinessPartnerID" // GROUP BY "BusinessPartnerID" final CriteriaQuery<Tuple> countQuery = cb.createTupleQuery(); final List<Selection<?>> selectionPath = buildExpandJoinPath(); Expression<Long> count = cb.count(target); count.alias("$count"); selectionPath.add(count); countQuery.multiselect(selectionPath); final javax.persistence.criteria.Expression<Boolean> whereClause = createWhere(); if (whereClause != null) cq.where(whereClause); countQuery.groupBy(buildExpandCountGroupBy()); final TypedQuery<Tuple> query = em.createQuery(countQuery); List<Tuple> intermediateResult = query.getResultList(); return convertCountResult(intermediateResult); } debugger.stopRuntimeMeasurement(handle); return null; }
selections.add(toExpressionRecursively(root, path, true).alias(property));