001: /*
002:
003: Derby - Class org.apache.derby.impl.sql.catalog.DDColumnDependableFinder
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.catalog.UUID;
025: import org.apache.derby.catalog.Dependable;
026: import org.apache.derby.iapi.sql.dictionary.DataDictionary;
027: import org.apache.derby.iapi.sql.dictionary.TableDescriptor;
028: import org.apache.derby.iapi.error.StandardException;
029:
030: import org.apache.derby.iapi.services.io.FormatableHashtable;
031: import org.apache.derby.iapi.services.io.FormatableBitSet;
032:
033: import java.io.ObjectOutput;
034: import java.io.ObjectInput;
035: import java.io.IOException;
036:
037: /**
038: * Class for implementation of DependableFinder in the core DataDictionary
039: * for referenced columns in a table.
040: *
041: *
042: * @author Tingjian Ge
043: */
044:
045: public class DDColumnDependableFinder extends DDdependableFinder {
046: ////////////////////////////////////////////////////////////////////////
047: //
048: // STATE
049: //
050: ////////////////////////////////////////////////////////////////////////
051:
052: // write least amount of data to disk, just the byte array, not even
053: // a FormatableBitSet
054: private byte[] columnBitMap;
055:
056: ////////////////////////////////////////////////////////////////////////
057: //
058: // CONSTRUCTORS
059: //
060: ////////////////////////////////////////////////////////////////////////
061:
062: /**
063: * Constructor same as in parent.
064: */
065: public DDColumnDependableFinder(int formatId) {
066: super (formatId);
067: }
068:
069: /**
070: * Constructor given referenced column bit map byte array as in FormatableBitSet
071: */
072: public DDColumnDependableFinder(int formatId, byte[] columnBitMap) {
073: super (formatId);
074: this .columnBitMap = columnBitMap;
075: }
076:
077: ////////////////////////////////////////////////////////////////////////
078: //
079: // DDColumnDependable METHODS
080: //
081: ////////////////////////////////////////////////////////////////////////
082:
083: /**
084: * Get the byte array encoding the bitmap of referenced columns in
085: * a table.
086: *
087: * @return byte array as in a FormatableBitSet encoding column bit map
088: */
089: public byte[] getColumnBitMap() {
090: return columnBitMap;
091: }
092:
093: /**
094: * Set the byte array encoding the bitmap of referenced columns in
095: * a table.
096: *
097: * @param columnBitMap byte array as in a FormatableBitSet encoding column bit map
098: */
099: public void setColumnBitMap(byte[] columnBitMap) {
100: this .columnBitMap = columnBitMap;
101: }
102:
103: /**
104: * Get a dependable object, which is essentially a table descriptor with
105: * referencedColumnMap field set.
106: *
107: * @param dd data dictionary
108: * @param dependableObjectID dependable object ID (table UUID)
109: * @return a dependable, a table descriptor with referencedColumnMap
110: * field set
111: */
112: protected Dependable getDependable(DataDictionary dd,
113: UUID dependableObjectID) throws StandardException {
114: TableDescriptor td = dd.getTableDescriptor(dependableObjectID);
115: if (td != null) // see beetle 4444
116: td
117: .setReferencedColumnMap(new FormatableBitSet(
118: columnBitMap));
119: return td;
120: }
121:
122: //////////////////////////////////////////////////////////////////
123: //
124: // FORMATABLE METHODS
125: //
126: //////////////////////////////////////////////////////////////////
127:
128: /**
129: * Read this object from a stream of stored objects. Just read the
130: * byte array, besides what the parent does.
131: *
132: * @param in read this.
133: */
134: public void readExternal(ObjectInput in) throws IOException,
135: ClassNotFoundException {
136: super .readExternal(in);
137: FormatableHashtable fh = (FormatableHashtable) in.readObject();
138: columnBitMap = (byte[]) fh.get("columnBitMap");
139: }
140:
141: /**
142: * Write this object to a stream of stored objects. Just write the
143: * byte array, besides what the parent does.
144: *
145: * @param out write bytes here.
146: */
147: public void writeExternal(ObjectOutput out) throws IOException {
148: super .writeExternal(out);
149: FormatableHashtable fh = new FormatableHashtable();
150: fh.put("columnBitMap", columnBitMap);
151: out.writeObject(fh);
152: }
153: }
|