KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > derby > impl > sql > compile > QuantifiedUnaryOperatorNode


1 /*
2
3    Derby - Class org.apache.derby.impl.sql.compile.QuantifiedUnaryOperatorNode
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.impl.sql.compile;
23
24 import org.apache.derby.iapi.sql.dictionary.DataDictionary;
25
26 import org.apache.derby.iapi.error.StandardException;
27
28 import org.apache.derby.iapi.services.sanity.SanityManager;
29
30 import org.apache.derby.iapi.util.JBitSet;
31
32 import java.util.Vector JavaDoc;
33
34 /**
35  * A QuantifiedUnaryOperatorNode represents a unary quantified predicate
36  * that is used with a subquery, such as EXISTS and NOT EXISTS. Quantified
37  * predicates all return Boolean values. All quantified operators will be
38  * removed from the tree by the time we get to code generation - they will
39  * be replaced by other constructs that can be compiled. For example,
40  * an EXISTS node may be converted to a type of join.
41  *
42  * @author Jeff Lichtman
43  */

44
45 public class QuantifiedUnaryOperatorNode extends UnaryOperatorNode
46 {
47     /*
48     ** For NOT EXISTS (SELECT * ...), the parser will generate a NOT
49     ** node and an EXISTS node. Later, normalization will change this
50     ** to a NOT_EXISTS node.
51     */

52     public final static int EXISTS = 1;
53     public final static int NOT_EXISTS = 2;
54
55     SubqueryNode operand;
56
57     /**
58      * Prints the sub-nodes of this object. See QueryTreeNode.java for
59      * how tree printing is supposed to work.
60      *
61      * @param depth The depth of this node in the tree
62      */

63
64     public void printSubNodes(int depth)
65     {
66         if (SanityManager.DEBUG)
67         {
68             super.printSubNodes(depth);
69             if (operand != null)
70             {
71                 printLabel(depth, "operand: ");
72                 operand.treePrint(depth + 1);
73             }
74         }
75     }
76
77     /**
78      * Bind this expression. This means binding the sub-expressions,
79      * as well as figuring out what the return type is for this expression.
80      *
81      * @param fromList The FROM list for the query this
82      * expression is in, for binding columns.
83      * @param subqueryList The subquery list being built as we find SubqueryNodes
84      * @param aggregateVector The aggregate vector being built as we find AggregateNodes
85      *
86      * @return The new top of the expression tree.
87      *
88      * @exception StandardException Thrown on error
89      */

90
91     public ValueNode bindExpression(FromList fromList, SubqueryList subqueryList,
92                     Vector JavaDoc aggregateVector)
93                 throws StandardException
94     {
95         operand.bind();
96
97         /* RESOLVE: Need to bind this node */
98         /* RESOLVE: Need to set the subqueryOperator in the SubqueryNode */
99
100         return this;
101     }
102 }
103
Popular Tags