1 package com.daffodilwoods.daffodildb.odbc; 2 3 import java.sql.Types ; 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 ; 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 ; 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 path){ 26 } 27 public Object getSQLProcedures(Object conObj, String catalog, 28 String schema, String procedureName) throws 29 Exception { 30 _Connection con0 = (_Connection)conObj; 31 String 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 getSQLTablePrivileges(Object conObj, String catalog, 41 String schema, String tableName) throws 42 Exception { 43 _Connection con0 = (_Connection)conObj; 44 String 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 getSQLTables(Object conObj, String catalog, String schema, 54 String tableName, String tableType) throws 55 Exception { 56 _Connection con0 = (_Connection)conObj; 57 String [] type = null; 58 if (tableType != null && tableType.trim().length() > 0) { 59 StringTokenizer stk = new StringTokenizer (tableType, ","); 60 int count = stk.countTokens(); 61 type = new String [count]; 62 for (int i = 0; i < count; i++) { 63 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 query = null; 76 if (isAllCatalog && tableEmptyString && schemaEmptyString) { 77 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 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 95 return getTempBufferForAllTableTypes().getIterator(); 96 } 97 return getTables(con0, catalog, schema, tableName, type); 98 } 99 100 private _RecordSetBufferIterator getTables(_Connection con0, String catalog, 101 String schema, String tableName, 102 String [] type) throws SQLException , 103 DException { 104 String 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 { 115 String [] 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 [] dataRetrieved = (Object []) iter.fetchForward(rowCount); 122 _RowReader rowReader = iter.getRowReader(); 123 Object [][] data = rowCount == 0 ? null : new Object [rowCount][columnCount]; 124 for (int i = 0; i < rowCount; i++) { 125 Object values = (Object []) 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 { 133 String [] 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 [] dataRetrieved = iter.fetchForward(rowCount); 140 _RowReader rowReader = iter.getRowReader(); 141 Object [][] data = rowCount == 0 ? null : new Object [rowCount][columnCount]; 142 for (int i = 0; i < rowCount; i++) { 143 Object values = (Object []) 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 { 150 String [] columnNames = { 151 "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "TABLE_TYPE", 152 "REMARKS"}; 153 int columnCount = columnNames.length; 154 String [] allTableTypes = DatabaseProperties.getTableTypes(); 155 int rowCount = allTableTypes.length; 156 Object [][] data = rowCount == 0 ? null : new Object [rowCount][columnCount]; 157 for (int i = 0; i < rowCount; i++) { 158 data[i][3] = (String ) allTableTypes[i]; ; 159 } 160 return getBufferForSQLTables(columnNames, columnCount, data); 161 } 162 163 private TempRecordSetBuffer getBufferForSQLTables(String [] columnNames, 164 int columnCount, 165 Object [][] data) throws 166 Exception { 167 Object [][] metaData = new Object [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 (type); 175 metaData[i][5] = columnNames[i]; 176 int precision = getPrecision(type); 177 metaData[i][6] = new Integer (precision); 178 metaData[i][7] = new Integer (0); 179 metaData[i][8] = Utilities.getBooleanValue(false); 180 metaData[i][9] = new Integer (2); metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] : 182 type == Datatypes.SMALLINT ? new Integer (Datatypes.SHORTSIZE) : 183 new Integer (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 { 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 getSQLColumnPrivileges(Object conObj, String catalog, 210 String schema, String tableName, 211 String columnName) throws Exception { 212 _Connection con0 = (_Connection)conObj; 213 String 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 getSQLPrimaryKeys(Object conObj, String catalog, 223 String schema, String tableName) throws 224 Exception { 225 _Connection con0 = (_Connection)conObj; 226 String 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 getSQLForeignKeys(Object conObj, String pCatalog, 236 String pSchema, String pTableName, 237 String fCatalog, String fSchema, 238 String fTableName) throws Exception { 239 _Connection con0 = (_Connection)conObj; 240 String 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 { 250 String [] columnNames = new String [] { 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 [] dataRetrieved = (Object []) iter.fetchForward(rowCount); 260 _RowReader rowReader = iter.getRowReader(); 261 Object [][] data = rowCount == 0 ? null : new Object [rowCount][columnCount]; 262 for (int i = 0; i < rowCount; i++) { 263 Object values = dataRetrieved[i]; 264 Object [] objs = new Object [14]; 265 int j = 0; 266 for (; j < 9; j++) 267 objs[j] = rowReader.getObject(COLUMN_OFFSET + j, values); 268 objs[j++] = new Short ( (short) getUpdateDeleteRule( (String ) rowReader. 269 getObject(COLUMN_OFFSET + 9, values))); 270 objs[j++] = new Short ( (short) getUpdateDeleteRule( (String ) 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 ( (short) getDeferrability( (String ) rowReader. 275 getObject(COLUMN_OFFSET + 13, values), 276 (String ) rowReader.getObject(14, values))); 277 data[i] = objs; 278 } 279 Object [][] metaData = new Object [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 (type); 287 metaData[i][5] = columnNames[i]; 288 int precision = getPrecision(type); 289 metaData[i][6] = new Integer (precision); 290 metaData[i][7] = new Integer (0); 291 metaData[i][8] = Utilities.getBooleanValue(false); 292 metaData[i][9] = new Integer (2); metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] : 294 type == Datatypes.SMALLINT ? new Integer (Datatypes.SHORTSIZE) : 295 new Integer (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 { 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 getSQLProcedureColumns(Object conObj, String catalog, 340 String schema, String procedureName, 341 String columnName) throws Exception { 342 _Connection con0 = (_Connection)conObj; 343 String query = DatabaseProperties.getProcedureColumnsQuery(catalog, schema, 344 procedureName, columnName); 345 _SelectIterator iter = null; _RecordSetBuffer rs = getTempBufferForgetSQLProcedureColumns(iter); 347 return rs.getIterator(); 348 } 349 350 private _RecordSetBuffer getTempBufferForgetSQLProcedureColumns( 351 _SelectIterator iter) throws Exception { 352 String [] columnNames = new String [] { 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 [][] dataRetrieved = null; int rowCount = dataRetrieved == null ? 0 : dataRetrieved.length; 360 Object [][] data = rowCount == 0 ? null : new Object [rowCount][columnCount]; 361 362 data = null; 364 397 398 Object [][] metaData = new Object [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 (type); 406 metaData[i][5] = columnNames[i]; 407 int precision = getPrecision(type); 408 metaData[i][6] = new Integer (precision); 409 metaData[i][7] = new Integer (0); 410 metaData[i][8] = Utilities.getBooleanValue(false); 411 metaData[i][9] = new Integer (2); metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] : 413 type == Datatypes.SMALLINT ? new Integer (Datatypes.SHORTSIZE) : 414 new Integer (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 { 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 getSQLColumns(Object conObj, String catalog, String schema, 457 String tableName, String columnName) throws 458 Exception { 459 _Connection con0 = (_Connection)conObj; 460 String 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 { 470 String [] 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 [] dataRetrieved = (Object []) iter.fetchForward(rowCount); 481 _RowReader rowReader = iter.getRowReader(); 482 Object [][] data = rowCount == 0 ? null : new Object [rowCount][columnCount]; 483 for (int i = 0; i < rowCount; i++) { 484 Object [] objs = new Object [columnNames.length]; 485 Object 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 ( (short) Utilities. 491 getCorrespondingSqlTypeOfDatabaseType(Utilities. 492 getDataBaseType( (String ) objs[5]))); 493 Object characterLengthObj = rowReader.getObject(COLUMN_OFFSET + 8, values); 494 int characterLength = characterLengthObj == null ? 0 : 495 characterLengthObj.hashCode(); 496 Integer i12 = (Integer ) rowReader.getObject(COLUMN_OFFSET + 12, values); 497 Integer i13 = (Integer ) rowReader.getObject(COLUMN_OFFSET + 13, values); 498 Integer i14 = (Integer ) rowReader.getObject(COLUMN_OFFSET + 14, values); 499 objs[6] = new Integer (getColumnSize(characterLength, 500 i12 == null ? 0 : i12.intValue(), 501 i13 == null ? 0 : i13.intValue(), 502 i14 == null ? 0 : i14.intValue())); 503 objs[7] = null; objs[8] = rowReader.getObject(COLUMN_OFFSET + 5, values); objs[9] = rowReader.getObject(COLUMN_OFFSET + 6, values); objs[12] = rowReader.getObject(COLUMN_OFFSET + 7, values); 507 objs[13] = new Integer ( ( (Short ) objs[4]).intValue()); objs[14] = new Integer (0); objs[15] = rowReader.getObject(COLUMN_OFFSET + 9, values); objs[11] = "null"; objs[16] = rowReader.getObject(COLUMN_OFFSET + 10, values); objs[17] = rowReader.getObject(COLUMN_OFFSET + 11, values); objs[10] = new Integer (getNullablility( (String ) objs[17])); data[i] = objs; 515 } 516 Object [][] metaData = new Object [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 (type); 524 metaData[i][5] = columnNames[i]; 525 int precision = getPrecision(type); 526 metaData[i][6] = new Integer (precision); 527 metaData[i][7] = new Integer (0); 528 metaData[i][8] = Utilities.getBooleanValue(false); 529 metaData[i][9] = new Integer (2); metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] : 531 type == Datatypes.SMALLINT ? new Integer (Datatypes.SHORTSIZE) : 532 new Integer (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 { 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 nullable) { 593 if (nullable.equalsIgnoreCase("yes")) 594 return 1; if (nullable.equalsIgnoreCase("no")) 596 return 0; return 2; } 599 600 private int getDeferrability(String deferrability, String initiallyDeferrable) { 601 if (deferrability.equalsIgnoreCase("no")) 602 return 7; return initiallyDeferrable.equalsIgnoreCase("yes") ? 604 6 : 5; } 607 608 private int getUpdateDeleteRule(String OnUpdateDelete) { 609 if (OnUpdateDelete.equalsIgnoreCase("no action")) 610 return 3; if (OnUpdateDelete.equalsIgnoreCase("cascade")) 612 return 0; if (OnUpdateDelete.equalsIgnoreCase("set null")) 614 return 2; if (OnUpdateDelete.equalsIgnoreCase("restrict")) 616 return 1; return 4; } 619 620 public Object getSQLStatics(Object conObj, String catalog, String schema, 621 String tableName, boolean bol1, boolean bol2) throws 622 Exception { 623 _Connection con0 = (_Connection)conObj; 624 String 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 { 634 String [] columnNames = new String [] { 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 [] dataRetrieved = (Object []) iter.fetchForward(rowCount); 644 _RowReader rowReader = iter.getRowReader(); 645 Object [][] data = rowCount == 0 ? null : new Object [rowCount][columnCount]; 646 for (int i = 0; i < rowCount; i++) { 647 Object values = dataRetrieved[i]; 648 Object [] objs1 = new Object [13]; 649 int j = 0; 650 for (; j < 3; j++) 651 objs1[j] = rowReader.getObject(COLUMN_OFFSET + j, values); 652 objs1[j++] = new Short ("1"); 653 objs1[j++] = null; 654 objs1[j++] = rowReader.getObject(COLUMN_OFFSET + 3, values); 655 objs1[j++] = new Short ("3"); objs1[j++] = new Short ( ( (Integer ) 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 [][] metaData = new Object [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 (type); 675 metaData[i][5] = columnNames[i]; 676 int precision = getPrecision(type); 677 metaData[i][6] = new Integer (precision); 678 metaData[i][7] = new Integer (0); 679 metaData[i][8] = Utilities.getBooleanValue(false); 680 metaData[i][9] = new Integer (2); metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] : 682 type == Datatypes.SMALLINT ? new Integer (Datatypes.SHORTSIZE) : 683 new Integer (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 getSQLTypeInfo(int datatype) throws Exception { 726 try { 727 String [] columnNames = new String [] { 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 [][] typeInfo = getTypeInfoData(datatype); 735 int columnCount = columnNames.length; 736 Object [][] data = new Object [typeInfo.length][columnCount]; 737 for (int i = 0, size = typeInfo.length; i < size; i++) { 738 Object [] currentTypeInfo = new Object [typeInfo[i].length + 2]; 739 System.arraycopy(typeInfo[i], 0, currentTypeInfo, 0, typeInfo[i].length); 740 currentTypeInfo[columnCount - 1] = new Short ("0"); 741 data[i] = currentTypeInfo; 742 } 743 Object [][] metaData = new Object [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 (type); 751 metaData[i][5] = columnNames[i]; 752 int precision = getPrecision(type); 753 metaData[i][6] = new Integer (precision); 754 metaData[i][7] = new Integer (0); 755 metaData[i][8] = Utilities.getBooleanValue(false); 756 metaData[i][9] = new Integer (2); metaData[i][10] = type == Datatypes.VARCHAR ? metaData[i][6] : 758 type == Datatypes.SMALLINT ? new Integer (Datatypes.SHORTSIZE) : 759 new Integer (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 [][] getTypeInfoData(int dataType){ 819 switch (dataType){ 820 case Types.CHAR : 821 return new Object [][]{ 822 {"character",new Short (""+Types.CHAR),new Integer (4192),"\'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.CHAR),null,null}, 823 {"char",new Short (""+Types.CHAR),new Integer (4192),"\'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.CHAR),null,null}, 824 }; 825 case Types.VARCHAR : 826 return new Object [][]{ 827 {"character varying",new Short (""+Types.VARCHAR),new Integer (4192),"\'","\'","max length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARCHAR),null,null}, 828 {"char varying",new Short (""+Types.VARCHAR),new Integer (4192),"\'","\'","max length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARCHAR),null,null}, 829 {"varchar",new Short (""+Types.VARCHAR),new Integer (4192),"\'","\'","max length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARCHAR),null,null}, 830 }; 831 case Types.CLOB : 832 return new Object [][]{ 833 {"character large object",new Short (""+Types.CLOB),new Integer (1073741823),"\'","\'","max length",new Short ("1"),new Short ("1"),new Short ("0"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.CLOB),null,null}, 834 {"char large object",new Short (""+Types.CLOB),new Integer (1073741823),"\'","\'","max length",new Short ("1"), new Short ("1"),new Short ("0"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.CLOB),null,null}, 835 {"clob",new Short (""+Types.CLOB),new Integer (1073741823),"\'","\'","max length",new Short ("1"),new Short ("1"),new Short ("0"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.CLOB),null,null}, 836 }; 837 case Types.BLOB : 838 return new Object [][]{ 839 {"binary large object",new Short (""+Types.BLOB),new Integer (1073741823),"X'","\'","max length",new Short ("1"),new Short ("1"),new Short ("0"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.BLOB),null,null}, 840 {"blob",new Short (""+Types.BLOB),new Integer (1073741823),"X'","\'","max length",new Short ("1"),new Short ("1"),new Short ("0"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.BLOB),null,null}, 841 }; 842 case Types.BINARY : 843 return new Object [][]{ 844 {"bit",new Short (""+Types.BINARY),new Integer (4192),"B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer ("" + Types.BINARY),null,null}, 845 {"binary",new Short (""+Types.BINARY),new Integer (4192),"B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer ("" + Types.BINARY),null,null}, 846 }; 847 848 case Types.VARBINARY : 849 return new Object [][]{ 850 {"bit varying",new Short (""+Types.VARBINARY),new Integer (4192),"B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARBINARY),null,null}, 851 {"varbinary",new Short (""+Types.VARBINARY),new Integer (4192),"B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARBINARY),null,null}, 852 }; 853 case Types.NUMERIC : 854 return new Object [][]{ 855 {"numeric",new Short (""+Types.NUMERIC),new Integer (28),null,null,"precision,scale",new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("28"),new Integer (""+Types.NUMERIC),null,new Integer (10)}, 856 }; 857 case Types.DECIMAL : 858 return new Object [][]{ 859 {"decimal",new Short (""+Types.DECIMAL),new Integer (28),null,null,"precision,scale",new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("28"),new Integer (""+Types.DECIMAL),null,new Integer (10)}, 860 {"dec",new Short (""+Types.DECIMAL),new Integer (28),null,null,"precision,scale",new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("28"),new Integer (""+Types.DECIMAL),null,new Integer (10)}, 861 }; 862 case Types.INTEGER : 863 return new Object [][]{ 864 {"int",new Short (""+Types.INTEGER),new Integer (10),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.INTEGER),null,new Integer (10)}, 865 {"integer",new Short (""+Types.INTEGER),new Integer (10),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.INTEGER),null,new Integer (10)}, 866 }; 867 case Types.BIGINT : 868 return new Object [][]{ 869 {"long",new Short (""+Types.BIGINT),new Integer (19),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.BIGINT),null,new Integer (10)}, 870 {"bigint",new Short (""+Types.BIGINT),new Integer (19),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.BIGINT),null,new Integer (10)}, 871 }; 872 case Types.SMALLINT : 873 return new Object [][]{ 874 {"smallint",new Short (""+Types.SMALLINT),new Integer (5),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.SMALLINT),null,new Integer (10)}, 875 }; 876 case Types.FLOAT : 877 return new Object [][]{ 878 {"float",new Short (""+Types.FLOAT),new Integer (15),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.FLOAT),null,new Integer (10)}, 879 }; 880 case Types.REAL : 881 return new Object [][]{ 882 {"real",new Short (""+Types.REAL),new Integer (7),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.REAL),null,new Integer (10)}, 883 }; 884 case Types.DOUBLE : 885 return new Object [][]{ 886 {"double precision",new Short (""+Types.DOUBLE),new Integer (15),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.DOUBLE),null,new Integer (10)}, 887 }; 888 case Types.BIT : 889 return new Object [][]{ 890 {"boolean",new Short (""+Types.BIT),new Integer (1),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.BIT),null,null}, 891 }; 892 case Types.DATE : 893 return new Object [][]{ 894 {"date",new Short (""+Types.DATE),new Integer (10),"DATE '","\'",null,new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,new Short ("0"),new Short ("0"),new Integer (91),new Integer (""+Types.DATE),null}, 895 }; 896 case Types.TIME : 897 return new Object [][]{ 898 {"time",new Short (""+Types.TIME),new Integer (9),"TIME '","\'","timeprecision",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,new Short ("0"),new Short ("0"),new Integer (92),new Integer (""+Types.TIME),null}, 899 }; 900 case Types.TIMESTAMP : 901 return new Object [][]{ 902 {"timeStamp",new Short (""+Types.TIMESTAMP),new Integer (9),"TIMESTAMP '","\'","timestampprecision",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,new Short ("0"),new Short ("0"),new Integer (93),new Integer (""+Types.TIMESTAMP),null}, 903 }; 904 case Types.LONGVARBINARY : 905 return new Object [][]{ 906 {"long varbinary" , new Short (""+Types.LONGVARBINARY) , new Integer (1073741823), "B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.LONGVARBINARY),null,null} , 907 }; 908 case Types.JAVA_OBJECT : 909 return new Object [][]{ 910 {"long varbinary" , new Short (""+Types.LONGVARBINARY) , new Integer (1073741823), "B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.LONGVARBINARY),null,null} , 911 }; 912 case Types.OTHER : 913 return new Object [][]{ 914 {"long varbinary" , new Short (""+Types.LONGVARBINARY) , new Integer (1073741823), "B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.LONGVARBINARY),null,null} , 915 }; 916 case Types.LONGVARCHAR : 917 return new Object [][]{ 918 {"long varchar" , new Short ( ""+Types.LONGVARCHAR) , new Integer (1073741823), "\'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.LONGVARCHAR),null,null} 919 }; 920 case Types.TINYINT : 921 return new Object [][]{ 922 {"tinyint" , new Short (""+Types.TINYINT) , new Integer (5),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.TINYINT),null,new Integer (10)}, 923 {"byte" , new Short (""+Types.TINYINT) , new Integer (5),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.TINYINT),null,new Integer (10)}, 924 }; 925 case Types.NULL : 926 return getTypeInfoData(); 927 } 928 return null; 929 } 930 931 private static Object [][] getTypeInfoData(){ 932 return new Object [][]{ 933 {"CHARACTER",new Short (""+Types.CHAR),new Integer (4192),"\'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.CHAR),null,null}, 934 {"CHAR",new Short (""+Types.CHAR),new Integer (4192),"\'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.CHAR),null,null}, 935 {"CHARACTER VARYING",new Short (""+Types.VARCHAR),new Integer (4192),"\'","\'","max length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARCHAR),null,null}, 936 {"CHAR VARYING",new Short (""+Types.VARCHAR),new Integer (4192),"\'","\'","max length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARCHAR),null,null}, 937 {"VARCHAR",new Short (""+Types.VARCHAR),new Integer (4192),"\'","\'","max length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARCHAR),null,null}, 938 {"BIT",new Short (""+Types.BINARY),new Integer (4192),"B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer ("" + Types.BINARY),null,null}, 939 {"BINARY",new Short (""+Types.BINARY),new Integer (4192),"B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer ("" + Types.BINARY),null,null}, 940 {"BIT VARYING",new Short (""+Types.VARBINARY),new Integer (4192),"B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARBINARY),null,null}, 941 {"VARBINARY",new Short (""+Types.VARBINARY),new Integer (4192),"B'| X'","\'","length",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,null,null,new Integer (""+Types.VARBINARY),null,null}, 942 {"NUMERIC",new Short (""+Types.NUMERIC),new Integer (28),null,null,"precision,scale",new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("28"),new Integer (""+Types.NUMERIC),null,new Integer (10)}, 943 {"DECIMAL",new Short (""+Types.DECIMAL),new Integer (28),null,null,"precision,scale",new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("28"),new Integer (""+Types.DECIMAL),null,new Integer (10)}, 944 {"DEC",new Short (""+Types.DECIMAL),new Integer (28),null,null,"precision,scale",new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("28"),new Integer (""+Types.DECIMAL),null,new Integer (10)}, 945 {"INT",new Short (""+Types.INTEGER),new Integer (10),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.INTEGER),null,new Integer (10)}, 946 {"INTEGER",new Short (""+Types.INTEGER),new Integer (10),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.INTEGER),null,new Integer (10)}, 947 {"LONG",new Short (""+Types.BIGINT),new Integer (19),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.BIGINT),null,new Integer (10)}, 948 {"BIGINT",new Short (""+Types.BIGINT),new Integer (19),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.BIGINT),null,new Integer (10)}, 949 {"SMALLINT",new Short (""+Types.SMALLINT),new Integer (5),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.SMALLINT),null,new Integer (10)}, 950 {"FLOAT",new Short (""+Types.FLOAT),new Integer (15),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.FLOAT),null,new Integer (10)}, 951 {"REAL",new Short (""+Types.REAL),new Integer (7),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.REAL),null,new Integer (10)}, 952 {"DOUBLE PRECISION",new Short (""+Types.DOUBLE),new Integer (15),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.DOUBLE),null,new Integer (10)}, 953 {"BOOLEAN",new Short (""+Types.BIT),new Integer (0),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.BIT),null,null}, 954 {"DATE",new Short (""+Types.DATE),new Integer (10),"DATE '","\'",null,new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,new Short ("0"),new Short ("0"),new Integer (91),new Integer (""+Types.DATE),null}, 955 {"TIME",new Short (""+Types.TIME),new Integer (9),"TIME '","\'","timeprecision",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,new Short ("0"),new Short ("0"),new Integer (92),new Integer (""+Types.TIME),null}, 956 {"TIMESTAMP",new Short (""+Types.TIMESTAMP),new Integer (9),"TIMESTAMP '","\'","timestampprecision",new Short ("1"),new Short ("0"),new Short ("3"),null,new Short ("0"),null,null,new Short ("0"),new Short ("0"),new Integer (93),new Integer (""+Types.TIMESTAMP),null}, 957 {"TINYINT" , new Short (""+Types.TINYINT) , new Integer (3),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.TINYINT),null,new Integer (10)}, 958 {"BYTE" , new Short (""+Types.TINYINT) , new Integer (3),null,null,null,new Short ("1"),new Short ("0"),new Short ("2"),new Short ("0"),new Short ("0"),new Short ("0"),null,new Short ("0"),new Short ("0"),new Integer (""+Types.TINYINT),null,new Integer (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; } 972 return 0; 973 974 } 975 995 } 996 | Popular Tags |