001: /*
002:
003: Derby - Class org.apache.derby.impl.sql.catalog.SYSCHECKSRowFactory
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.types.DataValueDescriptor;
025:
026: import org.apache.derby.iapi.types.DataValueFactory;
027:
028: import org.apache.derby.iapi.types.TypeId;
029: import org.apache.derby.iapi.types.RowLocation;
030:
031: import org.apache.derby.iapi.types.DataTypeDescriptor;
032:
033: import org.apache.derby.iapi.sql.dictionary.SystemColumn;
034: import org.apache.derby.iapi.sql.dictionary.CatalogRowFactory;
035: import org.apache.derby.iapi.sql.dictionary.ConglomerateDescriptor;
036: import org.apache.derby.iapi.sql.dictionary.DataDescriptorGenerator;
037: import org.apache.derby.iapi.sql.dictionary.DataDictionary;
038: import org.apache.derby.iapi.sql.dictionary.DataDictionaryContext;
039: import org.apache.derby.iapi.sql.dictionary.SubCheckConstraintDescriptor;
040: import org.apache.derby.iapi.sql.dictionary.CheckConstraintDescriptor;
041: import org.apache.derby.iapi.sql.dictionary.TupleDescriptor;
042: import org.apache.derby.iapi.sql.dictionary.ViewDescriptor;
043:
044: import org.apache.derby.iapi.sql.execute.ExecutionContext;
045: import org.apache.derby.iapi.sql.execute.ExecIndexRow;
046: import org.apache.derby.iapi.sql.execute.ExecRow;
047: import org.apache.derby.iapi.sql.execute.ExecutionFactory;
048:
049: import org.apache.derby.iapi.error.StandardException;
050:
051: import org.apache.derby.iapi.services.sanity.SanityManager;
052:
053: import org.apache.derby.catalog.ReferencedColumns;
054: import org.apache.derby.catalog.TypeDescriptor;
055: import org.apache.derby.iapi.services.uuid.UUIDFactory;
056: import org.apache.derby.catalog.UUID;
057:
058: import java.sql.Types;
059: import java.util.Properties;
060:
061: /**
062: * Factory for creating a SYSCHECKS row.
063: *
064: * @author jerry
065: */
066:
067: class SYSCHECKSRowFactory extends CatalogRowFactory {
068: private static final String TABLENAME_STRING = "SYSCHECKS";
069:
070: private static final int SYSCHECKS_COLUMN_COUNT = 3;
071: private static final int SYSCHECKS_CONSTRAINTID = 1;
072: private static final int SYSCHECKS_CHECKDEFINITION = 2;
073: private static final int SYSCHECKS_REFERENCEDCOLUMNS = 3;
074:
075: static final int SYSCHECKS_INDEX1_ID = 0;
076:
077: // index is unique.
078: private static final boolean[] uniqueness = null;
079:
080: private static final int[][] indexColumnPositions = { { SYSCHECKS_CONSTRAINTID } };
081:
082: private static final String[] uuids = {
083: "80000056-00d0-fd77-3ed8-000a0a0b1900" // catalog UUID
084: , "80000059-00d0-fd77-3ed8-000a0a0b1900" // heap UUID
085: , "80000058-00d0-fd77-3ed8-000a0a0b1900" // SYSCHECKS_INDEX1 UUID
086: };
087:
088: /////////////////////////////////////////////////////////////////////////////
089: //
090: // CONSTRUCTORS
091: //
092: /////////////////////////////////////////////////////////////////////////////
093:
094: SYSCHECKSRowFactory(UUIDFactory uuidf, ExecutionFactory ef,
095: DataValueFactory dvf, boolean convertIdToLower) {
096: super (uuidf, ef, dvf, convertIdToLower);
097: initInfo(SYSCHECKS_COLUMN_COUNT, TABLENAME_STRING,
098: indexColumnPositions, uniqueness, uuids);
099: }
100:
101: /////////////////////////////////////////////////////////////////////////////
102: //
103: // METHODS
104: //
105: /////////////////////////////////////////////////////////////////////////////
106:
107: /**
108: * Make a SYSCHECKS row
109: *
110: * @param td CheckConstraintDescriptorImpl
111: *
112: * @return Row suitable for inserting into SYSCHECKS.
113: *
114: * @exception StandardException thrown on failure
115: */
116: public ExecRow makeRow(TupleDescriptor td, TupleDescriptor parent)
117: throws StandardException {
118: DataValueDescriptor col;
119: ExecIndexRow row;
120: ReferencedColumns rcd = null;
121: String checkDefinition = null;
122: String constraintID = null;
123:
124: if (td != null) {
125: CheckConstraintDescriptor cd = (CheckConstraintDescriptor) td;
126: /*
127: ** We only allocate a new UUID if the descriptor doesn't already have one.
128: ** For descriptors replicated from a Source system, we already have an UUID.
129: */
130: constraintID = cd.getUUID().toString();
131:
132: checkDefinition = cd.getConstraintText();
133:
134: rcd = cd.getReferencedColumnsDescriptor();
135: }
136:
137: /* Build the row */
138: row = getExecutionFactory().getIndexableRow(
139: SYSCHECKS_COLUMN_COUNT);
140:
141: /* 1st column is CONSTRAINTID (UUID - char(36)) */
142: row.setColumn(SYSCHECKS_CONSTRAINTID, dvf
143: .getCharDataValue(constraintID));
144:
145: /* 2nd column is CHECKDEFINITION */
146: row.setColumn(SYSCHECKS_CHECKDEFINITION, dvf
147: .getLongvarcharDataValue(checkDefinition));
148:
149: /* 3rd column is REFERENCEDCOLUMNS
150: * (user type org.apache.derby.catalog.ReferencedColumns)
151: */
152: row.setColumn(SYSCHECKS_REFERENCEDCOLUMNS, dvf
153: .getDataValue(rcd));
154:
155: return row;
156: }
157:
158: ///////////////////////////////////////////////////////////////////////////
159: //
160: // ABSTRACT METHODS TO BE IMPLEMENTED BY CHILDREN OF CatalogRowFactory
161: //
162: ///////////////////////////////////////////////////////////////////////////
163:
164: /**
165: * Make a ViewDescriptor out of a SYSCHECKS row
166: *
167: * @param row a SYSCHECKS row
168: * @param parentTupleDescriptor Null for this kind of descriptor.
169: * @param dd dataDictionary
170: *
171: * @exception StandardException thrown on failure
172: */
173: public TupleDescriptor buildDescriptor(ExecRow row,
174: TupleDescriptor parentTupleDescriptor, DataDictionary dd)
175: throws StandardException {
176: SubCheckConstraintDescriptor checkDesc = null;
177:
178: if (SanityManager.DEBUG) {
179: SanityManager.ASSERT(
180: row.nColumns() == SYSCHECKS_COLUMN_COUNT,
181: "Wrong number of columns for a SYSCHECKS row");
182: }
183:
184: DataValueDescriptor col;
185: DataDescriptorGenerator ddg;
186: ReferencedColumns referencedColumns;
187: String constraintText;
188: String constraintUUIDString;
189: UUID constraintUUID;
190:
191: ddg = dd.getDataDescriptorGenerator();
192:
193: /* 1st column is CONSTRAINTID (UUID - char(36)) */
194: col = row.getColumn(SYSCHECKS_CONSTRAINTID);
195: constraintUUIDString = col.getString();
196: constraintUUID = getUUIDFactory().recreateUUID(
197: constraintUUIDString);
198:
199: /* 2nd column is CHECKDEFINITION */
200: col = row.getColumn(SYSCHECKS_CHECKDEFINITION);
201: constraintText = col.getString();
202:
203: /* 3rd column is REFERENCEDCOLUMNS */
204: col = row.getColumn(SYSCHECKS_REFERENCEDCOLUMNS);
205: referencedColumns = (ReferencedColumns) col.getObject();
206:
207: /* now build and return the descriptor */
208:
209: checkDesc = new SubCheckConstraintDescriptor(constraintUUID,
210: constraintText, referencedColumns);
211: return checkDesc;
212: }
213:
214: /**
215: * Builds a list of columns suitable for creating this Catalog.
216: *
217: *
218: * @return array of SystemColumn suitable for making this catalog.
219: */
220:
221: public SystemColumn[] buildColumnList() {
222:
223: return new SystemColumn[] {
224: SystemColumnImpl.getUUIDColumn("CONSTRAINTID", false),
225: SystemColumnImpl.getColumn("CHECKDEFINITION",
226: Types.LONGVARCHAR, false),
227: SystemColumnImpl.getJavaColumn("REFERENCEDCOLUMNS",
228: "org.apache.derby.catalog.ReferencedColumns",
229: false) };
230: }
231: }
|