コード例 #1
0
  private static void analyzeRelationalOpNode(ExprRelationalOpNode relNode, QueryGraph queryGraph) {
    if (((relNode.getChildNodes()[0] instanceof ExprIdentNode))
        && ((relNode.getChildNodes()[1] instanceof ExprIdentNode))) {
      ExprIdentNode identNodeLeft = (ExprIdentNode) relNode.getChildNodes()[0];
      ExprIdentNode identNodeRight = (ExprIdentNode) relNode.getChildNodes()[1];

      if (identNodeLeft.getStreamId() != identNodeRight.getStreamId()) {
        queryGraph.addRelationalOpStrict(
            identNodeLeft.getStreamId(),
            identNodeLeft.getResolvedPropertyName(),
            identNodeLeft,
            identNodeRight.getStreamId(),
            identNodeRight.getResolvedPropertyName(),
            identNodeRight,
            relNode.getRelationalOpEnum());
      }
      return;
    }

    int indexedStream = -1;
    String indexedProp = null;
    ExprNode exprNodeNoIdent = null;
    RelationalOpEnum relop = relNode.getRelationalOpEnum();

    if (relNode.getChildNodes()[0] instanceof ExprIdentNode) {
      ExprIdentNode identNode = (ExprIdentNode) relNode.getChildNodes()[0];
      indexedStream = identNode.getStreamId();
      indexedProp = identNode.getResolvedPropertyName();
      exprNodeNoIdent = relNode.getChildNodes()[1];
    } else if (relNode.getChildNodes()[1] instanceof ExprIdentNode) {
      ExprIdentNode identNode = (ExprIdentNode) relNode.getChildNodes()[1];
      indexedStream = identNode.getStreamId();
      indexedProp = identNode.getResolvedPropertyName();
      exprNodeNoIdent = relNode.getChildNodes()[0];
      relop = relop.reversed();
    }
    if (indexedStream == -1) {
      return; // require property of right/left side of equals
    }

    EligibilityDesc eligibility = EligibilityUtil.verifyInputStream(exprNodeNoIdent, indexedStream);
    if (!eligibility.getEligibility().isEligible()) {
      return;
    }

    queryGraph.addRelationalOp(
        indexedStream, indexedProp, eligibility.getStreamNum(), exprNodeNoIdent, relop);
  }