Example #1
0
  /**
   * Executes a paginated request with 2 native queries (one to count the number of results, and one
   * to return the page).
   *
   * @param paginatedList Paginated list object containing parameters, and into which results are
   *     added by side effects
   * @param queryParam Query parameters
   * @param sortCriteria Sort criteria
   * @return List of results
   */
  public static <E> List<Object[]> executePaginatedQuery(
      PaginatedList<E> paginatedList, QueryParam queryParam, SortCriteria sortCriteria) {
    StringBuilder sb = new StringBuilder(queryParam.getQueryString());
    sb.append(" order by c");
    sb.append(sortCriteria.getColumn());
    sb.append(sortCriteria.isAsc() ? " asc" : " desc");

    QueryParam sortedQueryParam = new QueryParam(sb.toString(), queryParam.getParameterMap());

    executeCountQuery(paginatedList, sortedQueryParam);
    return executeResultQuery(paginatedList, sortedQueryParam);
  }
  @Override
  public <T extends Query> String visit(BaseQueryBuilder<T> baseQueryBuilder) {
    StringBuilder sb = new StringBuilder();

    if (baseQueryBuilder.getProjection() != null && baseQueryBuilder.getProjection().length != 0) {
      sb.append("SELECT ");
      boolean isFirst = true;
      for (String projection : baseQueryBuilder.getProjection()) {
        if (isFirst) {
          isFirst = false;
        } else {
          sb.append(", ");
        }
        sb.append(alias).append('.').append(projection);
      }
      sb.append(' ');
    }

    sb.append("FROM ")
        .append(renderEntityName(baseQueryBuilder.getRootTypeName()))
        .append(' ')
        .append(alias);

    if (baseQueryBuilder.getFilterCondition() != null) {
      BaseCondition baseCondition = baseQueryBuilder.getFilterCondition().getRoot();
      String whereCondition = baseCondition.accept(this);
      if (!whereCondition.isEmpty()) {
        sb.append(" WHERE ").append(whereCondition);
      }
    }

    if (baseQueryBuilder.getSortCriteria() != null
        && !baseQueryBuilder.getSortCriteria().isEmpty()) {
      sb.append(" ORDER BY ");
      boolean isFirst = true;
      for (SortCriteria sortCriteria : baseQueryBuilder.getSortCriteria()) {
        if (isFirst) {
          isFirst = false;
        } else {
          sb.append(", ");
        }
        sb.append(alias)
            .append('.')
            .append(sortCriteria.getAttributePath())
            .append(' ')
            .append(sortCriteria.getSortOrder().name());
      }
    }

    return sb.toString();
  }