示例#1
0
  private void parseHierachical(OracleSelectQueryBlock queryBlock) {
    OracleSelectHierachicalQueryClause hierachical = null;

    if (lexer.token() == Token.CONNECT) {
      hierachical = new OracleSelectHierachicalQueryClause();
      lexer.nextToken();
      accept(Token.BY);

      if (lexer.token() == Token.PRIOR) {
        lexer.nextToken();
        hierachical.setPrior(true);
      }

      if (identifierEquals("NOCYCLE")) {
        hierachical.setNoCycle(true);
      }
      hierachical.setConnectBy(this.createExprParser().expr());
    }

    if (lexer.token() == Token.START) {
      lexer.nextToken();
      if (hierachical == null) {
        hierachical = new OracleSelectHierachicalQueryClause();
      }
      accept(Token.WITH);

      hierachical.setStartWith(this.createExprParser().expr());
    }

    if (lexer.token() == Token.CONNECT) {
      if (hierachical == null) {
        hierachical = new OracleSelectHierachicalQueryClause();
      }

      lexer.nextToken();
      accept(Token.BY);

      if (lexer.token() == Token.PRIOR) {
        lexer.nextToken();
        hierachical.setPrior(true);
      }

      if (identifierEquals("NOCYCLE")) {
        hierachical.setNoCycle(true);
      }
      hierachical.setConnectBy(this.createExprParser().expr());
    }

    if (hierachical != null) {
      queryBlock.setHierachicalQueryClause(hierachical);
    }
  }