1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 package com.sun.star.sdbcx.comp.postgresql;
23 
24 import java.util.ArrayList;
25 
26 import org.apache.openoffice.comp.sdbc.dbtools.util.ORowSetValue;
27 
28 import com.sun.star.lib.uno.helper.WeakBase;
29 import com.sun.star.sdbc.DataType;
30 import com.sun.star.sdbc.SQLException;
31 import com.sun.star.sdbc.XConnection;
32 import com.sun.star.sdbc.XDatabaseMetaData;
33 import com.sun.star.sdbc.XResultSet;
34 import com.sun.star.sdbc.XRow;
35 import com.sun.star.uno.UnoRuntime;
36 
37 public class PostgresqlDatabaseMetadata extends WeakBase implements XDatabaseMetaData {
38     private XDatabaseMetaData impl;
39     private XConnection connection;
40     private String url;
41 
PostgresqlDatabaseMetadata(XDatabaseMetaData impl, XConnection connection, String url)42     public PostgresqlDatabaseMetadata(XDatabaseMetaData impl, XConnection connection, String url) {
43         this.impl = impl;
44         this.connection = connection;
45         this.url = url;
46     }
47 
allProceduresAreCallable()48     public boolean allProceduresAreCallable() throws SQLException {
49         return impl.allProceduresAreCallable();
50     }
51 
allTablesAreSelectable()52     public boolean allTablesAreSelectable() throws SQLException {
53         return impl.allTablesAreSelectable();
54     }
55 
dataDefinitionCausesTransactionCommit()56     public boolean dataDefinitionCausesTransactionCommit() throws SQLException {
57         return impl.dataDefinitionCausesTransactionCommit();
58     }
59 
dataDefinitionIgnoredInTransactions()60     public boolean dataDefinitionIgnoredInTransactions() throws SQLException {
61         return impl.dataDefinitionIgnoredInTransactions();
62     }
63 
deletesAreDetected(int arg0)64     public boolean deletesAreDetected(int arg0) throws SQLException {
65         return impl.deletesAreDetected(arg0);
66     }
67 
doesMaxRowSizeIncludeBlobs()68     public boolean doesMaxRowSizeIncludeBlobs() throws SQLException {
69         return impl.doesMaxRowSizeIncludeBlobs();
70     }
71 
getBestRowIdentifier(Object arg0, String arg1, String arg2, int arg3, boolean arg4)72     public XResultSet getBestRowIdentifier(Object arg0, String arg1, String arg2, int arg3, boolean arg4) throws SQLException {
73         return new PostgresqlResultSet(impl.getBestRowIdentifier(arg0, arg1, arg2, arg3, arg4), null);
74     }
75 
getCatalogSeparator()76     public String getCatalogSeparator() throws SQLException {
77         return impl.getCatalogSeparator();
78     }
79 
getCatalogTerm()80     public String getCatalogTerm() throws SQLException {
81         return impl.getCatalogTerm();
82     }
83 
getCatalogs()84     public XResultSet getCatalogs() throws SQLException {
85         return new PostgresqlResultSet(impl.getCatalogs(), null);
86     }
87 
getColumnPrivileges(Object arg0, String arg1, String arg2, String arg3)88     public XResultSet getColumnPrivileges(Object arg0, String arg1, String arg2, String arg3) throws SQLException {
89         return new PostgresqlResultSet(impl.getColumnPrivileges(arg0, arg1, arg2, arg3), null);
90     }
91 
getColumns(Object arg0, String arg1, String arg2, String arg3)92     public XResultSet getColumns(Object arg0, String arg1, String arg2, String arg3) throws SQLException {
93         XResultSet results = impl.getColumns(arg0, arg1, arg2, arg3);
94         XRow row = UnoRuntime.queryInterface(XRow.class, results);
95         ArrayList<ORowSetValue[]> table = new ArrayList<>();
96         while (results.next()) {
97             String tableCat = row.getString(1);
98             String tableSchem = row.getString(2);
99             String tableName = row.getString(3);
100             String columnName = row.getString(4);
101             short dataType = row.getShort(5);
102             String typeName = row.getString(6);
103             int columnSize = row.getInt(7);
104             int bufferLength = row.getInt(8); // FIXME: is it int?
105             int decimalDigits = row.getInt(9);
106             int numPrecRadix = row.getInt(10);
107             int nullable = row.getInt(11);
108             String remarks = row.getString(12);
109             String columnDef = row.getString(13);
110             int sqlDataType = row.getInt(14);
111             int sqlDateTimeSub = row.getInt(15);
112             int charOctetLength = row.getInt(16);
113             int ordinalPosition = row.getInt(17);
114             String isNullable = row.getString(18);
115 
116             if (dataType == DataType.BIT) {
117                 if (typeName.equals("bool")) {
118                     dataType = DataType.BOOLEAN;
119                 }
120             }
121 
122             ORowSetValue[] rowOut = new ORowSetValue[18];
123             rowOut[0] = new ORowSetValue(tableCat);
124             rowOut[1] = new ORowSetValue(tableSchem);
125             rowOut[2] = new ORowSetValue(tableName);
126             rowOut[3] = new ORowSetValue(columnName);
127             rowOut[4] = new ORowSetValue(dataType);
128             rowOut[5] = new ORowSetValue(typeName);
129             rowOut[6] = new ORowSetValue(columnSize);
130             rowOut[7] = new ORowSetValue(bufferLength);
131             rowOut[8] = new ORowSetValue(decimalDigits);
132             rowOut[9] = new ORowSetValue(numPrecRadix);
133             rowOut[10] = new ORowSetValue(nullable);
134             rowOut[11] = new ORowSetValue(remarks);
135             rowOut[12] = new ORowSetValue(columnDef);
136             rowOut[13] = new ORowSetValue(sqlDataType);
137             rowOut[14] = new ORowSetValue(sqlDateTimeSub);
138             rowOut[15] = new ORowSetValue(charOctetLength);
139             rowOut[16] = new ORowSetValue(ordinalPosition);
140             rowOut[17] = new ORowSetValue(isNullable);
141             table.add(rowOut);
142         }
143         return new PostgresqlDatabaseMetaDataResultSet(results, table);
144     }
145 
getConnection()146     public XConnection getConnection() throws SQLException {
147         return connection;
148     }
149 
getCrossReference(Object arg0, String arg1, String arg2, Object arg3, String arg4, String arg5)150     public XResultSet getCrossReference(Object arg0, String arg1, String arg2, Object arg3, String arg4, String arg5) throws SQLException {
151         return new PostgresqlResultSet(impl.getCrossReference(arg0, arg1, arg2, arg3, arg4, arg5), null);
152     }
153 
getDatabaseProductName()154     public String getDatabaseProductName() throws SQLException {
155         return impl.getDatabaseProductName();
156     }
157 
getDatabaseProductVersion()158     public String getDatabaseProductVersion() throws SQLException {
159         return impl.getDatabaseProductVersion();
160     }
161 
getDefaultTransactionIsolation()162     public int getDefaultTransactionIsolation() throws SQLException {
163         return impl.getDefaultTransactionIsolation();
164     }
165 
getDriverMajorVersion()166     public int getDriverMajorVersion() {
167         return impl.getDriverMajorVersion();
168     }
169 
getDriverMinorVersion()170     public int getDriverMinorVersion() {
171         return impl.getDriverMinorVersion();
172     }
173 
getDriverName()174     public String getDriverName() throws SQLException {
175         return impl.getDriverName();
176     }
177 
getDriverVersion()178     public String getDriverVersion() throws SQLException {
179         return impl.getDriverVersion();
180     }
181 
getExportedKeys(Object arg0, String arg1, String arg2)182     public XResultSet getExportedKeys(Object arg0, String arg1, String arg2) throws SQLException {
183         return new PostgresqlResultSet(impl.getExportedKeys(arg0, arg1, arg2), null);
184     }
185 
getExtraNameCharacters()186     public String getExtraNameCharacters() throws SQLException {
187         return impl.getExtraNameCharacters();
188     }
189 
getIdentifierQuoteString()190     public String getIdentifierQuoteString() throws SQLException {
191         return impl.getIdentifierQuoteString();
192     }
193 
getImportedKeys(Object arg0, String arg1, String arg2)194     public XResultSet getImportedKeys(Object arg0, String arg1, String arg2) throws SQLException {
195         return new PostgresqlResultSet(impl.getImportedKeys(arg0, arg1, arg2), null);
196     }
197 
getIndexInfo(Object arg0, String arg1, String arg2, boolean arg3, boolean arg4)198     public XResultSet getIndexInfo(Object arg0, String arg1, String arg2, boolean arg3, boolean arg4) throws SQLException {
199         return new PostgresqlResultSet(impl.getIndexInfo(arg0, arg1, arg2, arg3, arg4), null);
200     }
201 
getMaxBinaryLiteralLength()202     public int getMaxBinaryLiteralLength() throws SQLException {
203         return impl.getMaxBinaryLiteralLength();
204     }
205 
getMaxCatalogNameLength()206     public int getMaxCatalogNameLength() throws SQLException {
207         return impl.getMaxCatalogNameLength();
208     }
209 
getMaxCharLiteralLength()210     public int getMaxCharLiteralLength() throws SQLException {
211         return impl.getMaxCharLiteralLength();
212     }
213 
getMaxColumnNameLength()214     public int getMaxColumnNameLength() throws SQLException {
215         return impl.getMaxColumnNameLength();
216     }
217 
getMaxColumnsInGroupBy()218     public int getMaxColumnsInGroupBy() throws SQLException {
219         return impl.getMaxColumnsInGroupBy();
220     }
221 
getMaxColumnsInIndex()222     public int getMaxColumnsInIndex() throws SQLException {
223         return impl.getMaxColumnsInIndex();
224     }
225 
getMaxColumnsInOrderBy()226     public int getMaxColumnsInOrderBy() throws SQLException {
227         return impl.getMaxColumnsInOrderBy();
228     }
229 
getMaxColumnsInSelect()230     public int getMaxColumnsInSelect() throws SQLException {
231         return impl.getMaxColumnsInSelect();
232     }
233 
getMaxColumnsInTable()234     public int getMaxColumnsInTable() throws SQLException {
235         return impl.getMaxColumnsInTable();
236     }
237 
getMaxConnections()238     public int getMaxConnections() throws SQLException {
239         return impl.getMaxConnections();
240     }
241 
getMaxCursorNameLength()242     public int getMaxCursorNameLength() throws SQLException {
243         return impl.getMaxCursorNameLength();
244     }
245 
getMaxIndexLength()246     public int getMaxIndexLength() throws SQLException {
247         return impl.getMaxIndexLength();
248     }
249 
getMaxProcedureNameLength()250     public int getMaxProcedureNameLength() throws SQLException {
251         return impl.getMaxProcedureNameLength();
252     }
253 
getMaxRowSize()254     public int getMaxRowSize() throws SQLException {
255         return impl.getMaxRowSize();
256     }
257 
getMaxSchemaNameLength()258     public int getMaxSchemaNameLength() throws SQLException {
259         return impl.getMaxSchemaNameLength();
260     }
261 
getMaxStatementLength()262     public int getMaxStatementLength() throws SQLException {
263         return impl.getMaxStatementLength();
264     }
265 
getMaxStatements()266     public int getMaxStatements() throws SQLException {
267         return impl.getMaxStatements();
268     }
269 
getMaxTableNameLength()270     public int getMaxTableNameLength() throws SQLException {
271         return impl.getMaxTableNameLength();
272     }
273 
getMaxTablesInSelect()274     public int getMaxTablesInSelect() throws SQLException {
275         return impl.getMaxTablesInSelect();
276     }
277 
getMaxUserNameLength()278     public int getMaxUserNameLength() throws SQLException {
279         return impl.getMaxUserNameLength();
280     }
281 
getNumericFunctions()282     public String getNumericFunctions() throws SQLException {
283         return impl.getNumericFunctions();
284     }
285 
getPrimaryKeys(Object arg0, String arg1, String arg2)286     public XResultSet getPrimaryKeys(Object arg0, String arg1, String arg2) throws SQLException {
287         return new PostgresqlResultSet(impl.getPrimaryKeys(arg0, arg1, arg2), null);
288     }
289 
getProcedureColumns(Object arg0, String arg1, String arg2, String arg3)290     public XResultSet getProcedureColumns(Object arg0, String arg1, String arg2, String arg3) throws SQLException {
291         return new PostgresqlResultSet(impl.getProcedureColumns(arg0, arg1, arg2, arg3), null);
292     }
293 
getProcedureTerm()294     public String getProcedureTerm() throws SQLException {
295         return impl.getProcedureTerm();
296     }
297 
getProcedures(Object arg0, String arg1, String arg2)298     public XResultSet getProcedures(Object arg0, String arg1, String arg2) throws SQLException {
299         return new PostgresqlResultSet(impl.getProcedures(arg0, arg1, arg2), null);
300     }
301 
getSQLKeywords()302     public String getSQLKeywords() throws SQLException {
303         return impl.getSQLKeywords();
304     }
305 
getSchemaTerm()306     public String getSchemaTerm() throws SQLException {
307         return impl.getSchemaTerm();
308     }
309 
getSchemas()310     public XResultSet getSchemas() throws SQLException {
311         return new PostgresqlResultSet(impl.getSchemas(), null);
312     }
313 
getSearchStringEscape()314     public String getSearchStringEscape() throws SQLException {
315         return impl.getSearchStringEscape();
316     }
317 
getStringFunctions()318     public String getStringFunctions() throws SQLException {
319         return impl.getStringFunctions();
320     }
321 
getSystemFunctions()322     public String getSystemFunctions() throws SQLException {
323         return impl.getSystemFunctions();
324     }
325 
getTablePrivileges(Object arg0, String arg1, String arg2)326     public XResultSet getTablePrivileges(Object arg0, String arg1, String arg2) throws SQLException {
327         return new PostgresqlResultSet(impl.getTablePrivileges(arg0, arg1, arg2), null);
328     }
329 
getTableTypes()330     public XResultSet getTableTypes() throws SQLException {
331         return new PostgresqlResultSet(impl.getTableTypes(), null);
332     }
333 
getTables(Object arg0, String arg1, String arg2, String[] arg3)334     public XResultSet getTables(Object arg0, String arg1, String arg2, String[] arg3) throws SQLException {
335         return new PostgresqlResultSet(impl.getTables(arg0, arg1, arg2, arg3), null);
336     }
337 
getTimeDateFunctions()338     public String getTimeDateFunctions() throws SQLException {
339         return impl.getTimeDateFunctions();
340     }
341 
getTypeInfo()342     public XResultSet getTypeInfo() throws SQLException {
343         XResultSet results = impl.getTypeInfo();
344         XRow row = UnoRuntime.queryInterface(XRow.class, results);
345         ArrayList<ORowSetValue[]> table = new ArrayList<>();
346         while (results.next()) {
347             String typeName = row.getString(1);
348             short dataType = row.getShort(2);
349             int precision = row.getInt(3);
350             String literalPrefix = row.getString(4);
351             String literalSuffix = row.getString(5);
352             String createParams = row.getString(6);
353             short nullable = row.getShort(7);
354             boolean caseSensitive = row.getBoolean(8);
355             short searchable = row.getShort(9);
356             boolean unsignedAttribute = row.getBoolean(10);
357             boolean fixedPrecScale = row.getBoolean(11);
358             boolean autoIncrement = row.getBoolean(12);
359             String localTypeName = row.getString(13);
360             short minimumScale = row.getShort(14);
361             short maximumScale = row.getShort(15);
362             int sqlDataType = row.getInt(16);
363             int sqlDateTimeSub = row.getInt(17);
364             int numPrecRadix = row.getInt(18);
365 
366             if (dataType == DataType.BIT) {
367                 if (typeName.equals("bit")) {
368                     // but the editor sees multi-bit columns as single bit
369                     // and single bit can't be edited either: syntax error
370                     createParams = "length";
371                 } else if (typeName.equals("bool")) {
372                     dataType = DataType.BOOLEAN;
373                 }
374             }
375             if ((dataType == DataType.CHAR || dataType == DataType.VARCHAR)) {
376                 precision = 10485760;
377                 createParams = "length";
378             }
379 
380             ORowSetValue[] rowOut = new ORowSetValue[18];
381             rowOut[0] = new ORowSetValue(typeName);
382             rowOut[1] = new ORowSetValue(dataType);
383             rowOut[2] = new ORowSetValue(precision);
384             rowOut[3] = new ORowSetValue(literalPrefix);
385             rowOut[4] = new ORowSetValue(literalSuffix);
386             rowOut[5] = new ORowSetValue(createParams);
387             rowOut[6] = new ORowSetValue(nullable);
388             rowOut[7] = new ORowSetValue(caseSensitive);
389             rowOut[8] = new ORowSetValue(searchable);
390             rowOut[9] = new ORowSetValue(unsignedAttribute);
391             rowOut[10] = new ORowSetValue(fixedPrecScale);
392             rowOut[11] = new ORowSetValue(autoIncrement);
393             rowOut[12] = new ORowSetValue(localTypeName);
394             rowOut[13] = new ORowSetValue(minimumScale);
395             rowOut[14] = new ORowSetValue(maximumScale);
396             rowOut[15] = new ORowSetValue(sqlDataType);
397             rowOut[16] = new ORowSetValue(sqlDateTimeSub);
398             rowOut[17] = new ORowSetValue(numPrecRadix);
399             table.add(rowOut);
400             //System.out.println(String.format("type %s, data type %d, SQL type %d, precision %d, createParams %s", typeName, dataType, sqlDataType, precision, createParams));
401         }
402         return new PostgresqlDatabaseMetaDataResultSet(results, table);
403     }
404 
getUDTs(Object arg0, String arg1, String arg2, int[] arg3)405     public XResultSet getUDTs(Object arg0, String arg1, String arg2, int[] arg3) throws SQLException {
406         return new PostgresqlResultSet(impl.getUDTs(arg0, arg1, arg2, arg3), null);
407     }
408 
getURL()409     public String getURL() throws SQLException {
410         return url;
411     }
412 
getUserName()413     public String getUserName() throws SQLException {
414         return impl.getUserName();
415     }
416 
getVersionColumns(Object arg0, String arg1, String arg2)417     public XResultSet getVersionColumns(Object arg0, String arg1, String arg2) throws SQLException {
418         return new PostgresqlResultSet(impl.getVersionColumns(arg0, arg1, arg2), null);
419     }
420 
insertsAreDetected(int arg0)421     public boolean insertsAreDetected(int arg0) throws SQLException {
422         return impl.insertsAreDetected(arg0);
423     }
424 
isCatalogAtStart()425     public boolean isCatalogAtStart() throws SQLException {
426         return impl.isCatalogAtStart();
427     }
428 
isReadOnly()429     public boolean isReadOnly() throws SQLException {
430         return impl.isReadOnly();
431     }
432 
nullPlusNonNullIsNull()433     public boolean nullPlusNonNullIsNull() throws SQLException {
434         return impl.nullPlusNonNullIsNull();
435     }
436 
nullsAreSortedAtEnd()437     public boolean nullsAreSortedAtEnd() throws SQLException {
438         return impl.nullsAreSortedAtEnd();
439     }
440 
nullsAreSortedAtStart()441     public boolean nullsAreSortedAtStart() throws SQLException {
442         return impl.nullsAreSortedAtStart();
443     }
444 
nullsAreSortedHigh()445     public boolean nullsAreSortedHigh() throws SQLException {
446         return impl.nullsAreSortedHigh();
447     }
448 
nullsAreSortedLow()449     public boolean nullsAreSortedLow() throws SQLException {
450         return impl.nullsAreSortedLow();
451     }
452 
othersDeletesAreVisible(int arg0)453     public boolean othersDeletesAreVisible(int arg0) throws SQLException {
454         return impl.othersDeletesAreVisible(arg0);
455     }
456 
othersInsertsAreVisible(int arg0)457     public boolean othersInsertsAreVisible(int arg0) throws SQLException {
458         return impl.othersInsertsAreVisible(arg0);
459     }
460 
othersUpdatesAreVisible(int arg0)461     public boolean othersUpdatesAreVisible(int arg0) throws SQLException {
462         return impl.othersUpdatesAreVisible(arg0);
463     }
464 
ownDeletesAreVisible(int arg0)465     public boolean ownDeletesAreVisible(int arg0) throws SQLException {
466         return impl.ownDeletesAreVisible(arg0);
467     }
468 
ownInsertsAreVisible(int arg0)469     public boolean ownInsertsAreVisible(int arg0) throws SQLException {
470         return impl.ownInsertsAreVisible(arg0);
471     }
472 
ownUpdatesAreVisible(int arg0)473     public boolean ownUpdatesAreVisible(int arg0) throws SQLException {
474         return impl.ownUpdatesAreVisible(arg0);
475     }
476 
storesLowerCaseIdentifiers()477     public boolean storesLowerCaseIdentifiers() throws SQLException {
478         return impl.storesLowerCaseIdentifiers();
479     }
480 
storesLowerCaseQuotedIdentifiers()481     public boolean storesLowerCaseQuotedIdentifiers() throws SQLException {
482         return impl.storesLowerCaseQuotedIdentifiers();
483     }
484 
storesMixedCaseIdentifiers()485     public boolean storesMixedCaseIdentifiers() throws SQLException {
486         return impl.storesMixedCaseIdentifiers();
487     }
488 
storesMixedCaseQuotedIdentifiers()489     public boolean storesMixedCaseQuotedIdentifiers() throws SQLException {
490         return impl.storesMixedCaseQuotedIdentifiers();
491     }
492 
storesUpperCaseIdentifiers()493     public boolean storesUpperCaseIdentifiers() throws SQLException {
494         return impl.storesUpperCaseIdentifiers();
495     }
496 
storesUpperCaseQuotedIdentifiers()497     public boolean storesUpperCaseQuotedIdentifiers() throws SQLException {
498         return impl.storesUpperCaseQuotedIdentifiers();
499     }
500 
supportsANSI92EntryLevelSQL()501     public boolean supportsANSI92EntryLevelSQL() throws SQLException {
502         return impl.supportsANSI92EntryLevelSQL();
503     }
504 
supportsANSI92FullSQL()505     public boolean supportsANSI92FullSQL() throws SQLException {
506         return impl.supportsANSI92FullSQL();
507     }
508 
supportsANSI92IntermediateSQL()509     public boolean supportsANSI92IntermediateSQL() throws SQLException {
510         return impl.supportsANSI92IntermediateSQL();
511     }
512 
supportsAlterTableWithAddColumn()513     public boolean supportsAlterTableWithAddColumn() throws SQLException {
514         return impl.supportsAlterTableWithAddColumn();
515     }
516 
supportsAlterTableWithDropColumn()517     public boolean supportsAlterTableWithDropColumn() throws SQLException {
518         return impl.supportsAlterTableWithDropColumn();
519     }
520 
supportsBatchUpdates()521     public boolean supportsBatchUpdates() throws SQLException {
522         return impl.supportsBatchUpdates();
523     }
524 
supportsCatalogsInDataManipulation()525     public boolean supportsCatalogsInDataManipulation() throws SQLException {
526         return impl.supportsCatalogsInDataManipulation();
527     }
528 
supportsCatalogsInIndexDefinitions()529     public boolean supportsCatalogsInIndexDefinitions() throws SQLException {
530         return impl.supportsCatalogsInIndexDefinitions();
531     }
532 
supportsCatalogsInPrivilegeDefinitions()533     public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException {
534         return impl.supportsCatalogsInPrivilegeDefinitions();
535     }
536 
supportsCatalogsInProcedureCalls()537     public boolean supportsCatalogsInProcedureCalls() throws SQLException {
538         return impl.supportsCatalogsInProcedureCalls();
539     }
540 
supportsCatalogsInTableDefinitions()541     public boolean supportsCatalogsInTableDefinitions() throws SQLException {
542         return impl.supportsCatalogsInTableDefinitions();
543     }
544 
supportsColumnAliasing()545     public boolean supportsColumnAliasing() throws SQLException {
546         return impl.supportsColumnAliasing();
547     }
548 
supportsConvert(int arg0, int arg1)549     public boolean supportsConvert(int arg0, int arg1) throws SQLException {
550         return impl.supportsConvert(arg0, arg1);
551     }
552 
supportsCoreSQLGrammar()553     public boolean supportsCoreSQLGrammar() throws SQLException {
554         return impl.supportsCoreSQLGrammar();
555     }
556 
supportsCorrelatedSubqueries()557     public boolean supportsCorrelatedSubqueries() throws SQLException {
558         return impl.supportsCorrelatedSubqueries();
559     }
560 
supportsDataDefinitionAndDataManipulationTransactions()561     public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException {
562         return impl.supportsDataDefinitionAndDataManipulationTransactions();
563     }
564 
supportsDataManipulationTransactionsOnly()565     public boolean supportsDataManipulationTransactionsOnly() throws SQLException {
566         return impl.supportsDataManipulationTransactionsOnly();
567     }
568 
supportsDifferentTableCorrelationNames()569     public boolean supportsDifferentTableCorrelationNames() throws SQLException {
570         return impl.supportsDifferentTableCorrelationNames();
571     }
572 
supportsExpressionsInOrderBy()573     public boolean supportsExpressionsInOrderBy() throws SQLException {
574         return impl.supportsExpressionsInOrderBy();
575     }
576 
supportsExtendedSQLGrammar()577     public boolean supportsExtendedSQLGrammar() throws SQLException {
578         return impl.supportsExtendedSQLGrammar();
579     }
580 
supportsFullOuterJoins()581     public boolean supportsFullOuterJoins() throws SQLException {
582         return impl.supportsFullOuterJoins();
583     }
584 
supportsGroupBy()585     public boolean supportsGroupBy() throws SQLException {
586         return impl.supportsGroupBy();
587     }
588 
supportsGroupByBeyondSelect()589     public boolean supportsGroupByBeyondSelect() throws SQLException {
590         return impl.supportsGroupByBeyondSelect();
591     }
592 
supportsGroupByUnrelated()593     public boolean supportsGroupByUnrelated() throws SQLException {
594         return impl.supportsGroupByUnrelated();
595     }
596 
supportsIntegrityEnhancementFacility()597     public boolean supportsIntegrityEnhancementFacility() throws SQLException {
598         return impl.supportsIntegrityEnhancementFacility();
599     }
600 
supportsLikeEscapeClause()601     public boolean supportsLikeEscapeClause() throws SQLException {
602         return impl.supportsLikeEscapeClause();
603     }
604 
supportsLimitedOuterJoins()605     public boolean supportsLimitedOuterJoins() throws SQLException {
606         return impl.supportsLimitedOuterJoins();
607     }
608 
supportsMinimumSQLGrammar()609     public boolean supportsMinimumSQLGrammar() throws SQLException {
610         return impl.supportsMinimumSQLGrammar();
611     }
612 
supportsMixedCaseIdentifiers()613     public boolean supportsMixedCaseIdentifiers() throws SQLException {
614         return impl.supportsMixedCaseIdentifiers();
615     }
616 
supportsMixedCaseQuotedIdentifiers()617     public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException {
618         return impl.supportsMixedCaseQuotedIdentifiers();
619     }
620 
supportsMultipleResultSets()621     public boolean supportsMultipleResultSets() throws SQLException {
622         return impl.supportsMultipleResultSets();
623     }
624 
supportsMultipleTransactions()625     public boolean supportsMultipleTransactions() throws SQLException {
626         return impl.supportsMultipleTransactions();
627     }
628 
supportsNonNullableColumns()629     public boolean supportsNonNullableColumns() throws SQLException {
630         return impl.supportsNonNullableColumns();
631     }
632 
supportsOpenCursorsAcrossCommit()633     public boolean supportsOpenCursorsAcrossCommit() throws SQLException {
634         return impl.supportsOpenCursorsAcrossCommit();
635     }
636 
supportsOpenCursorsAcrossRollback()637     public boolean supportsOpenCursorsAcrossRollback() throws SQLException {
638         return impl.supportsOpenCursorsAcrossRollback();
639     }
640 
supportsOpenStatementsAcrossCommit()641     public boolean supportsOpenStatementsAcrossCommit() throws SQLException {
642         return impl.supportsOpenStatementsAcrossCommit();
643     }
644 
supportsOpenStatementsAcrossRollback()645     public boolean supportsOpenStatementsAcrossRollback() throws SQLException {
646         return impl.supportsOpenStatementsAcrossRollback();
647     }
648 
supportsOrderByUnrelated()649     public boolean supportsOrderByUnrelated() throws SQLException {
650         return impl.supportsOrderByUnrelated();
651     }
652 
supportsOuterJoins()653     public boolean supportsOuterJoins() throws SQLException {
654         return impl.supportsOuterJoins();
655     }
656 
supportsPositionedDelete()657     public boolean supportsPositionedDelete() throws SQLException {
658         return impl.supportsPositionedDelete();
659     }
660 
supportsPositionedUpdate()661     public boolean supportsPositionedUpdate() throws SQLException {
662         return impl.supportsPositionedUpdate();
663     }
664 
supportsResultSetConcurrency(int arg0, int arg1)665     public boolean supportsResultSetConcurrency(int arg0, int arg1) throws SQLException {
666         return impl.supportsResultSetConcurrency(arg0, arg1);
667     }
668 
supportsResultSetType(int arg0)669     public boolean supportsResultSetType(int arg0) throws SQLException {
670         return impl.supportsResultSetType(arg0);
671     }
672 
supportsSchemasInDataManipulation()673     public boolean supportsSchemasInDataManipulation() throws SQLException {
674         return impl.supportsSchemasInDataManipulation();
675     }
676 
supportsSchemasInIndexDefinitions()677     public boolean supportsSchemasInIndexDefinitions() throws SQLException {
678         return impl.supportsSchemasInIndexDefinitions();
679     }
680 
supportsSchemasInPrivilegeDefinitions()681     public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException {
682         return impl.supportsSchemasInPrivilegeDefinitions();
683     }
684 
supportsSchemasInProcedureCalls()685     public boolean supportsSchemasInProcedureCalls() throws SQLException {
686         return impl.supportsSchemasInProcedureCalls();
687     }
688 
supportsSchemasInTableDefinitions()689     public boolean supportsSchemasInTableDefinitions() throws SQLException {
690         return impl.supportsSchemasInTableDefinitions();
691     }
692 
supportsSelectForUpdate()693     public boolean supportsSelectForUpdate() throws SQLException {
694         return impl.supportsSelectForUpdate();
695     }
696 
supportsStoredProcedures()697     public boolean supportsStoredProcedures() throws SQLException {
698         return impl.supportsStoredProcedures();
699     }
700 
supportsSubqueriesInComparisons()701     public boolean supportsSubqueriesInComparisons() throws SQLException {
702         return impl.supportsSubqueriesInComparisons();
703     }
704 
supportsSubqueriesInExists()705     public boolean supportsSubqueriesInExists() throws SQLException {
706         return impl.supportsSubqueriesInExists();
707     }
708 
supportsSubqueriesInIns()709     public boolean supportsSubqueriesInIns() throws SQLException {
710         return impl.supportsSubqueriesInIns();
711     }
712 
supportsSubqueriesInQuantifieds()713     public boolean supportsSubqueriesInQuantifieds() throws SQLException {
714         return impl.supportsSubqueriesInQuantifieds();
715     }
716 
supportsTableCorrelationNames()717     public boolean supportsTableCorrelationNames() throws SQLException {
718         return impl.supportsTableCorrelationNames();
719     }
720 
supportsTransactionIsolationLevel(int arg0)721     public boolean supportsTransactionIsolationLevel(int arg0) throws SQLException {
722         return impl.supportsTransactionIsolationLevel(arg0);
723     }
724 
supportsTransactions()725     public boolean supportsTransactions() throws SQLException {
726         return impl.supportsTransactions();
727     }
728 
supportsTypeConversion()729     public boolean supportsTypeConversion() throws SQLException {
730         return impl.supportsTypeConversion();
731     }
732 
supportsUnion()733     public boolean supportsUnion() throws SQLException {
734         return impl.supportsUnion();
735     }
736 
supportsUnionAll()737     public boolean supportsUnionAll() throws SQLException {
738         return impl.supportsUnionAll();
739     }
740 
updatesAreDetected(int arg0)741     public boolean updatesAreDetected(int arg0) throws SQLException {
742         return impl.updatesAreDetected(arg0);
743     }
744 
usesLocalFilePerTable()745     public boolean usesLocalFilePerTable() throws SQLException {
746         return impl.usesLocalFilePerTable();
747     }
748 
usesLocalFiles()749     public boolean usesLocalFiles() throws SQLException {
750         return impl.usesLocalFiles();
751     }
752 }
753