KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > ddl > descriptors > ColumnDescriptor


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors;
2
3 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
4 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
5 import com.daffodilwoods.daffodildb.server.serversystem.*;
6 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.constraintsystem.*;
7 import com.daffodilwoods.daffodildb.server.sql99.common.*;
8 import com.daffodilwoods.daffodildb.server.sql99.dql.execution.*;
9 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
10 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*;
11 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
12 import com.daffodilwoods.daffodildb.utils.*;
13 import com.daffodilwoods.database.general.*;
14 import com.daffodilwoods.database.resource.*;
15 import com.daffodilwoods.database.utility.*;
16 import com.daffodilwoods.database.utility.TypeConverter;
17 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.Utility;
18
19 public class ColumnDescriptor extends Descriptor {
20    /**
21     * CONSTRAINT COLUMNS_PRIMARY_KEY
22     * PRIMARY KEY ( TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME )
23     * CONSTRAINT COLUMNS_UNIQUE
24     * UNIQUE ( TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION )
25     * CONSTRAINT COLUMNS_FOREIGN_KEY_TABLES
26     * FOREIGN KEY ( TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME )
27     * REFERENCES TABLES. */

28    public String JavaDoc table_catalog;
29    public String JavaDoc table_schema;
30    public String JavaDoc table_name;
31    public String JavaDoc column_name;
32    public int ordinal_position;
33    public String JavaDoc dtd_identifier;
34    public String JavaDoc domain_catalog;
35    public String JavaDoc domain_schema;
36    public String JavaDoc domain_name;
37    public String JavaDoc column_default;
38    public String JavaDoc isNullable = SqlSchemaConstants.YES;
39    public String JavaDoc isSelfReferencing = SqlSchemaConstants.NO;
40    public String JavaDoc isAutoIncrement = SqlSchemaConstants.NO;
41
42    /**
43     * class variables. */

44    public DataTypeDescriptor dataTypeDescriptor;
45    public TableDescriptor tableDescriptor;
46
47    private int type = -1;
48    private Boolean JavaDoc fixed;
49
50    /**
51     * This variable is used in case of view definition. */

52    public String JavaDoc actualName;
53
54    public ColumnDescriptor() throws DException {
55    }
56
57    public ColumnDescriptor(String JavaDoc tableCatalog, String JavaDoc tableSchema,
58                            String JavaDoc tableName, String JavaDoc columnName) throws DException {
59       table_catalog = tableCatalog;
60       table_schema = tableSchema;
61       table_name = tableName;
62       column_name = columnName;
63    }
64
65    /**
66     * Load method tries to load the all information (Such as table_catalog, table_schema, table_name, column_name,
67     * ordinal_position, dtd_identifier, domain_catalog, domain_schema, domain_name, column_default, isNullable,
68     * isSelfReferencing, isAutoIncrement) from columns system table according to schema qualified column
69     * name. If no information found for schema qualified column name then it throws DException. */

70    public void load(_ServerSession serverSession) throws DException {
71       DataDictionary dd = (DataDictionary) serverSession.getDataDictionary();
72       _SelectQueryIterator columnIterator = (_SelectQueryIterator) dd.getPreparedStatementGetter().
73           getColumnsTableExecuter().executeForFresh(new Object JavaDoc[] {table_catalog, table_schema, table_name,
74           column_name});
75       if (!columnIterator.first())
76          throw new DException("DSE255", new Object JavaDoc[] {column_name,
77                               table_catalog + "." + table_schema + "." + table_name});
78       Object JavaDoc[] columnData = (Object JavaDoc[]) columnIterator.getObject();
79       loadDataFromRecord(columnData);
80       loadDataTypeDescriptor(serverSession);
81    }
82
83    /**
84     * LoadDataFromRecord method load the all information (Such as table_catalog, table_schema, table_name, column_name,
85     * ordinal_position, dtd_identifier, domain_catalog, domain_schema, domain_name, column_default, isNullable, isSelfReferencing,
86     * isAutoIncrement) from columns system table according to schema qualified column name and put all the information in
87     * class variables. */

88    public void loadDataFromRecord(_SelectQueryIterator iter) throws DException {
89       loadDataFromRecord( (Object JavaDoc[]) iter.getObject());
90    }
91
92    /**
93     * LoadDataFromRecord method load the all information (Such as table_catalog, table_schema, table_name, column_name,
94     * ordinal_position, dtd_identifier, domain_catalog, domain_schema, domain_name, column_default, isNullable,
95     * isSelfReferencing, isAutoIncrement) from columns system table according to schema qualified column name and
96     * put all the information in class variables. */

97    private void loadDataFromRecord(Object JavaDoc[] columnData) throws DException {
98       table_catalog = (String JavaDoc) columnData[SystemTablesFields.columns_table_catalog];
99       table_schema = (String JavaDoc) columnData[SystemTablesFields.columns_table_schema];
100       table_name = (String JavaDoc) columnData[SystemTablesFields.columns_table_name];
101       column_name = (String JavaDoc) columnData[SystemTablesFields.columns_column_name];
102       ordinal_position = columnData[SystemTablesFields.columns_ordinal_position].hashCode();
103       dtd_identifier = (String JavaDoc) columnData[SystemTablesFields.columns_dtd_identifier];
104       domain_catalog = (String JavaDoc) columnData[SystemTablesFields.columns_domain_catalog];
105       domain_schema = (String JavaDoc) columnData[SystemTablesFields.columns_domain_schema];
106       domain_name = (String JavaDoc) columnData[SystemTablesFields.columns_domain_name];
107       column_default = (String JavaDoc) columnData[SystemTablesFields.columns_column_default];
108       isNullable = (String JavaDoc) columnData[SystemTablesFields.columns_is_nullable];
109       isSelfReferencing = (String JavaDoc) columnData[SystemTablesFields.columns_is_self_referencing];
110       isAutoIncrement = (String JavaDoc) columnData[SystemTablesFields.columns_is_autoIncrement];
111       if (isAutoIncrement.equalsIgnoreCase(SqlSchemaConstants.YES))
112          tableDescriptor.setAutoIncrement();
113    }
114
115    /**
116     * Put all the class variables information in dataTypedescriptor's class variables. loadDataTypeDescriptor method load the all
117     * information (Such as object_catalog, object_schema, object_name, object_type, dtd_identifier, data_Type, character_maximum_length,
118     * character_octet_length, collation_catalog, collation_schema, collation_name, numeric_precision, numeric_precision_radix,
119     * numeric_scal, datatime_precision, interval_type, interval_precision, user_defined_type_catalog, user_defined_type_schema,
120     * user_defined_type_name, scope_catalog, scope_schema, scope_name, maximum_cardinality) from dataTypeDescriptor system table. */

121    public void loadDataTypeDescriptor(_ServerSession serverSession) throws
122        DException {
123       dataTypeDescriptor = new DataTypeDescriptor();
124       dataTypeDescriptor.object_catalog = table_catalog;
125       dataTypeDescriptor.object_schema = table_schema;
126       dataTypeDescriptor.object_name = table_name;
127       dataTypeDescriptor.object_type = SqlKeywords.TABLE;
128       dataTypeDescriptor.dtd_identifier = dtd_identifier;
129       dataTypeDescriptor.load(serverSession);
130       this.dataTypeDescriptor = dataTypeDescriptor;
131    }
132
133    /**
134     * Save the all information of columns(Such as table_catalog, table_schema, table_name, column_name, ordinal_position, dtd_identifier, domain_catalog, domain_schema, domain_name, column_default,
135     * isNullable, isSelfReferencing and isAutoIncrement) in columns system table at the time of table creation. */

136    public void save(_ServerSession serverSession) throws DException {
137       /**
138        * initialize dtd_identifier as tableName+columnName */

139       dtd_identifier = table_name + "." + column_name;
140       Object JavaDoc[] columnValues = new Object JavaDoc[] {
141           table_catalog, table_schema, table_name,
142           column_name, new Integer JavaDoc(ordinal_position), dtd_identifier,
143           domain_catalog, domain_schema, domain_name, column_default,
144           isNullable, isSelfReferencing, isAutoIncrement};
145       try {
146          SqlSchemaConstants.insert(serverSession,
147                                    SqlSchemaConstants.columns_TableName, null,
148                                    columnValues);
149       } catch (PrimaryConstraintException de) {
150          DException tde = new DException("DSE1136", new Object JavaDoc[] {column_name,
151                                          tableDescriptor.getTableName()});
152          throw tde;
153       } catch (SizeMisMatchException de) {
154          if (de.getDseCode().equals("DSE773")) {
155             DException tde = new DException("DSE8103", null);
156             throw tde;
157          }
158       } catch (DException de) {
159          if (de.getDseCode().equals("DSE1255")) {
160             DException tde = new DException("DSE1136", new Object JavaDoc[] {column_name,
161                                             tableDescriptor.getTableName()});
162             throw tde;
163          }
164          if (de.getDseCode().equals("DSE773")) {
165             DException tde = new DException("DSE8103", null);
166             throw tde;
167          }
168          throw de;
169       }
170       dataTypeDescriptor.save(serverSession);
171    }
172
173    /** @todo
174     * is simalar to update remove it do necessary changes wher ever required sunita
175     * updateColumnDefault method for update column's default clause in case of alter column through alter table statement. */

176    public void updateColumnDefault(_ServerSession serverSession) throws DException {
177       TableDetails tableDetail = new TableDetails();
178       tableDetail.setTableName(SqlSchemaConstants.columns_TableName.getTableName());
179       _ServerSession systemSession = serverSession.getSystemServerSession();
180       _ServerSession globalSession = serverSession.getGlobalSession();
181       booleanvalueexpression condition = ( (DataDictionary) serverSession.getDataDictionary()).
182           getPreparedStatementGetter().getColumnsTableCondition();
183       ConditionSingleTableExecuter conSingTE = new ConditionSingleTableExecuter(null,
184           tableDetail, globalSession, condition, null);
185       _Iterator iter = globalSession.getInternalIterator(SqlSchemaConstants.columns_TableName, conSingTE);
186       iter.setConditionVariableValue(condition.getReferences(new TableDetails[] {
187           tableDetail}), FieldUtility.getFields(new Object JavaDoc[] {table_catalog, table_schema, table_name, column_name}), 1);
188       SqlSchemaConstants.update(systemSession,
189                                 SqlSchemaConstants.columns_TableName, iter,
190                                 new int[] {SystemTablesFields.columns_column_default}
191                                 , new Object JavaDoc[] {column_default});
192    }
193
194    public void update(_ServerSession serverSession, int[] columns, Object JavaDoc[] values) throws DException {
195       TableDetails tableDetail = new TableDetails();
196       tableDetail.setTableName(SqlSchemaConstants.columns_TableName.getTableName());
197       _ServerSession systemSession = serverSession.getSystemServerSession();
198       _ServerSession globalSession = serverSession.getGlobalSession();
199       booleanvalueexpression condition = ( (DataDictionary) serverSession.getDataDictionary()).
200           getPreparedStatementGetter().getColumnsTableCondition();
201       ConditionSingleTableExecuter conSingTE = new ConditionSingleTableExecuter(null,
202           tableDetail, globalSession, condition, null);
203       _Iterator iter = globalSession.getInternalIterator(SqlSchemaConstants.columns_TableName, conSingTE);
204       _Reference[] ref = null;
205       Object JavaDoc[] val = null;
206       try {
207          ref = condition.getReferences(new TableDetails[] {tableDetail});
208          val = new Object JavaDoc[] {table_catalog, table_schema, table_name, column_name};
209          val = FieldUtility.getFields(val);
210          iter.setConditionVariableValue(ref, val, 1);
211       } catch (ArrayIndexOutOfBoundsException JavaDoc ex) {
212          throw ex;
213       }
214       SqlSchemaConstants.update(systemSession,
215                                 SqlSchemaConstants.columns_TableName, iter, columns, values);
216    }
217
218    /**
219     * Delete method drop all the information of a column (Such as column_name, and datatype) from columns system table and
220     * dataTypeDescriptor syatem table according to schema qualified table name. if column is not of domain type, delete data
221     * type descriptor. */

222    public void delete(_ServerSession serverSession) throws DException {
223       booleanvalueexpression condition = ( (DataDictionary) serverSession.getDataDictionary()).
224           getPreparedStatementGetter().getColumnsTableCondition();
225       super.deleteColumnDescriptor(serverSession, SqlSchemaConstants.columns_TableName, condition,
226                                    new Object JavaDoc[] {table_catalog, table_schema, table_name, column_name});
227       dataTypeDescriptor.delete(serverSession);
228    }
229
230    /**
231     * deleteConstraints method drop all information (Such as constraint_catalog, constraint_schema, constraint_name) from
232     * key_column_usage system table according to schema qualified column name. */

233    public void deleteConstraints(_ServerSession serverSession) throws DException {
234       _SelectQueryIterator retIter = SqlSchemaConstants.getIterator(serverSession,
235           queryforConstraints, (Object JavaDoc[]) getParameters());
236       if (retIter.first()) {
237          do {
238             TableConstraintDescriptor constraint = new TableConstraintDescriptor();
239             Object JavaDoc[] values = (Object JavaDoc[]) retIter.getObject();
240             constraint.constraint_catalog = (String JavaDoc) values[0];
241             constraint.constraint_schema = (String JavaDoc) values[1];
242             constraint.constraint_name = (String JavaDoc) values[2];
243             constraint.load(serverSession);
244             constraint.delete(serverSession);
245          } while (retIter.next());
246       }
247    }
248
249    /**
250     * If this particular schema qualified column used in view definition then returns the schema qualified
251     * view name otherwise returns null. */

252    public QualifiedIdentifier isColumnReferencedFromViews(_ServerSession serverSession) throws DException {
253       _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession,
254           getClause(SqlSchemaConstants.view_colum_usage_TableName.getIdentifier()), getParameters());
255       if (!iter.first())
256          return null;
257       Object JavaDoc[] data = (Object JavaDoc[]) iter.getObject();
258       return new QualifiedIdentifier( (String JavaDoc) data[0], (String JavaDoc) data[1], (String JavaDoc) data[2]);
259    }
260
261    private String JavaDoc getClause(String JavaDoc tableName) throws DException {
262       StringBuffer JavaDoc clause = new StringBuffer JavaDoc();
263       clause.append("select * from ");
264       clause.append(tableName);
265       clause.append(" where ");
266       if (tableName.equalsIgnoreCase(SqlSchemaConstants.
267                                      triggered_update_columns_TableName.
268                                      getIdentifier())) {
269          clause.append(" event_object_catalog = ? ");
270          clause.append(" and event_object_schema = ? ");
271          clause.append(" and event_object_table = ? ");
272          clause.append(" and event_object_column = ? ");
273       } else {
274          clause.append(" table_catalog = ? ");
275          clause.append(" and table_schema = ? ");
276          clause.append(" and table_name = ? ");
277          clause.append(" and column_name = ? ");
278       }
279       return clause.toString();
280    }
281
282    /**
283     * If this particular schema qualified column used in composite key then returns the schema qualified
284     * constraint name otherwise returns null. */

285    public QualifiedIdentifier isColumnReferencedFromCompositeKey(_ServerSession serverSession) throws DException {
286       String JavaDoc clause = " Select * from " +
287           SystemTables.key_column_usage_TableName + " as one, "
288           + SystemTables.table_constraints_TableName + " as two "
289           + " where one.table_catalog = ? and one.table_schema = ? and one.table_name = ? and one.column_name = ? "
290           + " and Not(two.table_catalog = ? and two.table_schema = ? and two.table_name = ?) "
291           + " and one.CONSTRAINT_CATALOG = two.CONSTRAINT_CATALOG and one.CONSTRAINT_SCHEMA = two.CONSTRAINT_SCHEMA "
292           + " and one.CONSTRAINT_NAME = two.CONSTRAINT_NAME "
293           + " and two.constraint_type in('" + SqlKeywords.PRIMARY + " " + SqlKeywords.KEY + "'" + " ,'" + SqlKeywords.UNIQUE + "' " + " ,'" + SqlKeywords.FOREIGN + " " + SqlKeywords.KEY + "' )";
294
295       String JavaDoc clause1 = " Select one.CONSTRAINT_CATALOG,one.CONSTRAINT_SCHEMA,one.CONSTRAINT_NAME from " +
296           SystemTables.key_column_usage_TableName + " as one, "
297           + SystemTables.key_column_usage_TableName + " as two, "
298           + SystemTables.table_constraints_TableName + " as three "
299           + " where one.table_catalog = ? and one.table_schema = ? and one.table_name = ? and one.column_name = ? "
300           + " and one.CONSTRAINT_CATALOG = two.CONSTRAINT_CATALOG and one.CONSTRAINT_SCHEMA = two.CONSTRAINT_SCHEMA "
301           + " and one.CONSTRAINT_NAME = two.CONSTRAINT_NAME "
302           + " and one.CONSTRAINT_CATALOG = three.CONSTRAINT_CATALOG and one.CONSTRAINT_SCHEMA = three.CONSTRAINT_SCHEMA "
303           + " and one.CONSTRAINT_NAME = three.CONSTRAINT_NAME "
304           + " and three.constraint_type in( '" + SqlKeywords.PRIMARY + " " + SqlKeywords.KEY + "'" + " ,'" + SqlKeywords.UNIQUE + "' " + " ,'" + SqlKeywords.FOREIGN + " " + SqlKeywords.KEY + "' )"
305           + " group by one.CONSTRAINT_CATALOG,one.CONSTRAINT_SCHEMA,one.CONSTRAINT_NAME "
306           + " having count(*) >1 ";
307
308       _SelectQueryIterator ret_iterator = SqlSchemaConstants.getIterator(serverSession, clause,
309           new Object JavaDoc[] {table_catalog, table_schema, table_name, column_name,
310           table_catalog, table_schema, table_name});
311
312       if (!ret_iterator.first()) {
313          _SelectQueryIterator ret_iterator1 = SqlSchemaConstants.getIterator(serverSession, clause1,
314              new Object JavaDoc[] {table_catalog, table_schema, table_name, column_name});
315          if (ret_iterator1.first()) {
316             Object JavaDoc[] data1 = (Object JavaDoc[]) ret_iterator1.getObject();
317             QualifiedIdentifier qu = new QualifiedIdentifier( (String JavaDoc) data1[0], (String JavaDoc) data1[1], (String JavaDoc) data1[2]);
318             throw new DException("DSE8163", new Object JavaDoc[] {qu.getIdentifier(), table_name, column_name});
319          }
320          return null;
321       }
322       Object JavaDoc[] data = (Object JavaDoc[]) ret_iterator.getObject();
323       return new QualifiedIdentifier( (String JavaDoc) data[0], (String JavaDoc) data[1], (String JavaDoc) data[2]);
324    }
325
326    /**
327     * If this particular schema qualified column used in trigger definition then returns the schema qualified
328     * trigger name otherwise returns null. */

329    public QualifiedIdentifier isColumnReferencedFromTriggers(_ServerSession
330        serverSession) throws DException {
331       _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession,
332           getClause(SqlSchemaConstants.trigger_column_usage_TableName.
333                     getIdentifier()), getParameters());
334       if (iter.first()) {
335          Object JavaDoc[] data = (Object JavaDoc[]) iter.getObject();
336          return new QualifiedIdentifier( (String JavaDoc) data[SystemTablesFields.
337                                         triggerColumnUsage_trigger_catalog],
338                                         (String JavaDoc) data[SystemTablesFields.
339                                         triggerColumnUsage_trigger_schema],
340                                         (String JavaDoc) data[SystemTablesFields.
341                                         triggerColumnUsage_trigger_name]);
342       }
343
344       iter = SqlSchemaConstants.getIterator(serverSession,
345                                             getClause(SqlSchemaConstants.
346           triggered_update_columns_TableName.getIdentifier()), getParameters());
347       if (!iter.first())
348          return null;
349       Object JavaDoc[] data = (Object JavaDoc[]) iter.getObject();
350       return new QualifiedIdentifier( (String JavaDoc) data[SystemTablesFields.
351                                      triggerUpdateColumn_trigger_catalog],
352                                      (String JavaDoc) data[SystemTablesFields.
353                                      triggerUpdateColumn_trigger_schema],
354                                      (String JavaDoc) data[SystemTablesFields.
355                                      triggerUpdateColumn_trigger_name]);
356    }
357
358    /**
359     * If this particular schema qualified column used in referential constraints then returns the schema qualified
360     * referential constraint name otherwise returns null. */

361    public QualifiedIdentifier isColumnReferencedFromReferentialConstraints(_ServerSession serverSession) throws DException {
362       _SelectQueryIterator iterator = SqlSchemaConstants.getIterator(serverSession,
363           queryForColumnReferential, new Object JavaDoc[] {table_catalog, table_schema, table_name, column_name});
364       if (!iterator.first())
365          return null;
366       Object JavaDoc[] data = (Object JavaDoc[]) iterator.getObject();
367       return new QualifiedIdentifier( (String JavaDoc) data[SystemTablesFields.referential_constraints_constraint_catalog],
368                                      (String JavaDoc) data[SystemTablesFields.referential_constraints_constraint_schema],
369                                      (String JavaDoc) data[SystemTablesFields.referential_constraints_constraint_name]);
370    }
371
372    /**
373     * If this particular schema qualified column used in check constraints then returns the schema qualified
374     * check constraint name otherwise returns null. Done by harvinder Suggest by Mr. Parveen Agarwal and Mr. Neeraj Khanna. */

375    public QualifiedIdentifier isColumnReferencedFromCheckConstraints(_ServerSession serverSession) throws DException {
376       String JavaDoc clause = " Select * from " +
377           SystemTables.check_column_usage_TableName + " as one, "
378           + SystemTables.table_constraints_TableName + " as two "
379           + " where one.table_catalog = ? and one.table_schema = ? and one.table_name = ? and one.column_name = ? "
380           + " and Not(two.table_catalog = ? and two.table_schema = ? and two.table_name = ?) "
381           + " and one.CONSTRAINT_CATALOG = two.CONSTRAINT_CATALOG and one.CONSTRAINT_SCHEMA = two.CONSTRAINT_SCHEMA "
382           + " and one.CONSTRAINT_NAME = two.CONSTRAINT_NAME ";
383
384       String JavaDoc clause1 = " Select one.CONSTRAINT_CATALOG,one.CONSTRAINT_SCHEMA,one.CONSTRAINT_NAME from " +
385           SystemTables.check_column_usage_TableName + " as one, "
386           + SystemTables.check_column_usage_TableName + " as two "
387           + " where one.table_catalog = ? and one.table_schema = ? and one.table_name = ? and one.column_name = ? "
388           + " and one.CONSTRAINT_CATALOG = two.CONSTRAINT_CATALOG and one.CONSTRAINT_SCHEMA = two.CONSTRAINT_SCHEMA "
389           + " and one.CONSTRAINT_NAME = two.CONSTRAINT_NAME "
390           + " group by one.CONSTRAINT_CATALOG,one.CONSTRAINT_SCHEMA,one.CONSTRAINT_NAME "
391           + " having count(*) >1 ";
392
393       _SelectQueryIterator ret_iterator = SqlSchemaConstants.getIterator(serverSession, clause,
394           new Object JavaDoc[] {table_catalog, table_schema, table_name, column_name, table_catalog, table_schema, table_name});
395       if (!ret_iterator.first()) {
396          _SelectQueryIterator ret_iterator1 = SqlSchemaConstants.getIterator(serverSession, clause1,
397              new Object JavaDoc[] {table_catalog, table_schema, table_name, column_name});
398
399          if (ret_iterator1.first()) {
400             Object JavaDoc[] data1 = (Object JavaDoc[]) ret_iterator1.getObject();
401             QualifiedIdentifier qu = new QualifiedIdentifier( (String JavaDoc) data1[0], (String JavaDoc) data1[1], (String JavaDoc) data1[2]);
402             throw new DException("DSE7083", new Object JavaDoc[] {qu.getIdentifier(), table_name, column_name});
403          }
404          return null;
405       }
406
407       Object JavaDoc[] data = (Object JavaDoc[]) ret_iterator.getObject();
408       return new QualifiedIdentifier( (String JavaDoc) data[0], (String JavaDoc) data[1], (String JavaDoc) data[2]);
409    } //Done by harvinder complete
410

411    /* Returns true whether function is of variable type. */
412    public boolean isFixedColumn() throws DException {
413       if (fixed == null)
414          fixed = Utility.getBooleanValue(dataTypeDescriptor.isFixedLength());
415       return fixed.booleanValue();
416    }
417
418    public int getType() throws DException {
419       if (type == -1)
420          type = TypeConverter.getDataBaseType(dataTypeDescriptor.data_Type);
421       return type;
422    }
423
424    /**
425     * Returns true if column is blob/clob type oterwise returns false. */

426    public boolean isBlobClob() throws DException {
427       return isBlobClob(getType());
428    }
429
430    /**
431     * Returns true if column is blob/clob type oterwise returns false. */

432    private boolean isBlobClob(int type) throws DException {
433       return type == Datatype.BLOB ||
434           type == Datatype.BINARYLARGEOBJECT ||
435           type == Datatype.LONGVARBINARY ||
436           type == Datatype.CLOB ||
437           type == Datatype.CHARACTERLARGEOBJECT ||
438           type == Datatype.CHARLARGEOBJECT ||
439           type == Datatype.LONGVARCHAR;
440    }
441
442    /**
443     * Returns true if column is character type oterwise returns false. */

444    public boolean isCharcterType() throws DException {
445       return isCharcterType(getType());
446    }
447
448    /**
449     * Returns true if column is character type oterwise returns false. */

450    private boolean isCharcterType(int type) throws DException {
451       return type == Datatype.CLOB ||
452           type == Datatype.CHAR ||
453           type == Datatype.CHARACTER ||
454           type == Datatype.CHARACTERLARGEOBJECT ||
455           type == Datatype.CHARACTERVARYING ||
456           type == Datatype.CHARLARGEOBJECT ||
457           type == Datatype.CHARVARYING ||
458           type == Datatype.CLOB ||
459           type == Datatype.LONGVARCHAR ||
460           type == Datatype.VARCHAR;
461    }
462
463    /**
464     * Returns the schema qualified column name. */

465    private Object JavaDoc[] getParameters() {
466       return new Object JavaDoc[] {
467           table_catalog, table_schema, table_name, column_name};
468    }
469
470    /**
471     * Returns the schema qualified table name. */

472    public QualifiedIdentifier getQualifiedTableName() {
473       return new QualifiedIdentifier(table_catalog, table_schema, table_name);
474    }
475
476    private static String JavaDoc queryForColumnReferential = null;
477    static {
478       StringBuffer JavaDoc buffer = new StringBuffer JavaDoc(200);
479       buffer.append(" select * from ")
480           .append(SystemTables.referential_constraints_TableName)
481           .append(" where( unique_constraint_catalog, unique_constraint_schema, ")
482           .append(" unique_constraint_name ) ")
483           .append(
484           " in ( select tabCons.constraint_catalog, tabCons.constraint_schema, ")
485           .append(" tabCons.constraint_name from ")
486           .append(SystemTables.table_constraints_TableName).append(" as tabCons,")
487           .append(SystemTables.key_column_usage_TableName).append(" as keyCol ")
488           .append(
489           " where tabCons.constraint_catalog = keyCol.constraint_catalog ")
490           .append(" and tabCons.constraint_schema = keyCol.constraint_schema ")
491           .append(" and tabCons.constraint_name = keyCol.constraint_name ")
492           .append(" and tabCons.table_catalog = ? ")
493           .append(" and tabCons.table_schema = ? ")
494           .append(" and tabCons.table_name = ? ")
495           .append(" and ( tabCons.constraint_type = 'PRIMARY Key' or tabCons.constraint_type = 'UNIQUE' )")
496           .append(" and keyCol.column_name = ? )")
497           ;
498       queryForColumnReferential = buffer.toString();
499    }
500
501    /**
502     * Query to load all information (Such as constraint_catalog, constraint_schema, constraint_name) from
503     * key_column_usage system table according to schema qualified column name. */

504    private static String JavaDoc queryforConstraints = "select constraint_catalog, "
505        + " constraint_schema, constraint_name from "
506        + SystemTables.key_column_usage_TableName
507        + " where table_catalog = ? and table_schema = ? "
508        + " and table_name = ? and column_name = ? ";
509
510    /**
511     * Returns the int value 2 for COLUMN_DESCRIPTOR*/

512    public int getDescriptorType() {
513       return COLUMN_DESCRIPTOR;
514    }
515
516    public void setTableDescriptor(TableDescriptor tableDes) {
517       tableDescriptor = tableDes;
518    }
519 }
520
Popular Tags