KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > db > sql > NotExpr


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  * Free SoftwareFoundation, Inc.
23  * 59 Temple Place, Suite 330
24  * Boston, MA 02111-1307 USA
25  *
26  * @author Scott Ferguson
27  */

28
29 package com.caucho.db.sql;
30
31 import com.caucho.log.Log;
32
33 import java.sql.SQLException JavaDoc;
34 import java.util.ArrayList JavaDoc;
35 import java.util.logging.Logger JavaDoc;
36
37 class NotExpr extends Expr {
38   private static final Logger JavaDoc log = Log.open(NotExpr.class);
39
40   private Expr _sub;
41
42   NotExpr(Expr sub)
43   {
44     _sub = sub;
45   }
46
47   /**
48    * Binds the expression to the actual tables.
49    */

50   protected Expr bind(Query query)
51     throws SQLException JavaDoc
52   {
53     _sub = _sub.bind(query);
54
55     if (! _sub.isBoolean())
56       throw new SQLException JavaDoc(L.l("NOT requires a boolean expression"));
57
58     return this;
59   }
60
61   /**
62    * Returns the type of the expression.
63    */

64   public Class JavaDoc getType()
65   {
66     return boolean.class;
67   }
68
69   /**
70    * Returns the cost based on the given FromList.
71    */

72   public long subCost(ArrayList JavaDoc<FromItem> fromList)
73   {
74     return _sub.subCost(fromList);
75   }
76
77   /**
78    * Evaluates the expression for nulls
79    */

80   public boolean isNull(QueryContext context)
81     throws SQLException JavaDoc
82   {
83     return _sub.isNull(context);
84   }
85
86   /**
87    * Evaluates the expression as a boolean
88    *
89    * @param rows the current tuple being evaluated
90    *
91    * @return the boolean value
92    */

93   public int evalBoolean(QueryContext context)
94     throws SQLException JavaDoc
95   {
96     int value = _sub.evalBoolean(context);
97
98     switch (value) {
99     case TRUE:
100       return FALSE;
101     case FALSE:
102       return TRUE;
103     default:
104       return UNKNOWN;
105     }
106   }
107
108   /**
109    * Evaluates the expression as a string.
110    *
111    * @param rows the current tuple being evaluated
112    *
113    * @return the string value
114    */

115   public String JavaDoc evalString(QueryContext context)
116     throws SQLException JavaDoc
117   {
118     int value = _sub.evalBoolean(context);
119
120     switch (value) {
121     case TRUE:
122       return "1";
123     case FALSE:
124       return "0";
125     default:
126       return null;
127     }
128   }
129
130   /**
131    * Evaluates aggregate functions during the group phase.
132    *
133    * @param state the current database tuple
134    */

135   public void evalGroup(QueryContext context)
136     throws SQLException JavaDoc
137   {
138     _sub.evalGroup(context);
139   }
140
141   public String JavaDoc toString()
142   {
143     return "NOT " + _sub;
144   }
145 }
146
Popular Tags