001: /*
002:
003: Derby - Class org.apache.derby.impl.sql.catalog.DropDependencyFilter
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.sql.catalog;
023:
024: import org.apache.derby.iapi.services.sanity.SanityManager;
025:
026: import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
027:
028: import org.apache.derby.iapi.types.DataValueDescriptor;
029:
030: import org.apache.derby.iapi.types.BooleanDataValue;
031:
032: import org.apache.derby.iapi.sql.execute.ExecutionFactory;
033:
034: import org.apache.derby.iapi.services.context.ContextService;
035: import org.apache.derby.iapi.types.DataValueFactory;
036:
037: import org.apache.derby.iapi.services.monitor.Monitor;
038:
039: import org.apache.derby.iapi.sql.execute.TupleFilter;
040: import org.apache.derby.iapi.sql.execute.ExecRow;
041: import org.apache.derby.iapi.error.StandardException;
042:
043: import org.apache.derby.catalog.UUID;
044: import org.apache.derby.iapi.services.uuid.UUIDFactory;
045:
046: /**
047: * A Filter to qualify tuples coming from a scan of SYSDEPENDS.
048: * Tuples qualify if they have the right providerID.
049: *
050: * @author Rick
051: */
052: public class DropDependencyFilter implements TupleFilter {
053: //////////////////////////////////////////////////////////////////////////////////////
054: //
055: // CONSTANTS
056: //
057: //////////////////////////////////////////////////////////////////////////////////////
058:
059: //////////////////////////////////////////////////////////////////////////////////////
060: //
061: // STATE
062: //
063: //////////////////////////////////////////////////////////////////////////////////////
064:
065: UUID providerID;
066:
067: UUIDFactory uuidFactory = null;
068: DataValueFactory dataValueFactory = null;
069:
070: BooleanDataValue trueValue;
071: BooleanDataValue falseValue;
072:
073: //////////////////////////////////////////////////////////////////////////////////////
074: //
075: // CONSTRUCTORS
076: //
077: //////////////////////////////////////////////////////////////////////////////////////
078:
079: /**
080: * Construct a TupleFilter to qualify SYSDEPENDS rows with the
081: * designated providerID.
082: *
083: * @param providerID UUID of provider. Tuples with this ID qualify.
084: */
085: public DropDependencyFilter(UUID providerID) {
086: this .providerID = providerID;
087: }
088:
089: //////////////////////////////////////////////////////////////////////////////////////
090: //
091: // TupleFilter BEHAVIOR
092: //
093: //////////////////////////////////////////////////////////////////////////////////////
094:
095: /**
096: * Initialize a Filter with a vector of parameters. This is a NOP.
097: * We initialize this filter at Constructor time.
098: *
099: * @param parameters An ExecRow of parameter values
100: *
101: * @exception StandardException Thrown on error
102: */
103: public void init(ExecRow parameters) throws StandardException {
104: }
105:
106: /**
107: * Pump a SYSDEPENDS row through the Filter. If the providerID of the
108: * row matches our providerID, we return true. Otherwise we return false.
109: *
110: * @param currentRow SYSDEPENDS row
111: *
112: * @return True if the row has our providerID. False otherwise.
113: *
114: * @exception StandardException Thrown on error
115: */
116: public BooleanDataValue execute(ExecRow currentRow)
117: throws StandardException {
118: /* 3rd column is PROVIDERID (UUID - char(36)) */
119: DataValueDescriptor col = currentRow
120: .getColumn(SYSDEPENDSRowFactory.SYSDEPENDS_PROVIDERID);
121: String providerIDstring = col.getString();
122: UUID providerUUID = getUUIDFactory().recreateUUID(
123: providerIDstring);
124:
125: if (providerID.equals(providerUUID)) {
126: return getTrueValue();
127: } else {
128: return getFalseValue();
129: }
130: }
131:
132: //////////////////////////////////////////////////////////////////////////////////////
133: //
134: // MINIONS
135: //
136: //////////////////////////////////////////////////////////////////////////////////////
137:
138: /**
139: * Get the UUID factory
140: *
141: * @return the UUID factory
142: *
143: * @exception StandardException thrown on failure
144: */
145: private UUIDFactory getUUIDFactory() throws StandardException {
146: if (uuidFactory == null) {
147: uuidFactory = Monitor.getMonitor().getUUIDFactory();
148: }
149: return uuidFactory;
150: }
151:
152: /**
153: * Gets the DataValueFactory for this connection.
154: *
155: * @return the data value factory for this connection
156: */
157: private DataValueFactory getDataValueFactory() {
158: if (dataValueFactory == null) {
159: LanguageConnectionContext lcc = (LanguageConnectionContext) ContextService
160: .getContext(LanguageConnectionContext.CONTEXT_ID);
161:
162: dataValueFactory = lcc.getDataValueFactory();
163: }
164:
165: return dataValueFactory;
166: }
167:
168: /**
169: * Gets a BooleanDataValue representing TRUE.
170: *
171: * @return a TRUE value
172: * @exception StandardException Thrown on error
173: */
174: private BooleanDataValue getTrueValue() throws StandardException {
175: if (trueValue == null) {
176: trueValue = getDataValueFactory().getDataValue(true);
177: }
178:
179: return trueValue;
180: }
181:
182: /**
183: * Gets a BooleanDataValue representing FALSE
184: *
185: * @return a FALSE value
186: * @exception StandardException Thrown on error
187: */
188: private BooleanDataValue getFalseValue() throws StandardException {
189: if (falseValue == null) {
190: falseValue = getDataValueFactory().getDataValue(false);
191: }
192:
193: return falseValue;
194: }
195:
196: }
|