PageRenderTime 31ms CodeModel.GetById 12ms app.highlight 2ms RepoModel.GetById 1ms app.codeStats 15ms

/tags/release-0.0.0-rc0/hive/external/ql/src/java/org/apache/hadoop/hive/ql/lib/PreOrderWalker.java

#
Java | 65 lines | 18 code | 8 blank | 39 comment | 3 complexity | 61e55d39d56bb331386f1a9a56af7c9a MD5 | raw file
 1/**
 2 * Licensed to the Apache Software Foundation (ASF) under one
 3 * or more contributor license agreements.  See the NOTICE file
 4 * distributed with this work for additional information
 5 * regarding copyright ownership.  The ASF licenses this file
 6 * to you under the Apache License, Version 2.0 (the
 7 * "License"); you may not use this file except in compliance
 8 * with the License.  You may obtain a copy of the License at
 9 *
10 *     http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19package org.apache.hadoop.hive.ql.lib;
20
21import org.apache.hadoop.hive.ql.parse.SemanticException;
22
23/**
24 * base class for operator graph walker this class takes list of starting ops
25 * and walks them one by one.
26 */
27public class PreOrderWalker extends DefaultGraphWalker {
28
29  /*
30   * Since the operator tree is a DAG, nodes with mutliple parents will be
31   * visited more than once. This can be made configurable.
32   */
33
34  /**
35   * Constructor.
36   * 
37   * @param disp
38   *          dispatcher to call for each op encountered
39   */
40  public PreOrderWalker(Dispatcher disp) {
41    super(disp);
42  }
43
44  /**
45   * Walk the current operator and its descendants.
46   * 
47   * @param nd
48   *          current operator in the graph
49   * @throws SemanticException
50   */
51  @Override
52  public void walk(Node nd) throws SemanticException {
53    opStack.push(nd);
54    dispatch(nd, opStack);
55
56    // move all the children to the front of queue
57    if (nd.getChildren() != null) {
58      for (Node n : nd.getChildren()) {
59        walk(n);
60      }
61    }
62
63    opStack.pop();
64  }
65}