001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.dbcp2; 018 019import java.sql.Connection; 020import java.sql.DatabaseMetaData; 021import java.sql.ResultSet; 022import java.sql.RowIdLifetime; 023import java.sql.SQLException; 024 025/** 026 * <p> 027 * A base delegating implementation of {@link DatabaseMetaData}. 028 * </p> 029 * <p> 030 * Methods that create {@link ResultSet} objects are wrapped to create {@link DelegatingResultSet} objects and the 031 * remaining methods simply call the corresponding method on the "delegate" provided in the constructor. 032 * </p> 033 * 034 * @since 2.0 035 */ 036public class DelegatingDatabaseMetaData implements DatabaseMetaData { 037 038 /** My delegate {@link DatabaseMetaData} */ 039 private final DatabaseMetaData databaseMetaData; 040 041 /** The connection that created me. **/ 042 private final DelegatingConnection<?> connection; 043 044 /** 045 * Constructs a new instance for the given delegating connection and database meta data. 046 * 047 * @param connection 048 * the delegating connection 049 * @param databaseMetaData 050 * the database meta data 051 */ 052 public DelegatingDatabaseMetaData(final DelegatingConnection<?> connection, 053 final DatabaseMetaData databaseMetaData) { 054 super(); 055 this.connection = connection; 056 this.databaseMetaData = databaseMetaData; 057 } 058 059 /** 060 * Gets the underlying database meta data. 061 * 062 * @return The underlying database meta data. 063 */ 064 public DatabaseMetaData getDelegate() { 065 return databaseMetaData; 066 } 067 068 /** 069 * If my underlying {@link ResultSet} is not a {@code DelegatingResultSet}, returns it, otherwise recursively 070 * invokes this method on my delegate. 071 * <p> 072 * Hence this method will return the first delegate that is not a {@code DelegatingResultSet}, or {@code null} when 073 * no non-{@code DelegatingResultSet} delegate can be found by traversing this chain. 074 * </p> 075 * <p> 076 * This method is useful when you may have nested {@code DelegatingResultSet}s, and you want to make sure to obtain 077 * a "genuine" {@link ResultSet}. 078 * </p> 079 * 080 * @return the innermost database meta data. 081 */ 082 public DatabaseMetaData getInnermostDelegate() { 083 DatabaseMetaData m = databaseMetaData; 084 while (m != null && m instanceof DelegatingDatabaseMetaData) { 085 m = ((DelegatingDatabaseMetaData) m).getDelegate(); 086 if (this == m) { 087 return null; 088 } 089 } 090 return m; 091 } 092 093 protected void handleException(final SQLException e) throws SQLException { 094 if (connection != null) { 095 connection.handleException(e); 096 } else { 097 throw e; 098 } 099 } 100 101 @Override 102 public boolean allProceduresAreCallable() throws SQLException { 103 try { 104 return databaseMetaData.allProceduresAreCallable(); 105 } catch (final SQLException e) { 106 handleException(e); 107 return false; 108 } 109 } 110 111 @Override 112 public boolean allTablesAreSelectable() throws SQLException { 113 try { 114 return databaseMetaData.allTablesAreSelectable(); 115 } catch (final SQLException e) { 116 handleException(e); 117 return false; 118 } 119 } 120 121 @Override 122 public boolean dataDefinitionCausesTransactionCommit() throws SQLException { 123 try { 124 return databaseMetaData.dataDefinitionCausesTransactionCommit(); 125 } catch (final SQLException e) { 126 handleException(e); 127 return false; 128 } 129 } 130 131 @Override 132 public boolean dataDefinitionIgnoredInTransactions() throws SQLException { 133 try { 134 return databaseMetaData.dataDefinitionIgnoredInTransactions(); 135 } catch (final SQLException e) { 136 handleException(e); 137 return false; 138 } 139 } 140 141 @Override 142 public boolean deletesAreDetected(final int type) throws SQLException { 143 try { 144 return databaseMetaData.deletesAreDetected(type); 145 } catch (final SQLException e) { 146 handleException(e); 147 return false; 148 } 149 } 150 151 @Override 152 public boolean doesMaxRowSizeIncludeBlobs() throws SQLException { 153 try { 154 return databaseMetaData.doesMaxRowSizeIncludeBlobs(); 155 } catch (final SQLException e) { 156 handleException(e); 157 return false; 158 } 159 } 160 161 @Override 162 public ResultSet getAttributes(final String catalog, final String schemaPattern, final String typeNamePattern, 163 final String attributeNamePattern) throws SQLException { 164 connection.checkOpen(); 165 try { 166 return DelegatingResultSet.wrapResultSet(connection, 167 databaseMetaData.getAttributes(catalog, schemaPattern, typeNamePattern, attributeNamePattern)); 168 } catch (final SQLException e) { 169 handleException(e); 170 throw new AssertionError(); 171 } 172 } 173 174 @Override 175 public ResultSet getBestRowIdentifier(final String catalog, final String schema, final String table, 176 final int scope, final boolean nullable) throws SQLException { 177 connection.checkOpen(); 178 try { 179 return DelegatingResultSet.wrapResultSet(connection, 180 databaseMetaData.getBestRowIdentifier(catalog, schema, table, scope, nullable)); 181 } catch (final SQLException e) { 182 handleException(e); 183 throw new AssertionError(); 184 } 185 } 186 187 @Override 188 public String getCatalogSeparator() throws SQLException { 189 try { 190 return databaseMetaData.getCatalogSeparator(); 191 } catch (final SQLException e) { 192 handleException(e); 193 throw new AssertionError(); 194 } 195 } 196 197 @Override 198 public String getCatalogTerm() throws SQLException { 199 try { 200 return databaseMetaData.getCatalogTerm(); 201 } catch (final SQLException e) { 202 handleException(e); 203 throw new AssertionError(); 204 } 205 } 206 207 @Override 208 public ResultSet getCatalogs() throws SQLException { 209 connection.checkOpen(); 210 try { 211 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getCatalogs()); 212 } catch (final SQLException e) { 213 handleException(e); 214 throw new AssertionError(); 215 } 216 } 217 218 @Override 219 public ResultSet getColumnPrivileges(final String catalog, final String schema, final String table, 220 final String columnNamePattern) throws SQLException { 221 connection.checkOpen(); 222 try { 223 return DelegatingResultSet.wrapResultSet(connection, 224 databaseMetaData.getColumnPrivileges(catalog, schema, table, columnNamePattern)); 225 } catch (final SQLException e) { 226 handleException(e); 227 throw new AssertionError(); 228 } 229 } 230 231 @Override 232 public ResultSet getColumns(final String catalog, final String schemaPattern, final String tableNamePattern, 233 final String columnNamePattern) throws SQLException { 234 connection.checkOpen(); 235 try { 236 return DelegatingResultSet.wrapResultSet(connection, 237 databaseMetaData.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern)); 238 } catch (final SQLException e) { 239 handleException(e); 240 throw new AssertionError(); 241 } 242 } 243 244 @Override 245 public Connection getConnection() throws SQLException { 246 return connection; 247 } 248 249 @Override 250 public ResultSet getCrossReference(final String parentCatalog, final String parentSchema, final String parentTable, 251 final String foreignCatalog, final String foreignSchema, final String foreignTable) throws SQLException { 252 connection.checkOpen(); 253 try { 254 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getCrossReference(parentCatalog, 255 parentSchema, parentTable, foreignCatalog, foreignSchema, foreignTable)); 256 } catch (final SQLException e) { 257 handleException(e); 258 throw new AssertionError(); 259 } 260 } 261 262 @Override 263 public int getDatabaseMajorVersion() throws SQLException { 264 try { 265 return databaseMetaData.getDatabaseMajorVersion(); 266 } catch (final SQLException e) { 267 handleException(e); 268 return 0; 269 } 270 } 271 272 @Override 273 public int getDatabaseMinorVersion() throws SQLException { 274 try { 275 return databaseMetaData.getDatabaseMinorVersion(); 276 } catch (final SQLException e) { 277 handleException(e); 278 return 0; 279 } 280 } 281 282 @Override 283 public String getDatabaseProductName() throws SQLException { 284 try { 285 return databaseMetaData.getDatabaseProductName(); 286 } catch (final SQLException e) { 287 handleException(e); 288 throw new AssertionError(); 289 } 290 } 291 292 @Override 293 public String getDatabaseProductVersion() throws SQLException { 294 try { 295 return databaseMetaData.getDatabaseProductVersion(); 296 } catch (final SQLException e) { 297 handleException(e); 298 throw new AssertionError(); 299 } 300 } 301 302 @Override 303 public int getDefaultTransactionIsolation() throws SQLException { 304 try { 305 return databaseMetaData.getDefaultTransactionIsolation(); 306 } catch (final SQLException e) { 307 handleException(e); 308 return 0; 309 } 310 } 311 312 @Override 313 public int getDriverMajorVersion() { 314 return databaseMetaData.getDriverMajorVersion(); 315 } 316 317 @Override 318 public int getDriverMinorVersion() { 319 return databaseMetaData.getDriverMinorVersion(); 320 } 321 322 @Override 323 public String getDriverName() throws SQLException { 324 try { 325 return databaseMetaData.getDriverName(); 326 } catch (final SQLException e) { 327 handleException(e); 328 throw new AssertionError(); 329 } 330 } 331 332 @Override 333 public String getDriverVersion() throws SQLException { 334 try { 335 return databaseMetaData.getDriverVersion(); 336 } catch (final SQLException e) { 337 handleException(e); 338 throw new AssertionError(); 339 } 340 } 341 342 @Override 343 public ResultSet getExportedKeys(final String catalog, final String schema, final String table) 344 throws SQLException { 345 connection.checkOpen(); 346 try { 347 return DelegatingResultSet.wrapResultSet(connection, 348 databaseMetaData.getExportedKeys(catalog, schema, table)); 349 } catch (final SQLException e) { 350 handleException(e); 351 throw new AssertionError(); 352 } 353 } 354 355 @Override 356 public String getExtraNameCharacters() throws SQLException { 357 try { 358 return databaseMetaData.getExtraNameCharacters(); 359 } catch (final SQLException e) { 360 handleException(e); 361 throw new AssertionError(); 362 } 363 } 364 365 @Override 366 public String getIdentifierQuoteString() throws SQLException { 367 try { 368 return databaseMetaData.getIdentifierQuoteString(); 369 } catch (final SQLException e) { 370 handleException(e); 371 throw new AssertionError(); 372 } 373 } 374 375 @Override 376 public ResultSet getImportedKeys(final String catalog, final String schema, final String table) 377 throws SQLException { 378 connection.checkOpen(); 379 try { 380 return DelegatingResultSet.wrapResultSet(connection, 381 databaseMetaData.getImportedKeys(catalog, schema, table)); 382 } catch (final SQLException e) { 383 handleException(e); 384 throw new AssertionError(); 385 } 386 } 387 388 @Override 389 public ResultSet getIndexInfo(final String catalog, final String schema, final String table, final boolean unique, 390 final boolean approximate) throws SQLException { 391 connection.checkOpen(); 392 try { 393 return DelegatingResultSet.wrapResultSet(connection, 394 databaseMetaData.getIndexInfo(catalog, schema, table, unique, approximate)); 395 } catch (final SQLException e) { 396 handleException(e); 397 throw new AssertionError(); 398 } 399 } 400 401 @Override 402 public int getJDBCMajorVersion() throws SQLException { 403 try { 404 return databaseMetaData.getJDBCMajorVersion(); 405 } catch (final SQLException e) { 406 handleException(e); 407 return 0; 408 } 409 } 410 411 @Override 412 public int getJDBCMinorVersion() throws SQLException { 413 try { 414 return databaseMetaData.getJDBCMinorVersion(); 415 } catch (final SQLException e) { 416 handleException(e); 417 return 0; 418 } 419 } 420 421 @Override 422 public int getMaxBinaryLiteralLength() throws SQLException { 423 try { 424 return databaseMetaData.getMaxBinaryLiteralLength(); 425 } catch (final SQLException e) { 426 handleException(e); 427 return 0; 428 } 429 } 430 431 @Override 432 public int getMaxCatalogNameLength() throws SQLException { 433 try { 434 return databaseMetaData.getMaxCatalogNameLength(); 435 } catch (final SQLException e) { 436 handleException(e); 437 return 0; 438 } 439 } 440 441 @Override 442 public int getMaxCharLiteralLength() throws SQLException { 443 try { 444 return databaseMetaData.getMaxCharLiteralLength(); 445 } catch (final SQLException e) { 446 handleException(e); 447 return 0; 448 } 449 } 450 451 @Override 452 public int getMaxColumnNameLength() throws SQLException { 453 try { 454 return databaseMetaData.getMaxColumnNameLength(); 455 } catch (final SQLException e) { 456 handleException(e); 457 return 0; 458 } 459 } 460 461 @Override 462 public int getMaxColumnsInGroupBy() throws SQLException { 463 try { 464 return databaseMetaData.getMaxColumnsInGroupBy(); 465 } catch (final SQLException e) { 466 handleException(e); 467 return 0; 468 } 469 } 470 471 @Override 472 public int getMaxColumnsInIndex() throws SQLException { 473 try { 474 return databaseMetaData.getMaxColumnsInIndex(); 475 } catch (final SQLException e) { 476 handleException(e); 477 return 0; 478 } 479 } 480 481 @Override 482 public int getMaxColumnsInOrderBy() throws SQLException { 483 try { 484 return databaseMetaData.getMaxColumnsInOrderBy(); 485 } catch (final SQLException e) { 486 handleException(e); 487 return 0; 488 } 489 } 490 491 @Override 492 public int getMaxColumnsInSelect() throws SQLException { 493 try { 494 return databaseMetaData.getMaxColumnsInSelect(); 495 } catch (final SQLException e) { 496 handleException(e); 497 return 0; 498 } 499 } 500 501 @Override 502 public int getMaxColumnsInTable() throws SQLException { 503 try { 504 return databaseMetaData.getMaxColumnsInTable(); 505 } catch (final SQLException e) { 506 handleException(e); 507 return 0; 508 } 509 } 510 511 @Override 512 public int getMaxConnections() throws SQLException { 513 try { 514 return databaseMetaData.getMaxConnections(); 515 } catch (final SQLException e) { 516 handleException(e); 517 return 0; 518 } 519 } 520 521 @Override 522 public int getMaxCursorNameLength() throws SQLException { 523 try { 524 return databaseMetaData.getMaxCursorNameLength(); 525 } catch (final SQLException e) { 526 handleException(e); 527 return 0; 528 } 529 } 530 531 @Override 532 public int getMaxIndexLength() throws SQLException { 533 try { 534 return databaseMetaData.getMaxIndexLength(); 535 } catch (final SQLException e) { 536 handleException(e); 537 return 0; 538 } 539 } 540 541 @Override 542 public int getMaxProcedureNameLength() throws SQLException { 543 try { 544 return databaseMetaData.getMaxProcedureNameLength(); 545 } catch (final SQLException e) { 546 handleException(e); 547 return 0; 548 } 549 } 550 551 @Override 552 public int getMaxRowSize() throws SQLException { 553 try { 554 return databaseMetaData.getMaxRowSize(); 555 } catch (final SQLException e) { 556 handleException(e); 557 return 0; 558 } 559 } 560 561 @Override 562 public int getMaxSchemaNameLength() throws SQLException { 563 try { 564 return databaseMetaData.getMaxSchemaNameLength(); 565 } catch (final SQLException e) { 566 handleException(e); 567 return 0; 568 } 569 } 570 571 @Override 572 public int getMaxStatementLength() throws SQLException { 573 try { 574 return databaseMetaData.getMaxStatementLength(); 575 } catch (final SQLException e) { 576 handleException(e); 577 return 0; 578 } 579 } 580 581 @Override 582 public int getMaxStatements() throws SQLException { 583 try { 584 return databaseMetaData.getMaxStatements(); 585 } catch (final SQLException e) { 586 handleException(e); 587 return 0; 588 } 589 } 590 591 @Override 592 public int getMaxTableNameLength() throws SQLException { 593 try { 594 return databaseMetaData.getMaxTableNameLength(); 595 } catch (final SQLException e) { 596 handleException(e); 597 return 0; 598 } 599 } 600 601 @Override 602 public int getMaxTablesInSelect() throws SQLException { 603 try { 604 return databaseMetaData.getMaxTablesInSelect(); 605 } catch (final SQLException e) { 606 handleException(e); 607 return 0; 608 } 609 } 610 611 @Override 612 public int getMaxUserNameLength() throws SQLException { 613 try { 614 return databaseMetaData.getMaxUserNameLength(); 615 } catch (final SQLException e) { 616 handleException(e); 617 return 0; 618 } 619 } 620 621 @Override 622 public String getNumericFunctions() throws SQLException { 623 try { 624 return databaseMetaData.getNumericFunctions(); 625 } catch (final SQLException e) { 626 handleException(e); 627 throw new AssertionError(); 628 } 629 } 630 631 @Override 632 public ResultSet getPrimaryKeys(final String catalog, final String schema, final String table) throws SQLException { 633 connection.checkOpen(); 634 try { 635 return DelegatingResultSet.wrapResultSet(connection, 636 databaseMetaData.getPrimaryKeys(catalog, schema, table)); 637 } catch (final SQLException e) { 638 handleException(e); 639 throw new AssertionError(); 640 } 641 } 642 643 @Override 644 public ResultSet getProcedureColumns(final String catalog, final String schemaPattern, 645 final String procedureNamePattern, final String columnNamePattern) throws SQLException { 646 connection.checkOpen(); 647 try { 648 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getProcedureColumns(catalog, 649 schemaPattern, procedureNamePattern, columnNamePattern)); 650 } catch (final SQLException e) { 651 handleException(e); 652 throw new AssertionError(); 653 } 654 } 655 656 @Override 657 public String getProcedureTerm() throws SQLException { 658 try { 659 return databaseMetaData.getProcedureTerm(); 660 } catch (final SQLException e) { 661 handleException(e); 662 throw new AssertionError(); 663 } 664 } 665 666 @Override 667 public ResultSet getProcedures(final String catalog, final String schemaPattern, final String procedureNamePattern) 668 throws SQLException { 669 connection.checkOpen(); 670 try { 671 return DelegatingResultSet.wrapResultSet(connection, 672 databaseMetaData.getProcedures(catalog, schemaPattern, procedureNamePattern)); 673 } catch (final SQLException e) { 674 handleException(e); 675 throw new AssertionError(); 676 } 677 } 678 679 @Override 680 public int getResultSetHoldability() throws SQLException { 681 try { 682 return databaseMetaData.getResultSetHoldability(); 683 } catch (final SQLException e) { 684 handleException(e); 685 return 0; 686 } 687 } 688 689 @Override 690 public String getSQLKeywords() throws SQLException { 691 try { 692 return databaseMetaData.getSQLKeywords(); 693 } catch (final SQLException e) { 694 handleException(e); 695 throw new AssertionError(); 696 } 697 } 698 699 @Override 700 public int getSQLStateType() throws SQLException { 701 try { 702 return databaseMetaData.getSQLStateType(); 703 } catch (final SQLException e) { 704 handleException(e); 705 return 0; 706 } 707 } 708 709 @Override 710 public String getSchemaTerm() throws SQLException { 711 try { 712 return databaseMetaData.getSchemaTerm(); 713 } catch (final SQLException e) { 714 handleException(e); 715 throw new AssertionError(); 716 } 717 } 718 719 @Override 720 public ResultSet getSchemas() throws SQLException { 721 connection.checkOpen(); 722 try { 723 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getSchemas()); 724 } catch (final SQLException e) { 725 handleException(e); 726 throw new AssertionError(); 727 } 728 } 729 730 @Override 731 public String getSearchStringEscape() throws SQLException { 732 try { 733 return databaseMetaData.getSearchStringEscape(); 734 } catch (final SQLException e) { 735 handleException(e); 736 throw new AssertionError(); 737 } 738 } 739 740 @Override 741 public String getStringFunctions() throws SQLException { 742 try { 743 return databaseMetaData.getStringFunctions(); 744 } catch (final SQLException e) { 745 handleException(e); 746 throw new AssertionError(); 747 } 748 } 749 750 @Override 751 public ResultSet getSuperTables(final String catalog, final String schemaPattern, final String tableNamePattern) 752 throws SQLException { 753 connection.checkOpen(); 754 try { 755 return DelegatingResultSet.wrapResultSet(connection, 756 databaseMetaData.getSuperTables(catalog, schemaPattern, tableNamePattern)); 757 } catch (final SQLException e) { 758 handleException(e); 759 throw new AssertionError(); 760 } 761 } 762 763 @Override 764 public ResultSet getSuperTypes(final String catalog, final String schemaPattern, final String typeNamePattern) 765 throws SQLException { 766 connection.checkOpen(); 767 try { 768 return DelegatingResultSet.wrapResultSet(connection, 769 databaseMetaData.getSuperTypes(catalog, schemaPattern, typeNamePattern)); 770 } catch (final SQLException e) { 771 handleException(e); 772 throw new AssertionError(); 773 } 774 } 775 776 @Override 777 public String getSystemFunctions() throws SQLException { 778 try { 779 return databaseMetaData.getSystemFunctions(); 780 } catch (final SQLException e) { 781 handleException(e); 782 throw new AssertionError(); 783 } 784 } 785 786 @Override 787 public ResultSet getTablePrivileges(final String catalog, final String schemaPattern, final String tableNamePattern) 788 throws SQLException { 789 connection.checkOpen(); 790 try { 791 return DelegatingResultSet.wrapResultSet(connection, 792 databaseMetaData.getTablePrivileges(catalog, schemaPattern, tableNamePattern)); 793 } catch (final SQLException e) { 794 handleException(e); 795 throw new AssertionError(); 796 } 797 } 798 799 @Override 800 public ResultSet getTableTypes() throws SQLException { 801 connection.checkOpen(); 802 try { 803 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getTableTypes()); 804 } catch (final SQLException e) { 805 handleException(e); 806 throw new AssertionError(); 807 } 808 } 809 810 @Override 811 public ResultSet getTables(final String catalog, final String schemaPattern, final String tableNamePattern, 812 final String[] types) throws SQLException { 813 connection.checkOpen(); 814 try { 815 return DelegatingResultSet.wrapResultSet(connection, 816 databaseMetaData.getTables(catalog, schemaPattern, tableNamePattern, types)); 817 } catch (final SQLException e) { 818 handleException(e); 819 throw new AssertionError(); 820 } 821 } 822 823 @Override 824 public String getTimeDateFunctions() throws SQLException { 825 try { 826 return databaseMetaData.getTimeDateFunctions(); 827 } catch (final SQLException e) { 828 handleException(e); 829 throw new AssertionError(); 830 } 831 } 832 833 @Override 834 public ResultSet getTypeInfo() throws SQLException { 835 connection.checkOpen(); 836 try { 837 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getTypeInfo()); 838 } catch (final SQLException e) { 839 handleException(e); 840 throw new AssertionError(); 841 } 842 } 843 844 @Override 845 public ResultSet getUDTs(final String catalog, final String schemaPattern, final String typeNamePattern, 846 final int[] types) throws SQLException { 847 connection.checkOpen(); 848 try { 849 return DelegatingResultSet.wrapResultSet(connection, 850 databaseMetaData.getUDTs(catalog, schemaPattern, typeNamePattern, types)); 851 } catch (final SQLException e) { 852 handleException(e); 853 throw new AssertionError(); 854 } 855 } 856 857 @Override 858 public String getURL() throws SQLException { 859 try { 860 return databaseMetaData.getURL(); 861 } catch (final SQLException e) { 862 handleException(e); 863 throw new AssertionError(); 864 } 865 } 866 867 @Override 868 public String getUserName() throws SQLException { 869 try { 870 return databaseMetaData.getUserName(); 871 } catch (final SQLException e) { 872 handleException(e); 873 throw new AssertionError(); 874 } 875 } 876 877 @Override 878 public ResultSet getVersionColumns(final String catalog, final String schema, final String table) 879 throws SQLException { 880 connection.checkOpen(); 881 try { 882 return DelegatingResultSet.wrapResultSet(connection, 883 databaseMetaData.getVersionColumns(catalog, schema, table)); 884 } catch (final SQLException e) { 885 handleException(e); 886 throw new AssertionError(); 887 } 888 } 889 890 @Override 891 public boolean insertsAreDetected(final int type) throws SQLException { 892 try { 893 return databaseMetaData.insertsAreDetected(type); 894 } catch (final SQLException e) { 895 handleException(e); 896 return false; 897 } 898 } 899 900 @Override 901 public boolean isCatalogAtStart() throws SQLException { 902 try { 903 return databaseMetaData.isCatalogAtStart(); 904 } catch (final SQLException e) { 905 handleException(e); 906 return false; 907 } 908 } 909 910 @Override 911 public boolean isReadOnly() throws SQLException { 912 try { 913 return databaseMetaData.isReadOnly(); 914 } catch (final SQLException e) { 915 handleException(e); 916 return false; 917 } 918 } 919 920 @Override 921 public boolean locatorsUpdateCopy() throws SQLException { 922 try { 923 return databaseMetaData.locatorsUpdateCopy(); 924 } catch (final SQLException e) { 925 handleException(e); 926 return false; 927 } 928 } 929 930 @Override 931 public boolean nullPlusNonNullIsNull() throws SQLException { 932 try { 933 return databaseMetaData.nullPlusNonNullIsNull(); 934 } catch (final SQLException e) { 935 handleException(e); 936 return false; 937 } 938 } 939 940 @Override 941 public boolean nullsAreSortedAtEnd() throws SQLException { 942 try { 943 return databaseMetaData.nullsAreSortedAtEnd(); 944 } catch (final SQLException e) { 945 handleException(e); 946 return false; 947 } 948 } 949 950 @Override 951 public boolean nullsAreSortedAtStart() throws SQLException { 952 try { 953 return databaseMetaData.nullsAreSortedAtStart(); 954 } catch (final SQLException e) { 955 handleException(e); 956 return false; 957 } 958 } 959 960 @Override 961 public boolean nullsAreSortedHigh() throws SQLException { 962 try { 963 return databaseMetaData.nullsAreSortedHigh(); 964 } catch (final SQLException e) { 965 handleException(e); 966 return false; 967 } 968 } 969 970 @Override 971 public boolean nullsAreSortedLow() throws SQLException { 972 try { 973 return databaseMetaData.nullsAreSortedLow(); 974 } catch (final SQLException e) { 975 handleException(e); 976 return false; 977 } 978 } 979 980 @Override 981 public boolean othersDeletesAreVisible(final int type) throws SQLException { 982 try { 983 return databaseMetaData.othersDeletesAreVisible(type); 984 } catch (final SQLException e) { 985 handleException(e); 986 return false; 987 } 988 } 989 990 @Override 991 public boolean othersInsertsAreVisible(final int type) throws SQLException { 992 try { 993 return databaseMetaData.othersInsertsAreVisible(type); 994 } catch (final SQLException e) { 995 handleException(e); 996 return false; 997 } 998 } 999 1000 @Override 1001 public boolean othersUpdatesAreVisible(final int type) throws SQLException { 1002 try { 1003 return databaseMetaData.othersUpdatesAreVisible(type); 1004 } catch (final SQLException e) { 1005 handleException(e); 1006 return false; 1007 } 1008 } 1009 1010 @Override 1011 public boolean ownDeletesAreVisible(final int type) throws SQLException { 1012 try { 1013 return databaseMetaData.ownDeletesAreVisible(type); 1014 } catch (final SQLException e) { 1015 handleException(e); 1016 return false; 1017 } 1018 } 1019 1020 @Override 1021 public boolean ownInsertsAreVisible(final int type) throws SQLException { 1022 try { 1023 return databaseMetaData.ownInsertsAreVisible(type); 1024 } catch (final SQLException e) { 1025 handleException(e); 1026 return false; 1027 } 1028 } 1029 1030 @Override 1031 public boolean ownUpdatesAreVisible(final int type) throws SQLException { 1032 try { 1033 return databaseMetaData.ownUpdatesAreVisible(type); 1034 } catch (final SQLException e) { 1035 handleException(e); 1036 return false; 1037 } 1038 } 1039 1040 @Override 1041 public boolean storesLowerCaseIdentifiers() throws SQLException { 1042 try { 1043 return databaseMetaData.storesLowerCaseIdentifiers(); 1044 } catch (final SQLException e) { 1045 handleException(e); 1046 return false; 1047 } 1048 } 1049 1050 @Override 1051 public boolean storesLowerCaseQuotedIdentifiers() throws SQLException { 1052 try { 1053 return databaseMetaData.storesLowerCaseQuotedIdentifiers(); 1054 } catch (final SQLException e) { 1055 handleException(e); 1056 return false; 1057 } 1058 } 1059 1060 @Override 1061 public boolean storesMixedCaseIdentifiers() throws SQLException { 1062 try { 1063 return databaseMetaData.storesMixedCaseIdentifiers(); 1064 } catch (final SQLException e) { 1065 handleException(e); 1066 return false; 1067 } 1068 } 1069 1070 @Override 1071 public boolean storesMixedCaseQuotedIdentifiers() throws SQLException { 1072 try { 1073 return databaseMetaData.storesMixedCaseQuotedIdentifiers(); 1074 } catch (final SQLException e) { 1075 handleException(e); 1076 return false; 1077 } 1078 } 1079 1080 @Override 1081 public boolean storesUpperCaseIdentifiers() throws SQLException { 1082 try { 1083 return databaseMetaData.storesUpperCaseIdentifiers(); 1084 } catch (final SQLException e) { 1085 handleException(e); 1086 return false; 1087 } 1088 } 1089 1090 @Override 1091 public boolean storesUpperCaseQuotedIdentifiers() throws SQLException { 1092 try { 1093 return databaseMetaData.storesUpperCaseQuotedIdentifiers(); 1094 } catch (final SQLException e) { 1095 handleException(e); 1096 return false; 1097 } 1098 } 1099 1100 @Override 1101 public boolean supportsANSI92EntryLevelSQL() throws SQLException { 1102 try { 1103 return databaseMetaData.supportsANSI92EntryLevelSQL(); 1104 } catch (final SQLException e) { 1105 handleException(e); 1106 return false; 1107 } 1108 } 1109 1110 @Override 1111 public boolean supportsANSI92FullSQL() throws SQLException { 1112 try { 1113 return databaseMetaData.supportsANSI92FullSQL(); 1114 } catch (final SQLException e) { 1115 handleException(e); 1116 return false; 1117 } 1118 } 1119 1120 @Override 1121 public boolean supportsANSI92IntermediateSQL() throws SQLException { 1122 try { 1123 return databaseMetaData.supportsANSI92IntermediateSQL(); 1124 } catch (final SQLException e) { 1125 handleException(e); 1126 return false; 1127 } 1128 } 1129 1130 @Override 1131 public boolean supportsAlterTableWithAddColumn() throws SQLException { 1132 try { 1133 return databaseMetaData.supportsAlterTableWithAddColumn(); 1134 } catch (final SQLException e) { 1135 handleException(e); 1136 return false; 1137 } 1138 } 1139 1140 @Override 1141 public boolean supportsAlterTableWithDropColumn() throws SQLException { 1142 try { 1143 return databaseMetaData.supportsAlterTableWithDropColumn(); 1144 } catch (final SQLException e) { 1145 handleException(e); 1146 return false; 1147 } 1148 } 1149 1150 @Override 1151 public boolean supportsBatchUpdates() throws SQLException { 1152 try { 1153 return databaseMetaData.supportsBatchUpdates(); 1154 } catch (final SQLException e) { 1155 handleException(e); 1156 return false; 1157 } 1158 } 1159 1160 @Override 1161 public boolean supportsCatalogsInDataManipulation() throws SQLException { 1162 try { 1163 return databaseMetaData.supportsCatalogsInDataManipulation(); 1164 } catch (final SQLException e) { 1165 handleException(e); 1166 return false; 1167 } 1168 } 1169 1170 @Override 1171 public boolean supportsCatalogsInIndexDefinitions() throws SQLException { 1172 try { 1173 return databaseMetaData.supportsCatalogsInIndexDefinitions(); 1174 } catch (final SQLException e) { 1175 handleException(e); 1176 return false; 1177 } 1178 } 1179 1180 @Override 1181 public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException { 1182 try { 1183 return databaseMetaData.supportsCatalogsInPrivilegeDefinitions(); 1184 } catch (final SQLException e) { 1185 handleException(e); 1186 return false; 1187 } 1188 } 1189 1190 @Override 1191 public boolean supportsCatalogsInProcedureCalls() throws SQLException { 1192 try { 1193 return databaseMetaData.supportsCatalogsInProcedureCalls(); 1194 } catch (final SQLException e) { 1195 handleException(e); 1196 return false; 1197 } 1198 } 1199 1200 @Override 1201 public boolean supportsCatalogsInTableDefinitions() throws SQLException { 1202 try { 1203 return databaseMetaData.supportsCatalogsInTableDefinitions(); 1204 } catch (final SQLException e) { 1205 handleException(e); 1206 return false; 1207 } 1208 } 1209 1210 @Override 1211 public boolean supportsColumnAliasing() throws SQLException { 1212 try { 1213 return databaseMetaData.supportsColumnAliasing(); 1214 } catch (final SQLException e) { 1215 handleException(e); 1216 return false; 1217 } 1218 } 1219 1220 @Override 1221 public boolean supportsConvert() throws SQLException { 1222 try { 1223 return databaseMetaData.supportsConvert(); 1224 } catch (final SQLException e) { 1225 handleException(e); 1226 return false; 1227 } 1228 } 1229 1230 @Override 1231 public boolean supportsConvert(final int fromType, final int toType) throws SQLException { 1232 try { 1233 return databaseMetaData.supportsConvert(fromType, toType); 1234 } catch (final SQLException e) { 1235 handleException(e); 1236 return false; 1237 } 1238 } 1239 1240 @Override 1241 public boolean supportsCoreSQLGrammar() throws SQLException { 1242 try { 1243 return databaseMetaData.supportsCoreSQLGrammar(); 1244 } catch (final SQLException e) { 1245 handleException(e); 1246 return false; 1247 } 1248 } 1249 1250 @Override 1251 public boolean supportsCorrelatedSubqueries() throws SQLException { 1252 try { 1253 return databaseMetaData.supportsCorrelatedSubqueries(); 1254 } catch (final SQLException e) { 1255 handleException(e); 1256 return false; 1257 } 1258 } 1259 1260 @Override 1261 public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException { 1262 try { 1263 return databaseMetaData.supportsDataDefinitionAndDataManipulationTransactions(); 1264 } catch (final SQLException e) { 1265 handleException(e); 1266 return false; 1267 } 1268 } 1269 1270 @Override 1271 public boolean supportsDataManipulationTransactionsOnly() throws SQLException { 1272 try { 1273 return databaseMetaData.supportsDataManipulationTransactionsOnly(); 1274 } catch (final SQLException e) { 1275 handleException(e); 1276 return false; 1277 } 1278 } 1279 1280 @Override 1281 public boolean supportsDifferentTableCorrelationNames() throws SQLException { 1282 try { 1283 return databaseMetaData.supportsDifferentTableCorrelationNames(); 1284 } catch (final SQLException e) { 1285 handleException(e); 1286 return false; 1287 } 1288 } 1289 1290 @Override 1291 public boolean supportsExpressionsInOrderBy() throws SQLException { 1292 try { 1293 return databaseMetaData.supportsExpressionsInOrderBy(); 1294 } catch (final SQLException e) { 1295 handleException(e); 1296 return false; 1297 } 1298 } 1299 1300 @Override 1301 public boolean supportsExtendedSQLGrammar() throws SQLException { 1302 try { 1303 return databaseMetaData.supportsExtendedSQLGrammar(); 1304 } catch (final SQLException e) { 1305 handleException(e); 1306 return false; 1307 } 1308 } 1309 1310 @Override 1311 public boolean supportsFullOuterJoins() throws SQLException { 1312 try { 1313 return databaseMetaData.supportsFullOuterJoins(); 1314 } catch (final SQLException e) { 1315 handleException(e); 1316 return false; 1317 } 1318 } 1319 1320 @Override 1321 public boolean supportsGetGeneratedKeys() throws SQLException { 1322 try { 1323 return databaseMetaData.supportsGetGeneratedKeys(); 1324 } catch (final SQLException e) { 1325 handleException(e); 1326 return false; 1327 } 1328 } 1329 1330 @Override 1331 public boolean supportsGroupBy() throws SQLException { 1332 try { 1333 return databaseMetaData.supportsGroupBy(); 1334 } catch (final SQLException e) { 1335 handleException(e); 1336 return false; 1337 } 1338 } 1339 1340 @Override 1341 public boolean supportsGroupByBeyondSelect() throws SQLException { 1342 try { 1343 return databaseMetaData.supportsGroupByBeyondSelect(); 1344 } catch (final SQLException e) { 1345 handleException(e); 1346 return false; 1347 } 1348 } 1349 1350 @Override 1351 public boolean supportsGroupByUnrelated() throws SQLException { 1352 try { 1353 return databaseMetaData.supportsGroupByUnrelated(); 1354 } catch (final SQLException e) { 1355 handleException(e); 1356 return false; 1357 } 1358 } 1359 1360 @Override 1361 public boolean supportsIntegrityEnhancementFacility() throws SQLException { 1362 try { 1363 return databaseMetaData.supportsIntegrityEnhancementFacility(); 1364 } catch (final SQLException e) { 1365 handleException(e); 1366 return false; 1367 } 1368 } 1369 1370 @Override 1371 public boolean supportsLikeEscapeClause() throws SQLException { 1372 try { 1373 return databaseMetaData.supportsLikeEscapeClause(); 1374 } catch (final SQLException e) { 1375 handleException(e); 1376 return false; 1377 } 1378 } 1379 1380 @Override 1381 public boolean supportsLimitedOuterJoins() throws SQLException { 1382 try { 1383 return databaseMetaData.supportsLimitedOuterJoins(); 1384 } catch (final SQLException e) { 1385 handleException(e); 1386 return false; 1387 } 1388 } 1389 1390 @Override 1391 public boolean supportsMinimumSQLGrammar() throws SQLException { 1392 try { 1393 return databaseMetaData.supportsMinimumSQLGrammar(); 1394 } catch (final SQLException e) { 1395 handleException(e); 1396 return false; 1397 } 1398 } 1399 1400 @Override 1401 public boolean supportsMixedCaseIdentifiers() throws SQLException { 1402 try { 1403 return databaseMetaData.supportsMixedCaseIdentifiers(); 1404 } catch (final SQLException e) { 1405 handleException(e); 1406 return false; 1407 } 1408 } 1409 1410 @Override 1411 public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException { 1412 try { 1413 return databaseMetaData.supportsMixedCaseQuotedIdentifiers(); 1414 } catch (final SQLException e) { 1415 handleException(e); 1416 return false; 1417 } 1418 } 1419 1420 @Override 1421 public boolean supportsMultipleOpenResults() throws SQLException { 1422 try { 1423 return databaseMetaData.supportsMultipleOpenResults(); 1424 } catch (final SQLException e) { 1425 handleException(e); 1426 return false; 1427 } 1428 } 1429 1430 @Override 1431 public boolean supportsMultipleResultSets() throws SQLException { 1432 try { 1433 return databaseMetaData.supportsMultipleResultSets(); 1434 } catch (final SQLException e) { 1435 handleException(e); 1436 return false; 1437 } 1438 } 1439 1440 @Override 1441 public boolean supportsMultipleTransactions() throws SQLException { 1442 try { 1443 return databaseMetaData.supportsMultipleTransactions(); 1444 } catch (final SQLException e) { 1445 handleException(e); 1446 return false; 1447 } 1448 } 1449 1450 @Override 1451 public boolean supportsNamedParameters() throws SQLException { 1452 try { 1453 return databaseMetaData.supportsNamedParameters(); 1454 } catch (final SQLException e) { 1455 handleException(e); 1456 return false; 1457 } 1458 } 1459 1460 @Override 1461 public boolean supportsNonNullableColumns() throws SQLException { 1462 try { 1463 return databaseMetaData.supportsNonNullableColumns(); 1464 } catch (final SQLException e) { 1465 handleException(e); 1466 return false; 1467 } 1468 } 1469 1470 @Override 1471 public boolean supportsOpenCursorsAcrossCommit() throws SQLException { 1472 try { 1473 return databaseMetaData.supportsOpenCursorsAcrossCommit(); 1474 } catch (final SQLException e) { 1475 handleException(e); 1476 return false; 1477 } 1478 } 1479 1480 @Override 1481 public boolean supportsOpenCursorsAcrossRollback() throws SQLException { 1482 try { 1483 return databaseMetaData.supportsOpenCursorsAcrossRollback(); 1484 } catch (final SQLException e) { 1485 handleException(e); 1486 return false; 1487 } 1488 } 1489 1490 @Override 1491 public boolean supportsOpenStatementsAcrossCommit() throws SQLException { 1492 try { 1493 return databaseMetaData.supportsOpenStatementsAcrossCommit(); 1494 } catch (final SQLException e) { 1495 handleException(e); 1496 return false; 1497 } 1498 } 1499 1500 @Override 1501 public boolean supportsOpenStatementsAcrossRollback() throws SQLException { 1502 try { 1503 return databaseMetaData.supportsOpenStatementsAcrossRollback(); 1504 } catch (final SQLException e) { 1505 handleException(e); 1506 return false; 1507 } 1508 } 1509 1510 @Override 1511 public boolean supportsOrderByUnrelated() throws SQLException { 1512 try { 1513 return databaseMetaData.supportsOrderByUnrelated(); 1514 } catch (final SQLException e) { 1515 handleException(e); 1516 return false; 1517 } 1518 } 1519 1520 @Override 1521 public boolean supportsOuterJoins() throws SQLException { 1522 try { 1523 return databaseMetaData.supportsOuterJoins(); 1524 } catch (final SQLException e) { 1525 handleException(e); 1526 return false; 1527 } 1528 } 1529 1530 @Override 1531 public boolean supportsPositionedDelete() throws SQLException { 1532 try { 1533 return databaseMetaData.supportsPositionedDelete(); 1534 } catch (final SQLException e) { 1535 handleException(e); 1536 return false; 1537 } 1538 } 1539 1540 @Override 1541 public boolean supportsPositionedUpdate() throws SQLException { 1542 try { 1543 return databaseMetaData.supportsPositionedUpdate(); 1544 } catch (final SQLException e) { 1545 handleException(e); 1546 return false; 1547 } 1548 } 1549 1550 @Override 1551 public boolean supportsResultSetConcurrency(final int type, final int concurrency) throws SQLException { 1552 try { 1553 return databaseMetaData.supportsResultSetConcurrency(type, concurrency); 1554 } catch (final SQLException e) { 1555 handleException(e); 1556 return false; 1557 } 1558 } 1559 1560 @Override 1561 public boolean supportsResultSetHoldability(final int holdability) throws SQLException { 1562 try { 1563 return databaseMetaData.supportsResultSetHoldability(holdability); 1564 } catch (final SQLException e) { 1565 handleException(e); 1566 return false; 1567 } 1568 } 1569 1570 @Override 1571 public boolean supportsResultSetType(final int type) throws SQLException { 1572 try { 1573 return databaseMetaData.supportsResultSetType(type); 1574 } catch (final SQLException e) { 1575 handleException(e); 1576 return false; 1577 } 1578 } 1579 1580 @Override 1581 public boolean supportsSavepoints() throws SQLException { 1582 try { 1583 return databaseMetaData.supportsSavepoints(); 1584 } catch (final SQLException e) { 1585 handleException(e); 1586 return false; 1587 } 1588 } 1589 1590 @Override 1591 public boolean supportsSchemasInDataManipulation() throws SQLException { 1592 try { 1593 return databaseMetaData.supportsSchemasInDataManipulation(); 1594 } catch (final SQLException e) { 1595 handleException(e); 1596 return false; 1597 } 1598 } 1599 1600 @Override 1601 public boolean supportsSchemasInIndexDefinitions() throws SQLException { 1602 try { 1603 return databaseMetaData.supportsSchemasInIndexDefinitions(); 1604 } catch (final SQLException e) { 1605 handleException(e); 1606 return false; 1607 } 1608 } 1609 1610 @Override 1611 public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException { 1612 try { 1613 return databaseMetaData.supportsSchemasInPrivilegeDefinitions(); 1614 } catch (final SQLException e) { 1615 handleException(e); 1616 return false; 1617 } 1618 } 1619 1620 @Override 1621 public boolean supportsSchemasInProcedureCalls() throws SQLException { 1622 try { 1623 return databaseMetaData.supportsSchemasInProcedureCalls(); 1624 } catch (final SQLException e) { 1625 handleException(e); 1626 return false; 1627 } 1628 } 1629 1630 @Override 1631 public boolean supportsSchemasInTableDefinitions() throws SQLException { 1632 try { 1633 return databaseMetaData.supportsSchemasInTableDefinitions(); 1634 } catch (final SQLException e) { 1635 handleException(e); 1636 return false; 1637 } 1638 } 1639 1640 @Override 1641 public boolean supportsSelectForUpdate() throws SQLException { 1642 try { 1643 return databaseMetaData.supportsSelectForUpdate(); 1644 } catch (final SQLException e) { 1645 handleException(e); 1646 return false; 1647 } 1648 } 1649 1650 @Override 1651 public boolean supportsStatementPooling() throws SQLException { 1652 try { 1653 return databaseMetaData.supportsStatementPooling(); 1654 } catch (final SQLException e) { 1655 handleException(e); 1656 return false; 1657 } 1658 } 1659 1660 @Override 1661 public boolean supportsStoredProcedures() throws SQLException { 1662 try { 1663 return databaseMetaData.supportsStoredProcedures(); 1664 } catch (final SQLException e) { 1665 handleException(e); 1666 return false; 1667 } 1668 } 1669 1670 @Override 1671 public boolean supportsSubqueriesInComparisons() throws SQLException { 1672 try { 1673 return databaseMetaData.supportsSubqueriesInComparisons(); 1674 } catch (final SQLException e) { 1675 handleException(e); 1676 return false; 1677 } 1678 } 1679 1680 @Override 1681 public boolean supportsSubqueriesInExists() throws SQLException { 1682 try { 1683 return databaseMetaData.supportsSubqueriesInExists(); 1684 } catch (final SQLException e) { 1685 handleException(e); 1686 return false; 1687 } 1688 } 1689 1690 @Override 1691 public boolean supportsSubqueriesInIns() throws SQLException { 1692 try { 1693 return databaseMetaData.supportsSubqueriesInIns(); 1694 } catch (final SQLException e) { 1695 handleException(e); 1696 return false; 1697 } 1698 } 1699 1700 @Override 1701 public boolean supportsSubqueriesInQuantifieds() throws SQLException { 1702 try { 1703 return databaseMetaData.supportsSubqueriesInQuantifieds(); 1704 } catch (final SQLException e) { 1705 handleException(e); 1706 return false; 1707 } 1708 } 1709 1710 @Override 1711 public boolean supportsTableCorrelationNames() throws SQLException { 1712 try { 1713 return databaseMetaData.supportsTableCorrelationNames(); 1714 } catch (final SQLException e) { 1715 handleException(e); 1716 return false; 1717 } 1718 } 1719 1720 @Override 1721 public boolean supportsTransactionIsolationLevel(final int level) throws SQLException { 1722 try { 1723 return databaseMetaData.supportsTransactionIsolationLevel(level); 1724 } catch (final SQLException e) { 1725 handleException(e); 1726 return false; 1727 } 1728 } 1729 1730 @Override 1731 public boolean supportsTransactions() throws SQLException { 1732 try { 1733 return databaseMetaData.supportsTransactions(); 1734 } catch (final SQLException e) { 1735 handleException(e); 1736 return false; 1737 } 1738 } 1739 1740 @Override 1741 public boolean supportsUnion() throws SQLException { 1742 try { 1743 return databaseMetaData.supportsUnion(); 1744 } catch (final SQLException e) { 1745 handleException(e); 1746 return false; 1747 } 1748 } 1749 1750 @Override 1751 public boolean supportsUnionAll() throws SQLException { 1752 try { 1753 return databaseMetaData.supportsUnionAll(); 1754 } catch (final SQLException e) { 1755 handleException(e); 1756 return false; 1757 } 1758 } 1759 1760 @Override 1761 public boolean updatesAreDetected(final int type) throws SQLException { 1762 try { 1763 return databaseMetaData.updatesAreDetected(type); 1764 } catch (final SQLException e) { 1765 handleException(e); 1766 return false; 1767 } 1768 } 1769 1770 @Override 1771 public boolean usesLocalFilePerTable() throws SQLException { 1772 try { 1773 return databaseMetaData.usesLocalFilePerTable(); 1774 } catch (final SQLException e) { 1775 handleException(e); 1776 return false; 1777 } 1778 } 1779 1780 @Override 1781 public boolean usesLocalFiles() throws SQLException { 1782 try { 1783 return databaseMetaData.usesLocalFiles(); 1784 } catch (final SQLException e) { 1785 handleException(e); 1786 return false; 1787 } 1788 } 1789 1790 /* JDBC_4_ANT_KEY_BEGIN */ 1791 1792 @Override 1793 public boolean isWrapperFor(final Class<?> iface) throws SQLException { 1794 if (iface.isAssignableFrom(getClass())) { 1795 return true; 1796 } else if (iface.isAssignableFrom(databaseMetaData.getClass())) { 1797 return true; 1798 } else { 1799 return databaseMetaData.isWrapperFor(iface); 1800 } 1801 } 1802 1803 @Override 1804 public <T> T unwrap(final Class<T> iface) throws SQLException { 1805 if (iface.isAssignableFrom(getClass())) { 1806 return iface.cast(this); 1807 } else if (iface.isAssignableFrom(databaseMetaData.getClass())) { 1808 return iface.cast(databaseMetaData); 1809 } else { 1810 return databaseMetaData.unwrap(iface); 1811 } 1812 } 1813 1814 @Override 1815 public RowIdLifetime getRowIdLifetime() throws SQLException { 1816 try { 1817 return databaseMetaData.getRowIdLifetime(); 1818 } catch (final SQLException e) { 1819 handleException(e); 1820 throw new AssertionError(); 1821 } 1822 } 1823 1824 @Override 1825 public ResultSet getSchemas(final String catalog, final String schemaPattern) throws SQLException { 1826 connection.checkOpen(); 1827 try { 1828 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getSchemas(catalog, schemaPattern)); 1829 } catch (final SQLException e) { 1830 handleException(e); 1831 throw new AssertionError(); 1832 } 1833 } 1834 1835 @Override 1836 public boolean autoCommitFailureClosesAllResultSets() throws SQLException { 1837 try { 1838 return databaseMetaData.autoCommitFailureClosesAllResultSets(); 1839 } catch (final SQLException e) { 1840 handleException(e); 1841 return false; 1842 } 1843 } 1844 1845 @Override 1846 public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException { 1847 try { 1848 return databaseMetaData.supportsStoredFunctionsUsingCallSyntax(); 1849 } catch (final SQLException e) { 1850 handleException(e); 1851 return false; 1852 } 1853 } 1854 1855 @Override 1856 public ResultSet getClientInfoProperties() throws SQLException { 1857 connection.checkOpen(); 1858 try { 1859 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getClientInfoProperties()); 1860 } catch (final SQLException e) { 1861 handleException(e); 1862 throw new AssertionError(); 1863 } 1864 } 1865 1866 @Override 1867 public ResultSet getFunctions(final String catalog, final String schemaPattern, final String functionNamePattern) 1868 throws SQLException { 1869 connection.checkOpen(); 1870 try { 1871 return DelegatingResultSet.wrapResultSet(connection, 1872 databaseMetaData.getFunctions(catalog, schemaPattern, functionNamePattern)); 1873 } catch (final SQLException e) { 1874 handleException(e); 1875 throw new AssertionError(); 1876 } 1877 } 1878 1879 @Override 1880 public ResultSet getFunctionColumns(final String catalog, final String schemaPattern, 1881 final String functionNamePattern, final String columnNamePattern) throws SQLException { 1882 connection.checkOpen(); 1883 try { 1884 return DelegatingResultSet.wrapResultSet(connection, databaseMetaData.getFunctionColumns(catalog, 1885 schemaPattern, functionNamePattern, columnNamePattern)); 1886 } catch (final SQLException e) { 1887 handleException(e); 1888 throw new AssertionError(); 1889 } 1890 } 1891 1892 /* JDBC_4_ANT_KEY_END */ 1893 1894 @Override 1895 public ResultSet getPseudoColumns(final String catalog, final String schemaPattern, final String tableNamePattern, 1896 final String columnNamePattern) throws SQLException { 1897 connection.checkOpen(); 1898 try { 1899 return DelegatingResultSet.wrapResultSet(connection, 1900 databaseMetaData.getPseudoColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern)); 1901 } catch (final SQLException e) { 1902 handleException(e); 1903 throw new AssertionError(); 1904 } 1905 } 1906 1907 @Override 1908 public boolean generatedKeyAlwaysReturned() throws SQLException { 1909 connection.checkOpen(); 1910 try { 1911 return databaseMetaData.generatedKeyAlwaysReturned(); 1912 } catch (final SQLException e) { 1913 handleException(e); 1914 return false; 1915 } 1916 } 1917}