예제 #1
0
  private void getQLString(
      QBJoinTree joinTree,
      StringBuilder builder,
      CandidateFact fact,
      Map<Dimension, CandidateDim> dimsToQuery)
      throws LensException {
    List<String> joiningTables = new ArrayList<>();
    if (joinTree.getBaseSrc()[0] == null) {
      if (joinTree.getJoinSrc() != null) {
        getQLString(joinTree.getJoinSrc(), builder, fact, dimsToQuery);
      }
    } else { // (joinTree.getBaseSrc()[0] != null){
      String alias = joinTree.getBaseSrc()[0].toLowerCase();
      builder.append(getStorageStringWithAlias(fact, dimsToQuery, alias));
      joiningTables.add(alias);
    }
    if (joinTree.getJoinCond() != null) {
      builder.append(JoinUtils.getJoinTypeStr(joinTree.getJoinCond()[0].getJoinType()));
      builder.append(" JOIN ");
    }
    if (joinTree.getBaseSrc()[1] == null) {
      if (joinTree.getJoinSrc() != null) {
        getQLString(joinTree.getJoinSrc(), builder, fact, dimsToQuery);
      }
    } else { // (joinTree.getBaseSrc()[1] != null){
      String alias = joinTree.getBaseSrc()[1].toLowerCase();
      builder.append(getStorageStringWithAlias(fact, dimsToQuery, alias));
      joiningTables.add(alias);
    }

    String joinCond = joinConds.get(joinTree);
    if (joinCond != null) {
      builder.append(" ON ");
      builder.append(joinCond);
      // joining tables will contain all tables involved in joins.
      // we need to push storage filters for Dimensions into join conditions, thus the following
      // code
      // takes care of the same.
      for (String joiningTable : joiningTables) {
        if (cubeTbls.get(joiningTable) instanceof Dimension) {
          DimOnlyHQLContext.appendWhereClause(
              builder, getWhereClauseWithAlias(dimsToQuery, joiningTable), true);
          dimsToQuery.get(cubeTbls.get(joiningTable)).setWhereClauseAdded(joiningTable);
        }
      }
    } else {
      throw new LensException(LensCubeErrorCode.NO_JOIN_CONDITION_AVAILABLE.getLensErrorInfo());
    }
  }
예제 #2
0
 void printJoinTree(QBJoinTree joinTree, StringBuilder builder) {
   builder.append("leftAlias:" + joinTree.getLeftAlias());
   if (joinTree.getLeftAliases() != null) {
     builder.append("\n leftAliases:");
     for (String alias : joinTree.getLeftAliases()) {
       builder.append("\n\t " + alias);
     }
   }
   if (joinTree.getRightAliases() != null) {
     builder.append("\n rightAliases:");
     for (String alias : joinTree.getRightAliases()) {
       builder.append("\n\t " + alias);
     }
   }
   if (joinTree.getJoinSrc() != null) {
     builder.append("\n JoinSrc: {");
     printJoinTree(joinTree.getJoinSrc(), builder);
     builder.append("\n }");
   }
   if (joinTree.getBaseSrc() != null) {
     builder.append("\n baseSrcs:");
     for (String src : joinTree.getBaseSrc()) {
       builder.append("\n\t " + src);
     }
   }
   builder.append("\n noOuterJoin: " + joinTree.getNoOuterJoin());
   builder.append("\n noSemiJoin: " + joinTree.getNoSemiJoin());
   builder.append("\n mapSideJoin: " + joinTree.isMapSideJoin());
   if (joinTree.getJoinCond() != null) {
     builder.append("\n joinConds:");
     for (JoinCond cond : joinTree.getJoinCond()) {
       builder.append(
           "\n\t left: "
               + cond.getLeft()
               + " right: "
               + cond.getRight()
               + " type:"
               + cond.getJoinType()
               + " preserved:"
               + cond.getPreserved());
     }
   }
 }