KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > odbc > OdbcMetaData


1 package com.daffodilwoods.daffodildb.odbc;
2
3 import java.sql.Types JavaDoc;
4 import com.daffodilwoods.daffodildb.server.serversystem._Connection;
5 import in.co.daffodil.db.jdbc.DatabaseProperties;
6 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents._SelectIterator;
7 import com.daffodilwoods.daffodildb.client._RecordSetBufferIterator;
8 import java.sql.SQLException JavaDoc;
9 import com.daffodilwoods.daffodildb.client._RecordSetBuffer;
10 import com.daffodilwoods.daffodildb.client.RecordSet;
11 import com.daffodilwoods.daffodildb.client.TempRecordSetBuffer;
12 import com.daffodilwoods.database.resource.DException;
13 import java.util.StringTokenizer JavaDoc;
14 import com.daffodilwoods.database.utility.P;
15 import com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata._RowReader;
16 import com.daffodilwoods.daffodildb.server.sql99.common.Datatypes;
17 import in.co.daffodil.db.jdbc.Utilities;
18
19 public class OdbcMetaData extends OdbcPreparedStatement{
20   private static final int COLUMN_OFFSET = 1;
21
22   public OdbcMetaData(){
23   }
24
25   public OdbcMetaData(String JavaDoc path){
26   }
27   public Object JavaDoc getSQLProcedures(Object JavaDoc conObj, String JavaDoc catalog,
28                                  String JavaDoc schema, String JavaDoc procedureName) throws
29       Exception JavaDoc {
30     _Connection con0 = (_Connection)conObj;
31     String JavaDoc query = DatabaseProperties.getProceduresQuery(catalog, schema,
32         procedureName);
33     _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
34         executeQuery(query, 0, 0);
35     RecordSet rs = new RecordSet();
36     rs.setSelectIterator(iter);
37     return rs.getIterator();
38   }
39
40   public Object JavaDoc getSQLTablePrivileges(Object JavaDoc conObj, String JavaDoc catalog,
41                                       String JavaDoc schema, String JavaDoc tableName) throws
42       Exception JavaDoc {
43     _Connection con0 = (_Connection)conObj;
44   String JavaDoc query = DatabaseProperties.getTablePrivilegesQuery(catalog, schema,
45         tableName);
46     _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
47         executeQuery(query, 0, 0);
48     RecordSet rs = new RecordSet();
49     rs.setSelectIterator(iter);
50     return rs.getIterator();
51   }
52
53   public Object JavaDoc getSQLTables(Object JavaDoc conObj, String JavaDoc catalog, String JavaDoc schema,
54                              String JavaDoc tableName, String JavaDoc tableType) throws
55       Exception JavaDoc {
56     _Connection con0 = (_Connection)conObj;
57     String JavaDoc[] type = null;
58     if (tableType != null && tableType.trim().length() > 0) {
59       StringTokenizer JavaDoc stk = new StringTokenizer JavaDoc(tableType, ",");
60       int count = stk.countTokens();
61       type = new String JavaDoc[count];
62       for (int i = 0; i < count; i++) {
63         /**
64          * remove the "'" if present
65          * */

66         type[i] = stk.nextToken().trim();
67         if (type[i].startsWith("'")) {
68           type[i] = type[i].substring(1, type[i].length() - 1);
69         }
70       }
71     }
72     boolean isAllCatalog = catalog != null && catalog.equalsIgnoreCase("%");
73     boolean tableEmptyString = tableName != null && tableName.equals("");
74     boolean schemaEmptyString = schema != null && schema.equals("");
75     String JavaDoc query = null;
76     if (isAllCatalog && tableEmptyString && schemaEmptyString) {
77       /** getAll catalogs */
78       query = DatabaseProperties.getCatalogsQuery();
79       _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
80           executeQuery(query, 0, 0);
81      return getTempBufferForAllCatalogs(iter).getIterator();
82     }
83     boolean isAllSchema = schema != null && schema.equalsIgnoreCase("%");
84     boolean catalogEmptyString = catalog != null && catalog.equals("");
85     if (isAllSchema && catalogEmptyString && tableEmptyString) {
86       /** getAll Schema */
87       query = DatabaseProperties.getSchemasQuery();
88       _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
89           executeQuery(query, 0, 0);
90      return getTempBufferForAllSchemas(iter).getIterator();
91     }
92     boolean isAllTypes = type != null && type.length == 1 && type[0].equals("%");
93     if (isAllTypes && catalogEmptyString && schemaEmptyString && tableEmptyString) {
94       /** getAllTableTypes */
95       return getTempBufferForAllTableTypes().getIterator();
96     }
97     return getTables(con0, catalog, schema, tableName, type);
98   }
99
100   private _RecordSetBufferIterator getTables(_Connection con0, String JavaDoc catalog,
101                                              String JavaDoc schema, String JavaDoc tableName,
102                                              String JavaDoc[] type) throws SQLException JavaDoc,
103       DException {
104     String JavaDoc query = DatabaseProperties.getTablesQuery(catalog, schema, tableName,
105         type);
106     _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
107         executeQuery(query, 0, 0);
108     RecordSet rs = new RecordSet();
109     rs.setSelectIterator(iter);
110     return rs.getIterator();
111   }
112
113   private _RecordSetBuffer getTempBufferForAllCatalogs(_SelectIterator iter) throws
114       Exception JavaDoc {
115     String JavaDoc[] columnNames = {
116         "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "TABLE_TYPE",
117         "REMARKS"};
118     int columnCount = columnNames.length;
119     int rowCount = iter.getRowCount();
120     iter.beforeFirst();
121     Object JavaDoc[] dataRetrieved = (Object JavaDoc[]) iter.fetchForward(rowCount);
122     _RowReader rowReader = iter.getRowReader();
123     Object JavaDoc[][] data = rowCount == 0 ? null : new Object JavaDoc[rowCount][columnCount];
124     for (int i = 0; i < rowCount; i++) {
125       Object JavaDoc values = (Object JavaDoc[]) dataRetrieved[i];
126       data[i][0] = rowReader.getObject(COLUMN_OFFSET + 0,values);
127     }
128     return getBufferForSQLTables(columnNames, columnCount, data);
129   }
130
131   private _RecordSetBuffer getTempBufferForAllSchemas(_SelectIterator iter) throws
132       Exception JavaDoc {
133     String JavaDoc[] columnNames = {
134         "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "TABLE_TYPE",
135         "REMARKS"};
136     int columnCount = columnNames.length;
137     int rowCount = iter.getRowCount();
138     iter.beforeFirst();
139     Object JavaDoc[] dataRetrieved = iter.fetchForward(rowCount);
140     _RowReader rowReader = iter.getRowReader();
141     Object JavaDoc[][] data = rowCount == 0 ? null : new Object JavaDoc[rowCount][columnCount];
142     for (int i = 0; i < rowCount; i++) {
143       Object JavaDoc values = (Object JavaDoc[]) dataRetrieved[i];
144       data[i][1] = rowReader.getObject(COLUMN_OFFSET + 0,values);
145     }
146     return getBufferForSQLTables(columnNames, columnCount, data);
147   }
148
149   private _RecordSetBuffer getTempBufferForAllTableTypes() throws Exception JavaDoc {
150     String JavaDoc[] columnNames = {
151         "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "TABLE_TYPE",
152         "REMARKS"};
153     int columnCount = columnNames.length;
154     String JavaDoc[] allTableTypes = DatabaseProperties.getTableTypes();
155     int rowCount = allTableTypes.length;
156     Object JavaDoc[][] data = rowCount == 0 ? null : new Object JavaDoc[rowCount][columnCount];
157     for (int i = 0; i < rowCount; i++) {
158       data[i][3] = (String JavaDoc) allTableTypes[i]; ;
159     }
160     return getBufferForSQLTables(columnNames, columnCount, data);
161   }
162
163   private TempRecordSetBuffer getBufferForSQLTables(String JavaDoc[] columnNames,
164       int columnCount,
165       Object JavaDoc[][] data) throws
166       Exception JavaDoc {
167     Object JavaDoc[][] metaData = new Object JavaDoc[columnCount][11];
168     for (int i = 0; i < columnNames.length; i++) {
169       metaData[i][0] = null;
170       metaData[i][1] = null;
171       metaData[i][2] = null;
172       metaData[i][3] = columnNames[i];
173       int type = getColumnTypeForTables(i + 1);
174       metaData[i][4] = new Integer JavaDoc(type);
175       metaData[i][5] = columnNames[i];
176       int precision = getPrecision(type);
177       metaData[i][6] = new Integer JavaDoc(precision);
178       metaData[i][7] = new Integer JavaDoc(0);
179       metaData[i][8] = Utilities.getBooleanValue(false);
180       metaData[i][9] = new Integer JavaDoc(2); //ResultSetMetaData.columnNullableUnknown
181
metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] :
182           type == Datatypes.SMALLINT ? new Integer JavaDoc(Datatypes.SHORTSIZE) :
183           new Integer JavaDoc(Datatypes.INTSIZE);
184     }
185     TempColumnCharacteristics cc = new TempColumnCharacteristics(metaData,
186         columnNames);
187     TempRecordSetBuffer rs = new TempRecordSetBuffer(data, cc);
188     return rs;
189   }
190
191   private int getColumnTypeForTables(int index) throws Exception JavaDoc {
192     switch (index) {
193       case 1:
194         return Datatypes.VARCHAR;
195       case 2:
196         return Datatypes.VARCHAR;
197       case 3:
198         return Datatypes.VARCHAR;
199       case 4:
200         return Datatypes.VARCHAR;
201       case 5:
202         return Datatypes.VARCHAR;
203       default:
204         DException dex = new DException("DSE504", null);
205         throw dex;
206     }
207   }
208
209   public Object JavaDoc getSQLColumnPrivileges(Object JavaDoc conObj, String JavaDoc catalog,
210                                        String JavaDoc schema, String JavaDoc tableName,
211                                        String JavaDoc columnName) throws Exception JavaDoc {
212     _Connection con0 = (_Connection)conObj;
213     String JavaDoc query = DatabaseProperties.getColumnPrivilegesQuery(catalog, schema,
214         tableName, columnName);
215     _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
216         executeQuery(query, 0, 0);
217     RecordSet rs = new RecordSet();
218     rs.setSelectIterator(iter);
219     return rs.getIterator();
220   }
221
222   public Object JavaDoc getSQLPrimaryKeys(Object JavaDoc conObj, String JavaDoc catalog,
223                                   String JavaDoc schema, String JavaDoc tableName) throws
224       Exception JavaDoc {
225     _Connection con0 = (_Connection)conObj;
226     String JavaDoc query = DatabaseProperties.getPrimaryKeysQuery(catalog, schema,
227         tableName);
228     _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
229         executeQuery(query, 0, 0);
230     RecordSet rs = new RecordSet();
231     rs.setSelectIterator(iter);
232     return rs.getIterator();
233   }
234
235   public Object JavaDoc getSQLForeignKeys(Object JavaDoc conObj, String JavaDoc pCatalog,
236                                   String JavaDoc pSchema, String JavaDoc pTableName,
237                                   String JavaDoc fCatalog, String JavaDoc fSchema,
238                                   String JavaDoc fTableName) throws Exception JavaDoc {
239     _Connection con0 = (_Connection)conObj;
240    String JavaDoc query = DatabaseProperties.getCrossReferenceQuery(pCatalog, pSchema,
241         pTableName, fCatalog, fSchema, fTableName);
242     _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
243         executeQuery(query, 0, 0);
244     _RecordSetBuffer rs = getTempBufferForgetSQLForeignKeys(iter);
245     return rs.getIterator();
246   }
247
248   private _RecordSetBuffer getTempBufferForgetSQLForeignKeys(_SelectIterator
249       iter) throws Exception JavaDoc {
250     String JavaDoc[] columnNames = new String JavaDoc[] {
251         "PKTABLE_CAT", "PKTABLE_SCHEM", "PKTABLE_NAME",
252         "PKCOLUMN_NAME", "FKTABLE_CAT", "FKTABLE_SCHEM", "FKTABLE_NAME",
253         "FKCOLUMN_NAME",
254         "KEY_SEQ", "UPDATE_RULE", "DELETE_RULE", "FK_NAME", "PK_NAME",
255         "DEFERRABILITY"};
256     int columnCount = columnNames.length;
257     int rowCount = iter.getRowCount();
258     iter.beforeFirst();
259     Object JavaDoc[] dataRetrieved = (Object JavaDoc[]) iter.fetchForward(rowCount);
260     _RowReader rowReader = iter.getRowReader();
261     Object JavaDoc[][] data = rowCount == 0 ? null : new Object JavaDoc[rowCount][columnCount];
262     for (int i = 0; i < rowCount; i++) {
263       Object JavaDoc values = dataRetrieved[i];
264       Object JavaDoc[] objs = new Object JavaDoc[14];
265       int j = 0;
266       for (; j < 9; j++)
267         objs[j] = rowReader.getObject(COLUMN_OFFSET + j, values);
268       objs[j++] = new Short JavaDoc( (short) getUpdateDeleteRule( (String JavaDoc) rowReader.
269           getObject(COLUMN_OFFSET + 9, values)));
270       objs[j++] = new Short JavaDoc( (short) getUpdateDeleteRule( (String JavaDoc) rowReader.
271           getObject(COLUMN_OFFSET + 10, values)));
272       objs[j++] = rowReader.getObject(COLUMN_OFFSET + 11, values);
273       objs[j++] = rowReader.getObject(COLUMN_OFFSET + 12, values);
274       objs[j++] = new Short JavaDoc( (short) getDeferrability( (String JavaDoc) rowReader.
275           getObject(COLUMN_OFFSET + 13, values),
276           (String JavaDoc) rowReader.getObject(14, values)));
277       data[i] = objs;
278     }
279     Object JavaDoc[][] metaData = new Object JavaDoc[columnCount][11];
280     for (int i = 0; i < columnCount; i++) {
281       metaData[i][0] = null;
282       metaData[i][1] = null;
283       metaData[i][2] = null;
284       metaData[i][3] = columnNames[i];
285       int type = getColumnTypeForCrossReference(i + 1);
286       metaData[i][4] = new Integer JavaDoc(type);
287       metaData[i][5] = columnNames[i];
288       int precision = getPrecision(type);
289       metaData[i][6] = new Integer JavaDoc(precision);
290       metaData[i][7] = new Integer JavaDoc(0);
291       metaData[i][8] = Utilities.getBooleanValue(false);
292       metaData[i][9] = new Integer JavaDoc(2); //ResultSetMetaData.columnNullableUnknown
293
metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] :
294           type == Datatypes.SMALLINT ? new Integer JavaDoc(Datatypes.SHORTSIZE) :
295           new Integer JavaDoc(Datatypes.INTSIZE);
296     }
297     TempColumnCharacteristics cc = new TempColumnCharacteristics(metaData,
298         columnNames);
299     TempRecordSetBuffer rs = new TempRecordSetBuffer(data, cc);
300     return rs;
301   }
302
303   private int getColumnTypeForCrossReference(int index) throws Exception JavaDoc {
304     switch (index) {
305       case 1:
306         return Datatypes.VARCHAR;
307       case 2:
308         return Datatypes.VARCHAR;
309       case 3:
310         return Datatypes.VARCHAR;
311       case 4:
312         return Datatypes.VARCHAR;
313       case 5:
314         return Datatypes.VARCHAR;
315       case 6:
316         return Datatypes.VARCHAR;
317       case 7:
318         return Datatypes.VARCHAR;
319       case 8:
320         return Datatypes.VARCHAR;
321       case 9:
322         return Datatypes.SMALLINT;
323       case 10:
324         return Datatypes.SMALLINT;
325       case 11:
326         return Datatypes.SMALLINT;
327       case 12:
328         return Datatypes.VARCHAR;
329       case 13:
330         return Datatypes.VARCHAR;
331       case 14:
332         return Datatypes.SMALLINT;
333       default:
334         DException dex = new DException("DSE504", null);
335         throw dex;
336     }
337   }
338
339   public Object JavaDoc getSQLProcedureColumns(Object JavaDoc conObj, String JavaDoc catalog,
340                                        String JavaDoc schema, String JavaDoc procedureName,
341                                        String JavaDoc columnName) throws Exception JavaDoc {
342     _Connection con0 = (_Connection)conObj;
343     String JavaDoc query = DatabaseProperties.getProcedureColumnsQuery(catalog, schema,
344         procedureName, columnName);
345     _SelectIterator iter = null;//(_SelectIterator) con0.getSystemConnection().
346
_RecordSetBuffer rs = getTempBufferForgetSQLProcedureColumns(iter);
347     return rs.getIterator();
348   }
349
350   private _RecordSetBuffer getTempBufferForgetSQLProcedureColumns(
351       _SelectIterator iter) throws Exception JavaDoc {
352     String JavaDoc[] columnNames = new String JavaDoc[] {
353         "PROCEDURE_CAT", "PROCEDURE_SCHEM", "PROCEDURE_NAME", "COLUMN_NAME",
354         "COLUMN_TYPE", "DATA_TYPE", "TYPE_NAME", "PRECISION", "LENGTH",
355         "SCALE", "RADIX", "NULLABLE", "REMARKS"};
356
357     int columnCount = columnNames.length;
358     Object JavaDoc[][] dataRetrieved = null; //(Object[][])iter.fetchForward(0);
359
int rowCount = dataRetrieved == null ? 0 : dataRetrieved.length;
360     Object JavaDoc[][] data = rowCount == 0 ? null : new Object JavaDoc[rowCount][columnCount];
361
362     data = null; //To be done later, NOt done in JDBC also
363

364     /* for (int i = 0; i < rowCount; i++) {
365         Object[] objs = new Object[columnNames.length];
366         Object[] values = dataRetrieved[i];
367         int j = 0;
368         for (; j < 4; j++)
369           objs[j] = rowReader.getObject(COLUMN_OFFSET + j,values);
370         objs[5] = rowReader.getObject(COLUMN_OFFSET + 4,values);
371         objs[4] = new Short( (short) Utilities.
372                             getCorrespondingSqlTypeOfDatabaseType(Utilities.
373             getDataBaseType( (String) objs[5])));
374          Object characterLengthObj = rowReader.getObject(COLUMN_OFFSET + 8,values);
375         int characterLength = characterLengthObj == null ? 0 :
376             characterLengthObj.hashCode();
377         Integer i12 = (Integer) rowReader.getObject(COLUMN_OFFSET + 12,values);
378         Integer i13 = (Integer) rowReader.getObject(COLUMN_OFFSET + 13,values);
379         Integer i14 = (Integer) rowReader.getObject(COLUMN_OFFSET + 14,values);
380         objs[6] = new Integer(getColumnSize(characterLength,
381                                             i12 == null ? 0 : i12.intValue(),
382                                             i13 == null ? 0 : i13.intValue(),
383                                             i14 == null ? 0 : i14.intValue()));
384         objs[7] = null; //buffer length
385          objs[8] = rowReader.getObject(COLUMN_OFFSET + 5,values); //decimal digits
386          objs[9] = rowReader.getObject(COLUMN_OFFSET + 6,values); //decimal precision
387         objs[12] = rowReader.getObject(COLUMN_OFFSET + 7,values);
388         objs[13] = new Integer( ( (Short) objs[4]).intValue()); //sqldatatype
389         objs[14] = new Integer(0); //record.getColumnValue(13);//sqlDatatimesub
390          objs[15] = rowReader.getObject(COLUMN_OFFSET + 9,values); //char octet length
391         objs[11] = "null"; //remarks
392          objs[16] = rowReader.getObject(COLUMN_OFFSET + 10,values); //ordinal Position
393          objs[17] = rowReader.getObject(COLUMN_OFFSET + 11,values); //nullability
394          objs[10] = new Integer(getNullablility( (String) objs[17])); //isnullable
395         data[i] = objs;
396       }*/

397
398     Object JavaDoc[][] metaData = new Object JavaDoc[columnCount][11];
399     for (int i = 0; i < columnNames.length; i++) {
400       metaData[i][0] = null;
401       metaData[i][1] = null;
402       metaData[i][2] = null;
403       metaData[i][3] = columnNames[i];
404       int type = getColumnTypeForProcedureColumns(i + 1);
405       metaData[i][4] = new Integer JavaDoc(type);
406       metaData[i][5] = columnNames[i];
407       int precision = getPrecision(type);
408       metaData[i][6] = new Integer JavaDoc(precision);
409       metaData[i][7] = new Integer JavaDoc(0);
410       metaData[i][8] = Utilities.getBooleanValue(false);
411       metaData[i][9] = new Integer JavaDoc(2); //ResultSetMetaData.columnNullableUnknown
412
metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] :
413           type == Datatypes.SMALLINT ? new Integer JavaDoc(Datatypes.SHORTSIZE) :
414           new Integer JavaDoc(Datatypes.INTSIZE);
415     }
416     TempColumnCharacteristics cc = new TempColumnCharacteristics(metaData,
417         columnNames);
418     TempRecordSetBuffer rs = new TempRecordSetBuffer(data, cc);
419     return rs;
420   }
421
422   private int getColumnTypeForProcedureColumns(int index) throws Exception JavaDoc {
423     switch (index) {
424       case 1:
425         return Datatypes.VARCHAR;
426       case 2:
427         return Datatypes.VARCHAR;
428       case 3:
429         return Datatypes.VARCHAR;
430       case 4:
431         return Datatypes.VARCHAR;
432       case 5:
433         return Datatypes.SMALLINT;
434       case 6:
435         return Datatypes.SMALLINT;
436       case 7:
437         return Datatypes.VARCHAR;
438       case 8:
439         return Datatypes.INTEGER;
440       case 9:
441         return Datatypes.INTEGER;
442       case 10:
443         return Datatypes.SMALLINT;
444       case 11:
445         return Datatypes.SMALLINT;
446       case 12:
447         return Datatypes.SMALLINT;
448       case 13:
449         return Datatypes.VARCHAR;
450       default:
451         DException dex = new DException("DSE504", null);
452         throw dex;
453     }
454   }
455
456   public Object JavaDoc getSQLColumns(Object JavaDoc conObj, String JavaDoc catalog, String JavaDoc schema,
457                               String JavaDoc tableName, String JavaDoc columnName) throws
458       Exception JavaDoc {
459     _Connection con0 = (_Connection)conObj;
460    String JavaDoc query = DatabaseProperties.getColumnsQuery(catalog, schema,
461         tableName, columnName);
462     _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
463         executeQuery(query, 0, 0);
464     _RecordSetBuffer rs = getTempBufferForgetSQLColumns(iter);
465     return rs.getIterator();
466   }
467
468   private _RecordSetBuffer getTempBufferForgetSQLColumns(_SelectIterator iter) throws
469       Exception JavaDoc {
470     String JavaDoc[] columnNames = {
471         "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME",
472         "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH",
473         "DECIMAL_DIGITS", "NUM_PREC_RADIX",
474         "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE",
475         "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH",
476         "ORDINAL_POSITION", "IS_NULLABLE"};
477     int columnCount = columnNames.length;
478     int rowCount = iter.getRowCount();
479     iter.beforeFirst();
480     Object JavaDoc[] dataRetrieved = (Object JavaDoc[]) iter.fetchForward(rowCount);
481     _RowReader rowReader = iter.getRowReader();
482     Object JavaDoc[][] data = rowCount == 0 ? null : new Object JavaDoc[rowCount][columnCount];
483     for (int i = 0; i < rowCount; i++) {
484       Object JavaDoc[] objs = new Object JavaDoc[columnNames.length];
485       Object JavaDoc values = dataRetrieved[i];
486       int j = 0;
487       for (; j < 4; j++)
488         objs[j] = rowReader.getObject(COLUMN_OFFSET + j, values);
489       objs[5] = rowReader.getObject(COLUMN_OFFSET + 4, values);
490       objs[4] = new Short JavaDoc( (short) Utilities.
491                           getCorrespondingSqlTypeOfDatabaseType(Utilities.
492           getDataBaseType( (String JavaDoc) objs[5])));
493       Object JavaDoc characterLengthObj = rowReader.getObject(COLUMN_OFFSET + 8, values);
494       int characterLength = characterLengthObj == null ? 0 :
495           characterLengthObj.hashCode();
496       Integer JavaDoc i12 = (Integer JavaDoc) rowReader.getObject(COLUMN_OFFSET + 12, values);
497       Integer JavaDoc i13 = (Integer JavaDoc) rowReader.getObject(COLUMN_OFFSET + 13, values);
498       Integer JavaDoc i14 = (Integer JavaDoc) rowReader.getObject(COLUMN_OFFSET + 14, values);
499       objs[6] = new Integer JavaDoc(getColumnSize(characterLength,
500                                           i12 == null ? 0 : i12.intValue(),
501                                           i13 == null ? 0 : i13.intValue(),
502                                           i14 == null ? 0 : i14.intValue()));
503       objs[7] = null; //buffer length
504
objs[8] = rowReader.getObject(COLUMN_OFFSET + 5, values); //decimal digits
505
objs[9] = rowReader.getObject(COLUMN_OFFSET + 6, values); //decimal precision
506
objs[12] = rowReader.getObject(COLUMN_OFFSET + 7, values);
507       objs[13] = new Integer JavaDoc( ( (Short JavaDoc) objs[4]).intValue()); //sqldatatype
508
objs[14] = new Integer JavaDoc(0); //record.getColumnValue(13);//sqlDatatimesub
509
objs[15] = rowReader.getObject(COLUMN_OFFSET + 9, values); //char octet length
510
objs[11] = "null"; //remarks
511
objs[16] = rowReader.getObject(COLUMN_OFFSET + 10, values); //ordinal Position
512
objs[17] = rowReader.getObject(COLUMN_OFFSET + 11, values); //nullability
513
objs[10] = new Integer JavaDoc(getNullablility( (String JavaDoc) objs[17])); //isnullable
514
data[i] = objs;
515     }
516     Object JavaDoc[][] metaData = new Object JavaDoc[columnCount][11];
517     for (int i = 0; i < columnNames.length; i++) {
518       metaData[i][0] = null;
519       metaData[i][1] = null;
520       metaData[i][2] = null;
521       metaData[i][3] = columnNames[i];
522       int type = getColumnTypeForColumns(i + 1);
523       metaData[i][4] = new Integer JavaDoc(type);
524       metaData[i][5] = columnNames[i];
525       int precision = getPrecision(type);
526       metaData[i][6] = new Integer JavaDoc(precision);
527       metaData[i][7] = new Integer JavaDoc(0);
528       metaData[i][8] = Utilities.getBooleanValue(false);
529       metaData[i][9] = new Integer JavaDoc(2); //ResultSetMetaData.columnNullableUnknown
530
metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] :
531           type == Datatypes.SMALLINT ? new Integer JavaDoc(Datatypes.SHORTSIZE) :
532           new Integer JavaDoc(Datatypes.INTSIZE);
533     }
534     TempColumnCharacteristics cc = new TempColumnCharacteristics(metaData,
535         columnNames);
536     TempRecordSetBuffer rs = new TempRecordSetBuffer(data, cc);
537     return rs;
538   }
539
540   private int getColumnTypeForColumns(int index) throws Exception JavaDoc {
541     switch (index) {
542       case 1:
543         return Datatypes.VARCHAR;
544       case 2:
545         return Datatypes.VARCHAR;
546       case 3:
547         return Datatypes.VARCHAR;
548       case 4:
549         return Datatypes.VARCHAR;
550       case 5:
551         return Datatypes.SMALLINT;
552       case 6:
553         return Datatypes.VARCHAR;
554       case 7:
555         return Datatypes.INTEGER;
556       case 8:
557         return Datatypes.INTEGER;
558       case 9:
559         return Datatypes.INTEGER;
560       case 10:
561         return Datatypes.INTEGER;
562       case 11:
563         return Datatypes.INTEGER;
564       case 12:
565         return Datatypes.VARCHAR;
566       case 13:
567         return Datatypes.VARCHAR;
568       case 14:
569         return Datatypes.INTEGER;
570       case 15:
571         return Datatypes.INTEGER;
572       case 16:
573         return Datatypes.INTEGER;
574       case 17:
575         return Datatypes.INTEGER;
576       case 18:
577         return Datatypes.VARCHAR;
578       default:
579         DException dex = new DException("DSE504", null);
580         throw dex;
581     }
582   }
583
584   private int getColumnSize(int charLength, int numPrecision,
585                             int datePrecision, int intervalPrecision) {
586     return charLength != 0 ? charLength
587         : numPrecision != 0 ? numPrecision
588         : datePrecision != 0 ? datePrecision
589         : intervalPrecision;
590   }
591
592   private int getNullablility(String JavaDoc nullable) {
593     if (nullable.equalsIgnoreCase("yes"))
594       return 1; //columnNullable;
595
if (nullable.equalsIgnoreCase("no"))
596       return 0; //columnNoNulls;
597
return 2; //columnNullableUnknown;
598
}
599
600   private int getDeferrability(String JavaDoc deferrability, String JavaDoc initiallyDeferrable) {
601     if (deferrability.equalsIgnoreCase("no"))
602       return 7; //importedKeyNotDeferrable;
603
return initiallyDeferrable.equalsIgnoreCase("yes") ?
604         6 //importedKeyInitiallyDeferred
605
: 5; //importedKeyInitiallyImmediate;
606
}
607
608   private int getUpdateDeleteRule(String JavaDoc OnUpdateDelete) {
609     if (OnUpdateDelete.equalsIgnoreCase("no action"))
610       return 3; //importedKeyNoAction;
611
if (OnUpdateDelete.equalsIgnoreCase("cascade"))
612       return 0; //importedKeyCascade;
613
if (OnUpdateDelete.equalsIgnoreCase("set null"))
614       return 2; //importedKeySetDefault;
615
if (OnUpdateDelete.equalsIgnoreCase("restrict"))
616       return 1; //;importedKeyRestrict;
617
return 4; //importedKeySetDefault;
618
}
619
620   public Object JavaDoc getSQLStatics(Object JavaDoc conObj, String JavaDoc catalog, String JavaDoc schema,
621                               String JavaDoc tableName, boolean bol1, boolean bol2) throws
622       Exception JavaDoc {
623     _Connection con0 = (_Connection)conObj;
624   String JavaDoc query = DatabaseProperties.getIndexInfoQuery(catalog, schema,
625         tableName, bol1, bol2);
626     _SelectIterator iter = (_SelectIterator) con0.getSystemConnection().
627         executeQuery(query, 0, 0);
628     _RecordSetBuffer rs = getTempBufferForSQLStatics(iter);
629     return rs.getIterator();
630   }
631
632   private _RecordSetBuffer getTempBufferForSQLStatics(_SelectIterator iter) throws
633       Exception JavaDoc {
634     String JavaDoc[] columnNames = new String JavaDoc[] {
635         "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "NON_UNIQUE",
636         "INDEX_QUALIFIER", "INDEX_NAME", "TYPE", "ORDINAL_POSITION",
637         "COLUMN_NAME",
638         "ASC_OR_DESC", "CARDINALITY", "PAGES", "FILTER_CONDITION"};
639     int columnCount = columnNames.length;
640     int rowCount = iter.getRowCount();
641
642     iter.beforeFirst();
643     Object JavaDoc[] dataRetrieved = (Object JavaDoc[]) iter.fetchForward(rowCount);
644     _RowReader rowReader = iter.getRowReader();
645     Object JavaDoc[][] data = rowCount == 0 ? null : new Object JavaDoc[rowCount][columnCount];
646     for (int i = 0; i < rowCount; i++) {
647       Object JavaDoc values = dataRetrieved[i];
648       Object JavaDoc[] objs1 = new Object JavaDoc[13];
649       int j = 0;
650       for (; j < 3; j++)
651         objs1[j] = rowReader.getObject(COLUMN_OFFSET + j, values);
652       objs1[j++] = new Short JavaDoc("1");
653       objs1[j++] = null;
654       objs1[j++] = rowReader.getObject(COLUMN_OFFSET + 3, values);
655       objs1[j++] = new Short JavaDoc("3"); //tableIndexOther
656
objs1[j++] = new Short JavaDoc( ( (Integer JavaDoc) rowReader.getObject(
657           COLUMN_OFFSET + 4, values)).shortValue());
658       objs1[j++] = rowReader.getObject(COLUMN_OFFSET + 5, values);
659       objs1[j++] = rowReader.getObject(COLUMN_OFFSET +
660                                        6, values).equals(Boolean.TRUE) ? "A" :
661           "D";
662       objs1[j++] = null;
663       objs1[j++] = null;
664       objs1[j++] = null;
665       data[i] = objs1;
666     }
667     Object JavaDoc[][] metaData = new Object JavaDoc[columnCount][11];
668     for (int i = 0; i < columnCount; i++) {
669       metaData[i][0] = null;
670       metaData[i][1] = null;
671       metaData[i][2] = null;
672       metaData[i][3] = columnNames[i];
673       int type = getColumnTypeForIndexInfo(i + 1);
674       metaData[i][4] = new Integer JavaDoc(type);
675       metaData[i][5] = columnNames[i];
676       int precision = getPrecision(type);
677       metaData[i][6] = new Integer JavaDoc(precision);
678       metaData[i][7] = new Integer JavaDoc(0);
679       metaData[i][8] = Utilities.getBooleanValue(false);
680       metaData[i][9] = new Integer JavaDoc(2); //ResultSetMetaData.columnNullableUnknown
681
metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] :
682           type == Datatypes.SMALLINT ? new Integer JavaDoc(Datatypes.SHORTSIZE) :
683           new Integer JavaDoc(Datatypes.INTSIZE);
684     }
685     TempColumnCharacteristics cc = new TempColumnCharacteristics(metaData,
686         columnNames);
687     TempRecordSetBuffer rs = new TempRecordSetBuffer(data, cc);
688     return rs;
689   }
690
691   private int getColumnTypeForIndexInfo(int index) throws DException {
692     switch (index) {
693       case 1:
694         return Datatypes.VARCHAR;
695       case 2:
696         return Datatypes.VARCHAR;
697       case 3:
698         return Datatypes.VARCHAR;
699       case 4:
700         return Datatypes.SMALLINT;
701       case 5:
702         return Datatypes.VARCHAR;
703       case 6:
704         return Datatypes.VARCHAR;
705       case 7:
706         return Datatypes.SMALLINT;
707       case 8:
708         return Datatypes.SMALLINT;
709       case 9:
710         return Datatypes.VARCHAR;
711       case 10:
712         return Datatypes.VARCHAR;
713       case 11:
714         return Datatypes.INTEGER;
715       case 12:
716         return Datatypes.INTEGER;
717       case 13:
718         return Datatypes.VARCHAR;
719       default:
720         DException dex = new DException("DSE504", null);
721         throw dex;
722     }
723   }
724
725   public Object JavaDoc getSQLTypeInfo(int datatype) throws Exception JavaDoc {
726     try {
727       String JavaDoc[] columnNames = new String JavaDoc[] {
728           "TYPE_NAME", "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREFIX",
729           "LITERAL_SUFFIX", "CREATE_PARAMS", "NULLABLE", "CASE_SENSITIVE",
730           "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE",
731           "AUTO_UNIQUE_VALUE",
732           "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE",
733           "SQL_DATETIME_SUB", "NUM_PREC_RADIX", "INTERVAL_PRECISION"};
734       Object JavaDoc[][] typeInfo = getTypeInfoData(datatype);
735       int columnCount = columnNames.length;
736       Object JavaDoc[][] data = new Object JavaDoc[typeInfo.length][columnCount];
737       for (int i = 0, size = typeInfo.length; i < size; i++) {
738         Object JavaDoc[] currentTypeInfo = new Object JavaDoc[typeInfo[i].length + 2];
739         System.arraycopy(typeInfo[i], 0, currentTypeInfo, 0, typeInfo[i].length);
740         currentTypeInfo[columnCount - 1] = new Short JavaDoc("0");
741         data[i] = currentTypeInfo;
742       }
743       Object JavaDoc[][] metaData = new Object JavaDoc[columnCount][11];
744       for (int i = 0; i < columnCount; i++) {
745         metaData[i][0] = null;
746         metaData[i][1] = null;
747         metaData[i][2] = null;
748         metaData[i][3] = columnNames[i];
749         int type = getColumnTypeForTypeInfo(i + 1);
750         metaData[i][4] = new Integer JavaDoc(type);
751         metaData[i][5] = columnNames[i];
752         int precision = getPrecision(type);
753         metaData[i][6] = new Integer JavaDoc(precision);
754         metaData[i][7] = new Integer JavaDoc(0);
755         metaData[i][8] = Utilities.getBooleanValue(false);
756         metaData[i][9] = new Integer JavaDoc(2); //ResultSetMetaData.columnNullableUnknown
757
metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] :
758             type == Datatypes.SMALLINT ? new Integer JavaDoc(Datatypes.SHORTSIZE) :
759             new Integer JavaDoc(Datatypes.INTSIZE);
760       }
761       TempColumnCharacteristics cc = new TempColumnCharacteristics(metaData,
762           columnNames);
763       TempRecordSetBuffer rs = new TempRecordSetBuffer(data, cc);
764       return rs.getIterator();
765     }
766     catch (DException dse) {
767       throw dse;
768     }
769   }
770
771   private int getColumnTypeForTypeInfo(int index) throws DException {
772     switch (index) {
773       case 1:
774         return Datatypes.VARCHAR;
775       case 2:
776         return Datatypes.SMALLINT;
777       case 3:
778         return Datatypes.INTEGER;
779       case 4:
780         return Datatypes.VARCHAR;
781       case 5:
782         return Datatypes.VARCHAR;
783       case 6:
784         return Datatypes.VARCHAR;
785       case 7:
786         return Datatypes.SMALLINT;
787       case 8:
788         return Datatypes.SMALLINT;
789       case 9:
790         return Datatypes.SMALLINT;
791       case 10:
792         return Datatypes.SMALLINT;
793       case 11:
794         return Datatypes.SMALLINT;
795       case 12:
796         return Datatypes.SMALLINT;
797       case 13:
798         return Datatypes.VARCHAR;
799       case 14:
800         return Datatypes.SMALLINT;
801       case 15:
802         return Datatypes.SMALLINT;
803       case 16:
804         return Datatypes.SMALLINT;
805       case 17:
806         return Datatypes.SMALLINT;
807       case 18:
808         return Datatypes.INTEGER;
809       case 19:
810         return Datatypes.SMALLINT;
811       default:
812         DException dex = new DException("DSE504", null);
813         throw dex;
814     }
815   }
816
817
818  private static Object JavaDoc[][] getTypeInfoData(int dataType){
819    switch (dataType){
820      case Types.CHAR :
821         return new Object JavaDoc[][]{
822             {"character",new Short JavaDoc(""+Types.CHAR),new Integer JavaDoc(4192),"\'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.CHAR),null,null},
823             {"char",new Short JavaDoc(""+Types.CHAR),new Integer JavaDoc(4192),"\'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.CHAR),null,null},
824        };
825     case Types.VARCHAR :
826         return new Object JavaDoc[][]{
827             {"character varying",new Short JavaDoc(""+Types.VARCHAR),new Integer JavaDoc(4192),"\'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARCHAR),null,null},
828             {"char varying",new Short JavaDoc(""+Types.VARCHAR),new Integer JavaDoc(4192),"\'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARCHAR),null,null},
829             {"varchar",new Short JavaDoc(""+Types.VARCHAR),new Integer JavaDoc(4192),"\'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARCHAR),null,null},
830          };
831     case Types.CLOB :
832         return new Object JavaDoc[][]{
833                {"character large object",new Short JavaDoc(""+Types.CLOB),new Integer JavaDoc(1073741823),"\'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("1"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.CLOB),null,null},
834                {"char large object",new Short JavaDoc(""+Types.CLOB),new Integer JavaDoc(1073741823),"\'","\'","max length",new Short JavaDoc("1"), new Short JavaDoc("1"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.CLOB),null,null},
835                {"clob",new Short JavaDoc(""+Types.CLOB),new Integer JavaDoc(1073741823),"\'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("1"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.CLOB),null,null},
836             };
837     case Types.BLOB :
838        return new Object JavaDoc[][]{
839            {"binary large object",new Short JavaDoc(""+Types.BLOB),new Integer JavaDoc(1073741823),"X'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("1"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.BLOB),null,null},
840            {"blob",new Short JavaDoc(""+Types.BLOB),new Integer JavaDoc(1073741823),"X'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("1"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.BLOB),null,null},
841         };
842     case Types.BINARY :
843          return new Object JavaDoc[][]{
844              {"bit",new Short JavaDoc(""+Types.BINARY),new Integer JavaDoc(4192),"B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc("" + Types.BINARY),null,null},
845              {"binary",new Short JavaDoc(""+Types.BINARY),new Integer JavaDoc(4192),"B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc("" + Types.BINARY),null,null},
846           };
847
848     case Types.VARBINARY :
849          return new Object JavaDoc[][]{
850              {"bit varying",new Short JavaDoc(""+Types.VARBINARY),new Integer JavaDoc(4192),"B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARBINARY),null,null},
851              {"varbinary",new Short JavaDoc(""+Types.VARBINARY),new Integer JavaDoc(4192),"B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARBINARY),null,null},
852           };
853     case Types.NUMERIC :
854          return new Object JavaDoc[][]{
855              {"numeric",new Short JavaDoc(""+Types.NUMERIC),new Integer JavaDoc(28),null,null,"precision,scale",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("28"),new Integer JavaDoc(""+Types.NUMERIC),null,new Integer JavaDoc(10)},
856           };
857     case Types.DECIMAL :
858          return new Object JavaDoc[][]{
859              {"decimal",new Short JavaDoc(""+Types.DECIMAL),new Integer JavaDoc(28),null,null,"precision,scale",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("28"),new Integer JavaDoc(""+Types.DECIMAL),null,new Integer JavaDoc(10)},
860              {"dec",new Short JavaDoc(""+Types.DECIMAL),new Integer JavaDoc(28),null,null,"precision,scale",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("28"),new Integer JavaDoc(""+Types.DECIMAL),null,new Integer JavaDoc(10)},
861           };
862     case Types.INTEGER :
863          return new Object JavaDoc[][]{
864              {"int",new Short JavaDoc(""+Types.INTEGER),new Integer JavaDoc(10),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.INTEGER),null,new Integer JavaDoc(10)},
865              {"integer",new Short JavaDoc(""+Types.INTEGER),new Integer JavaDoc(10),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.INTEGER),null,new Integer JavaDoc(10)},
866           };
867     case Types.BIGINT :
868          return new Object JavaDoc[][]{
869              {"long",new Short JavaDoc(""+Types.BIGINT),new Integer JavaDoc(19),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.BIGINT),null,new Integer JavaDoc(10)},
870              {"bigint",new Short JavaDoc(""+Types.BIGINT),new Integer JavaDoc(19),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.BIGINT),null,new Integer JavaDoc(10)},
871           };
872     case Types.SMALLINT :
873          return new Object JavaDoc[][]{
874              {"smallint",new Short JavaDoc(""+Types.SMALLINT),new Integer JavaDoc(5),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.SMALLINT),null,new Integer JavaDoc(10)},
875           };
876     case Types.FLOAT :
877          return new Object JavaDoc[][]{
878              {"float",new Short JavaDoc(""+Types.FLOAT),new Integer JavaDoc(15),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.FLOAT),null,new Integer JavaDoc(10)},
879           };
880     case Types.REAL :
881          return new Object JavaDoc[][]{
882              {"real",new Short JavaDoc(""+Types.REAL),new Integer JavaDoc(7),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.REAL),null,new Integer JavaDoc(10)},
883           };
884     case Types.DOUBLE :
885          return new Object JavaDoc[][]{
886              {"double precision",new Short JavaDoc(""+Types.DOUBLE),new Integer JavaDoc(15),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.DOUBLE),null,new Integer JavaDoc(10)},
887           };
888     case Types.BIT :
889          return new Object JavaDoc[][]{
890              {"boolean",new Short JavaDoc(""+Types.BIT),new Integer JavaDoc(1),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.BIT),null,null},
891           };
892     case Types.DATE :
893          return new Object JavaDoc[][]{
894              {"date",new Short JavaDoc(""+Types.DATE),new Integer JavaDoc(10),"DATE '","\'",null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(91),new Integer JavaDoc(""+Types.DATE),null},
895           };
896     case Types.TIME :
897          return new Object JavaDoc[][]{
898              {"time",new Short JavaDoc(""+Types.TIME),new Integer JavaDoc(9),"TIME '","\'","timeprecision",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(92),new Integer JavaDoc(""+Types.TIME),null},
899           };
900     case Types.TIMESTAMP :
901          return new Object JavaDoc[][]{
902              {"timeStamp",new Short JavaDoc(""+Types.TIMESTAMP),new Integer JavaDoc(9),"TIMESTAMP '","\'","timestampprecision",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(93),new Integer JavaDoc(""+Types.TIMESTAMP),null},
903           };
904     case Types.LONGVARBINARY :
905          return new Object JavaDoc[][]{
906              {"long varbinary" , new Short JavaDoc(""+Types.LONGVARBINARY) , new Integer JavaDoc(1073741823), "B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.LONGVARBINARY),null,null} ,
907           };
908     case Types.JAVA_OBJECT :
909          return new Object JavaDoc[][]{
910              {"long varbinary" , new Short JavaDoc(""+Types.LONGVARBINARY) , new Integer JavaDoc(1073741823), "B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.LONGVARBINARY),null,null} ,
911           };
912     case Types.OTHER :
913          return new Object JavaDoc[][]{
914              {"long varbinary" , new Short JavaDoc(""+Types.LONGVARBINARY) , new Integer JavaDoc(1073741823), "B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.LONGVARBINARY),null,null} ,
915           };
916     case Types.LONGVARCHAR :
917          return new Object JavaDoc[][]{
918              {"long varchar" , new Short JavaDoc( ""+Types.LONGVARCHAR) , new Integer JavaDoc(1073741823), "\'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.LONGVARCHAR),null,null}
919           };
920     case Types.TINYINT :
921          return new Object JavaDoc[][]{
922              {"tinyint" , new Short JavaDoc(""+Types.TINYINT) , new Integer JavaDoc(5),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.TINYINT),null,new Integer JavaDoc(10)},
923              {"byte" , new Short JavaDoc(""+Types.TINYINT) , new Integer JavaDoc(5),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.TINYINT),null,new Integer JavaDoc(10)},
924           };
925     case Types.NULL :
926          return getTypeInfoData();
927    }
928    return null;
929  }
930
931  private static Object JavaDoc[][] getTypeInfoData(){
932    return new Object JavaDoc[][]{
933        {"CHARACTER",new Short JavaDoc(""+Types.CHAR),new Integer JavaDoc(4192),"\'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.CHAR),null,null},
934             {"CHAR",new Short JavaDoc(""+Types.CHAR),new Integer JavaDoc(4192),"\'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.CHAR),null,null},
935             {"CHARACTER VARYING",new Short JavaDoc(""+Types.VARCHAR),new Integer JavaDoc(4192),"\'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARCHAR),null,null},
936             {"CHAR VARYING",new Short JavaDoc(""+Types.VARCHAR),new Integer JavaDoc(4192),"\'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARCHAR),null,null},
937             {"VARCHAR",new Short JavaDoc(""+Types.VARCHAR),new Integer JavaDoc(4192),"\'","\'","max length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARCHAR),null,null},
938              {"BIT",new Short JavaDoc(""+Types.BINARY),new Integer JavaDoc(4192),"B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc("" + Types.BINARY),null,null},
939              {"BINARY",new Short JavaDoc(""+Types.BINARY),new Integer JavaDoc(4192),"B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc("" + Types.BINARY),null,null},
940              {"BIT VARYING",new Short JavaDoc(""+Types.VARBINARY),new Integer JavaDoc(4192),"B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARBINARY),null,null},
941              {"VARBINARY",new Short JavaDoc(""+Types.VARBINARY),new Integer JavaDoc(4192),"B'| X'","\'","length",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,null,null,new Integer JavaDoc(""+Types.VARBINARY),null,null},
942              {"NUMERIC",new Short JavaDoc(""+Types.NUMERIC),new Integer JavaDoc(28),null,null,"precision,scale",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("28"),new Integer JavaDoc(""+Types.NUMERIC),null,new Integer JavaDoc(10)},
943              {"DECIMAL",new Short JavaDoc(""+Types.DECIMAL),new Integer JavaDoc(28),null,null,"precision,scale",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("28"),new Integer JavaDoc(""+Types.DECIMAL),null,new Integer JavaDoc(10)},
944              {"DEC",new Short JavaDoc(""+Types.DECIMAL),new Integer JavaDoc(28),null,null,"precision,scale",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("28"),new Integer JavaDoc(""+Types.DECIMAL),null,new Integer JavaDoc(10)},
945              {"INT",new Short JavaDoc(""+Types.INTEGER),new Integer JavaDoc(10),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.INTEGER),null,new Integer JavaDoc(10)},
946              {"INTEGER",new Short JavaDoc(""+Types.INTEGER),new Integer JavaDoc(10),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.INTEGER),null,new Integer JavaDoc(10)},
947              {"LONG",new Short JavaDoc(""+Types.BIGINT),new Integer JavaDoc(19),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.BIGINT),null,new Integer JavaDoc(10)},
948              {"BIGINT",new Short JavaDoc(""+Types.BIGINT),new Integer JavaDoc(19),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.BIGINT),null,new Integer JavaDoc(10)},
949              {"SMALLINT",new Short JavaDoc(""+Types.SMALLINT),new Integer JavaDoc(5),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.SMALLINT),null,new Integer JavaDoc(10)},
950              {"FLOAT",new Short JavaDoc(""+Types.FLOAT),new Integer JavaDoc(15),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.FLOAT),null,new Integer JavaDoc(10)},
951              {"REAL",new Short JavaDoc(""+Types.REAL),new Integer JavaDoc(7),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.REAL),null,new Integer JavaDoc(10)},
952              {"DOUBLE PRECISION",new Short JavaDoc(""+Types.DOUBLE),new Integer JavaDoc(15),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.DOUBLE),null,new Integer JavaDoc(10)},
953              {"BOOLEAN",new Short JavaDoc(""+Types.BIT),new Integer JavaDoc(0),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.BIT),null,null},
954              {"DATE",new Short JavaDoc(""+Types.DATE),new Integer JavaDoc(10),"DATE '","\'",null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(91),new Integer JavaDoc(""+Types.DATE),null},
955              {"TIME",new Short JavaDoc(""+Types.TIME),new Integer JavaDoc(9),"TIME '","\'","timeprecision",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(92),new Integer JavaDoc(""+Types.TIME),null},
956              {"TIMESTAMP",new Short JavaDoc(""+Types.TIMESTAMP),new Integer JavaDoc(9),"TIMESTAMP '","\'","timestampprecision",new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("3"),null,new Short JavaDoc("0"),null,null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(93),new Integer JavaDoc(""+Types.TIMESTAMP),null},
957              {"TINYINT" , new Short JavaDoc(""+Types.TINYINT) , new Integer JavaDoc(3),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.TINYINT),null,new Integer JavaDoc(10)},
958              {"BYTE" , new Short JavaDoc(""+Types.TINYINT) , new Integer JavaDoc(3),null,null,null,new Short JavaDoc("1"),new Short JavaDoc("0"),new Short JavaDoc("2"),new Short JavaDoc("0"),new Short JavaDoc("0"),new Short JavaDoc("0"),null,new Short JavaDoc("0"),new Short JavaDoc("0"),new Integer JavaDoc(""+Types.TINYINT),null,new Integer JavaDoc(10)},
959           };
960  }
961
962
963  public static int getPrecision(int type) throws DException {
964     switch (type) {
965        case Datatypes.SMALLINT:
966           return Datatypes.SHORT_PRECISION;
967         case Datatypes.INTEGER:
968            return Datatypes.INT_PRECISION;
969        case Datatypes.VARCHAR:
970           return 1024; //value == null ? return 0: return ((String)value).length;
971
}
972     return 0;
973
974  }
975 /*
976  public static void main(String[] args) {
977     String tableType = "'TABLE', 'VIEW'";
978     String[] type = null;
979     if (tableType != null && !tableType.equals("")) {
980       StringTokenizer stk = new StringTokenizer(tableType, ",");
981       int count = stk.countTokens();
982       type = new String[count];
983       for (int i = 0; i < count; i++) {
984         /**
985          * remove the "'" if present
986          * */
/*
987         type[i] = stk.nextToken().trim();
988         if (type[i].startsWith("'")) {
989           type[i] = type[i].substring(1, type[i].length() - 1);
990         }
991       }
992     }
993  }
994      */

995 }
996
Popular Tags