コード例 #1
0
  public String getFilterWhereClause(VDimension dimension) {

    String tableName = dimension.getTableName();

    // StringBuffer from = new StringBuffer("FROM " + tableName + " AS " + tableName);
    StringBuffer where = new StringBuffer();

    VDimension oldDimension = dimension;

    boolean filtered = true;
    while (dimension.isDependent() && filtered) {

      dimension = (VDimension) dimension.getParent();

      boolean appended = false;

      for (Filterable filter : dimension.getSelections()) {

        Long selection = (Long) filter.getId();

        appended = true;
        filtered = false;

        if (where.length() > 0) {
          where.append(" OR ");
        } else {
          where.append("(");
        }

        if (oldDimension.isVisible()) {
          where.append(tableName).append(".parent = ").append(selection);
        } else {
          where
              .append(tableName)
              .append(".")
              .append(dimension.getForeignKey())
              .append(" = ")
              .append(selection);
        }
      }

      if (appended) {
        where.append(")");
      }
    }

    if (where.length() > 0) {
      where.insert(0, " AND ");
    }

    // return from.toString() + where.toString();
    return where.toString();
  }
コード例 #2
0
    /**
     * @param dimension
     * @param blueprint
     * @return
     */
    public String createChartQuery(VDimension dimension, VDimension blueprint) {

      String cubeName = cube.getTableName();

      String bluepName = blueprint.getTableName();
      String tableName = dimension.getTableName();

      if (history.size() <= 1) {

        if (!dimension.equals(blueprint)) {
          from.append(cubeName).append(", ").append(tableName).append(", ").append(bluepName);
          where
              .append(tableName)
              .append(".id = ")
              .append(bluepName)
              .append(".")
              .append(dimension.getForeignKey())
              .append(" AND ")
              .append(bluepName)
              .append(".id = ")
              .append(cubeName)
              .append(".")
              .append(blueprint.getForeignKey());

          String filter = getFilterWhereClause(blueprint);
          if (filter.length() > 0) {
            where.append(" ").append(filter);
          }
        } else {
          from.append(cubeName).append(", ").append(tableName);
          where
              .append(tableName)
              .append(".id = ")
              .append(cubeName)
              .append(".")
              .append(dimension.getForeignKey());

          if (blueprint.getSelections() != null && blueprint.getSelections().size() > 0) {
            where.append(" AND (");

            int size = blueprint.getSelections().size();
            for (Filterable filter : blueprint.getSelections()) {
              where
                  .append(cubeName)
                  .append(".")
                  .append(blueprint.getForeignKey())
                  .append(" = ")
                  .append(filter.getId());

              if (size > 1) {
                where.append(" OR ");
                size--;
              }
            }
            where.append(")");
          }
        }
      } else {
        if (!dimension.equals(blueprint)) {

          StringTokenizer tokenizer = new StringTokenizer(from.toString(), " ");

          boolean containsBluep = false;
          boolean containsTable = false;
          while (tokenizer.hasMoreTokens()) {
            String table = tokenizer.nextToken().replace(",", "").trim();

            if (table.equals(bluepName)) {
              containsBluep = true;
            }

            if (table.equals(tableName)) {
              containsTable = true;
            }
          }

          if (!containsBluep) {
            from.append(", ").append(bluepName);
          }
          if (!containsTable) {
            from.append(", ").append(tableName);
          }

          where
              .append(" AND ")
              .append(tableName)
              .append(".id = ")
              .append(bluepName)
              .append(".")
              .append(dimension.getForeignKey())
              .append(" AND ")
              .append(bluepName)
              .append(".id = ")
              .append(cubeName)
              .append(".")
              .append(blueprint.getForeignKey());

          String filter = getFilterWhereClause(blueprint);
          if (filter.length() > 0) {
            where.append(" ").append(filter);
          }
        } else {
          if (from.indexOf(tableName) == -1) {
            from.append(", ").append(tableName);
          }

          where
              .append(" AND ")
              .append(tableName)
              .append(".id = ")
              .append(cubeName)
              .append(".")
              .append(dimension.getForeignKey());

          if (blueprint.getSelections() != null && blueprint.getSelections().size() > 0) {
            where.append(" AND (");

            int size = blueprint.getSelections().size();
            for (Filterable filter : blueprint.getSelections()) {
              where
                  .append(cubeName)
                  .append(".")
                  .append(blueprint.getForeignKey())
                  .append(" = ")
                  .append(filter.getId());

              if (size > 1) {
                where.append(" OR ");
                size--;
              }
            }
            where.append(")");
          }
        }
        group.append(", ");
        order.append(", ");
      }

      group.append(tableName).append(".id").append(", ").append(tableName).append(".name");
      order.append(tableName).append(".id").append(", ").append(tableName).append(".name");

      if (concatenation.length() > 0) {
        concatenation.append(" || '_' || ");
      }

      if (lastTableName != null && !"".equals(lastTableName)) {
        concatenation.append(lastTableName).append(".name");
      }

      lastTableName = tableName;

      select.append(", ").append(tableName).append(".name");

      sql.append(select);

      if (concatenation.length() > 0) {
        sql.append(", ").append(concatenation);
      }

      sql.append(from).append(where).append(group).append(order);

      if (LOG.isDebugEnabled()) {
        LOG.debug(sql.toString());
      }
      itemCountSQL = createItemCountSQL(dimension);
      return sql.toString();
    }