KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > derby > iapi > sql > compile > Visitor


1 /*
2
3    Derby - Class org.apache.derby.iapi.sql.compile.Visitor
4
5    Licensed to the Apache Software Foundation (ASF) under one or more
6    contributor license agreements. See the NOTICE file distributed with
7    this work for additional information regarding copyright ownership.
8    The ASF licenses this file to you under the Apache License, Version 2.0
9    (the "License"); you may not use this file except in compliance with
10    the License. You may obtain a copy of the License at
11
12       http://www.apache.org/licenses/LICENSE-2.0
13
14    Unless required by applicable law or agreed to in writing, software
15    distributed under the License is distributed on an "AS IS" BASIS,
16    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17    See the License for the specific language governing permissions and
18    limitations under the License.
19
20  */

21
22 package org.apache.derby.iapi.sql.compile;
23
24 import org.apache.derby.iapi.error.StandardException;
25
26 /**
27  * A visitor is an object that traverses the querytree
28  * and performs some action.
29  *
30  * @author jamie
31  */

32 public interface Visitor
33 {
34     /**
35      * This is the default visit operation on a
36      * QueryTreeNode. It just returns the node. This
37      * will typically suffice as the default visit
38      * operation for most visitors unless the visitor
39      * needs to count the number of nodes visited or
40      * something like that.
41      * <p>
42      * Visitors will overload this method by implementing
43      * a version with a signature that matches a specific
44      * type of node. For example, if I want to do
45      * something special with aggregate nodes, then
46      * that Visitor will implement a
47      * <I> visit(AggregateNode node)</I>
48      * method which does the aggregate specific processing.
49      *
50      * @param node the node to process
51      *
52      * @return a query tree node. Often times this is
53      * the same node that was passed in, but Visitors that
54      * replace nodes with other nodes will use this to
55      * return the new replacement node.
56      *
57      * @exception StandardException may be throw an error
58      * as needed by the visitor (i.e. may be a normal error
59      * if a particular node is found, e.g. if checking
60      * a group by, we don't expect to find any ColumnReferences
61      * that aren't under an AggregateNode -- the easiest
62      * thing to do is just throw an error when we find the
63      * questionable node).
64      */

65     Visitable visit(Visitable node)
66         throws StandardException;
67
68     /**
69      * Method that is called to see
70      * if query tree traversal should be
71      * stopped before visiting all nodes.
72      * Useful for short circuiting traversal
73      * if we already know we are done.
74      *
75      * @return true/false
76      */

77     boolean stopTraversal();
78
79     /**
80      * Method that is called to indicate whether
81      * we should skip all nodes below this node
82      * for traversal. Useful if we want to effectively
83      * ignore/prune all branches under a particular
84      * node.
85      * <p>
86      * Differs from stopTraversal() in that it
87      * only affects subtrees, rather than the
88      * entire traversal.
89      *
90      * @param node the node to process
91      *
92      * @return true/false
93      */

94     boolean skipChildren(Visitable node) throws StandardException;
95 }
96
Popular Tags