KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2
3    Derby - Class org.apache.derby.impl.sql.compile.QuantifiedBinaryOperatorNode
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 QuantifiedBinaryOperatorNode represents a binary quantified predicate
36  * that is used with a subquery, such as IN, NOT IN, < ALL, etc. 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 IN node may be converted to a type of join.
41  *
42  * @author Jeff Lichtman
43  */

44
45 public class QuantifiedBinaryOperatorNode extends BinaryOperatorNode
46 {
47     int operator;
48
49     public final static int IN = 1;
50     public final static int NOT_IN = 2;
51     public final static int EQ_ANY = 3;
52     public final static int EQ_ALL = 4;
53     public final static int NE_ANY = 5;
54     public final static int NE_ALL = 6;
55     public final static int GT_ANY = 7;
56     public final static int GT_ALL = 8;
57     public final static int GE_ANY = 9;
58     public final static int GE_ALL = 10;
59     public final static int LT_ANY = 11;
60     public final static int LT_ALL = 12;
61     public final static int LE_ANY = 13;
62     public final static int LE_ALL = 14;
63
64     ValueNode leftOperand;
65     SubqueryNode rightOperand;
66
67     /**
68      * Prints the sub-nodes of this object. See QueryTreeNode.java for
69      * how tree printing is supposed to work.
70      *
71      * @param depth The depth of this node in the tree
72      */

73
74     public void printSubNodes(int depth)
75     {
76         if (SanityManager.DEBUG)
77         {
78             super.printSubNodes(depth);
79
80             if (leftOperand != null)
81             {
82                 printLabel(depth, "leftOperand: ");
83                 leftOperand.treePrint(depth + 1);
84             }
85
86             if (rightOperand != null)
87             {
88                 printLabel(depth, "rightOperand: ");
89                 rightOperand.treePrint(depth + 1);
90             }
91         }
92     }
93
94     /**
95      * Bind this expression. This means binding the sub-expressions,
96      * as well as figuring out what the return type is for this expression.
97      *
98      * @param fromList The FROM list for the query this
99      * expression is in, for binding columns.
100      * @param subqueryList The subquery list being built as we find SubqueryNodes
101      * @param aggregateVector The aggregate vector being built as we find AggregateNodes
102      *
103      * @return The new top of the expression tree.
104      *
105      * @exception StandardException Thrown on error
106      */

107
108     public ValueNode bindExpression(
109         FromList fromList, SubqueryList subqueryList,
110         Vector JavaDoc aggregateVector)
111             throws StandardException
112     {
113         leftOperand = leftOperand.bindExpression(fromList, subqueryList,
114                                     aggregateVector);
115         rightOperand = (SubqueryNode) rightOperand.bindExpression(fromList, subqueryList,
116                                     aggregateVector);
117
118         /* RESOLVE: Need to bind this node */
119         /* RESOLVE - set the subqueryOperator in the SubqueryNode */
120
121         return this;
122     }
123 }
124
Popular Tags