xref: /trunk/main/mysqlc/source/mysqlc_databasemetadata.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3 *
4 * Copyright 2008 by Sun Microsystems, Inc.
5 *
6 * OpenOffice.org - a multi-platform office productivity suite
7 *
8 * $RCSfile: mysqlc_databasemetadata.hxx,v $
9 *
10 * $Revision: 1.1.2.3 $
11 *
12 * This file is part of OpenOffice.org.
13 *
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
17 *
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
23 *
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org.  If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
28 ************************************************************************/
29 
30 #ifndef CONNECTIVITY_SDATABASEMETADATA_HXX
31 #define CONNECTIVITY_SDATABASEMETADATA_HXX
32 
33 #include "mysqlc_connection.hxx"
34 
35 #ifndef _COM_SUN_STAR_SDBC_XDATABASEMETADATA_HPP_
36 #include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
37 #endif
38 #ifndef _CPPUHELPER_IMPLBASE1_HXX_
39 #include <cppuhelper/implbase1.hxx>
40 #endif
41 
42 #include <preextstl.h>
43 #include <cppconn/metadata.h>
44 #include <postextstl.h>
45 
46 namespace connectivity
47 {
48     namespace mysqlc
49     {
50         typedef ::com::sun::star::sdbc::SQLException my_SQLException;
51         typedef ::com::sun::star::uno::RuntimeException my_RuntimeException;
52         typedef ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > my_XResultSetRef;
53         using ::com::sun::star::uno::Any;
54         using ::rtl::OUString;
55 
56         //**************************************************************
57         //************ Class: ODatabaseMetaData
58         //**************************************************************
59 
60         typedef ::cppu::WeakImplHelper1< ::com::sun::star::sdbc::XDatabaseMetaData> ODatabaseMetaData_BASE;
61 
62         class ODatabaseMetaData : public ODatabaseMetaData_BASE
63         {
64             OConnection&    m_rConnection;
65             sal_Bool        m_bUseCatalog;
66         protected:
67             sql::DatabaseMetaData * meta;
68             OUString        identifier_quote_string;
69             bool            identifier_quote_string_set;
70 
71         private:
72             OUString impl_getStringMetaData( const sal_Char* _methodName, const ext_std::string& (sql::DatabaseMetaData::*_Method)() );
73             OUString impl_getStringMetaData( const sal_Char* _methodName, ext_std::string (sql::DatabaseMetaData::*_Method)() );
74             OUString impl_getStringMetaData( const sal_Char* _methodName, const sql::SQLString& (sql::DatabaseMetaData::*_Method)() );
75             OUString impl_getStringMetaData( const sal_Char* _methodName, sql::SQLString (sql::DatabaseMetaData::*_Method)() );
76             sal_Int32 impl_getInt32MetaData( const sal_Char* _methodName, unsigned int (sql::DatabaseMetaData::*_Method)() );
77             sal_Bool impl_getBoolMetaData( const sal_Char* _methodName, bool (sql::DatabaseMetaData::*_Method)() );
78             sal_Bool impl_getBoolMetaData( const sal_Char* _methodName, bool (sql::DatabaseMetaData::*_Method)(int), sal_Int32 _arg );
79             sal_Bool impl_getRSTypeMetaData( const sal_Char* _methodName, bool (sql::DatabaseMetaData::*_Method)(int), sal_Int32 _resultSetType );
80 
81         public:
82             inline const OConnection& getOwnConnection() const { return m_rConnection; }
83 
84             ODatabaseMetaData(OConnection& _rCon);
85             virtual ~ODatabaseMetaData();
86 
87             // as I mentioned before this interface is really BIG
88             // XDatabaseMetaData
89             sal_Bool SAL_CALL allProceduresAreCallable()            throw(my_SQLException, my_RuntimeException);
90             sal_Bool SAL_CALL allTablesAreSelectable()              throw(my_SQLException, my_RuntimeException);
91             OUString SAL_CALL getURL()                      throw(my_SQLException, my_RuntimeException);
92             OUString SAL_CALL getUserName()                 throw(my_SQLException, my_RuntimeException);
93             sal_Bool SAL_CALL isReadOnly()                          throw(my_SQLException, my_RuntimeException);
94             sal_Bool SAL_CALL nullsAreSortedHigh()                  throw(my_SQLException, my_RuntimeException);
95             sal_Bool SAL_CALL nullsAreSortedLow()                   throw(my_SQLException, my_RuntimeException);
96             sal_Bool SAL_CALL nullsAreSortedAtStart()               throw(my_SQLException, my_RuntimeException);
97             sal_Bool SAL_CALL nullsAreSortedAtEnd()                 throw(my_SQLException, my_RuntimeException);
98             OUString SAL_CALL getDatabaseProductName()      throw(my_SQLException, my_RuntimeException);
99             OUString SAL_CALL getDatabaseProductVersion()   throw(my_SQLException, my_RuntimeException);
100             OUString SAL_CALL getDriverName()               throw(my_SQLException, my_RuntimeException);
101             OUString SAL_CALL getDriverVersion()                throw(my_SQLException, my_RuntimeException);
102             sal_Int32 SAL_CALL getDriverMajorVersion()              throw(my_RuntimeException);
103             sal_Int32 SAL_CALL getDriverMinorVersion()              throw(my_RuntimeException);
104             sal_Bool SAL_CALL usesLocalFiles()                      throw(my_SQLException, my_RuntimeException);
105             sal_Bool SAL_CALL usesLocalFilePerTable()               throw(my_SQLException, my_RuntimeException);
106             sal_Bool SAL_CALL supportsMixedCaseIdentifiers()        throw(my_SQLException, my_RuntimeException);
107             sal_Bool SAL_CALL storesUpperCaseIdentifiers()          throw(my_SQLException, my_RuntimeException);
108             sal_Bool SAL_CALL storesLowerCaseIdentifiers()          throw(my_SQLException, my_RuntimeException);
109             sal_Bool SAL_CALL storesMixedCaseIdentifiers()          throw(my_SQLException, my_RuntimeException);
110             sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers()  throw(my_SQLException, my_RuntimeException);
111             sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers()    throw(my_SQLException, my_RuntimeException);
112             sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers()    throw(my_SQLException, my_RuntimeException);
113             sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers()    throw(my_SQLException, my_RuntimeException);
114             OUString SAL_CALL getIdentifierQuoteString()    throw(my_SQLException, my_RuntimeException);
115             OUString SAL_CALL getSQLKeywords()              throw(my_SQLException, my_RuntimeException);
116             OUString SAL_CALL getNumericFunctions()         throw(my_SQLException, my_RuntimeException);
117             OUString SAL_CALL getStringFunctions()          throw(my_SQLException, my_RuntimeException);
118             OUString SAL_CALL getSystemFunctions()          throw(my_SQLException, my_RuntimeException);
119             OUString SAL_CALL getTimeDateFunctions()            throw(my_SQLException, my_RuntimeException);
120             OUString SAL_CALL getSearchStringEscape()       throw(my_SQLException, my_RuntimeException);
121             OUString SAL_CALL getExtraNameCharacters()      throw(my_SQLException, my_RuntimeException);
122             sal_Bool SAL_CALL supportsAlterTableWithAddColumn()     throw(my_SQLException, my_RuntimeException);
123             sal_Bool SAL_CALL supportsAlterTableWithDropColumn()    throw(my_SQLException, my_RuntimeException);
124             sal_Bool SAL_CALL supportsColumnAliasing()              throw(my_SQLException, my_RuntimeException);
125             sal_Bool SAL_CALL nullPlusNonNullIsNull()               throw(my_SQLException, my_RuntimeException);
126             sal_Bool SAL_CALL supportsTypeConversion()              throw(my_SQLException, my_RuntimeException);
127             sal_Bool SAL_CALL supportsConvert(sal_Int32 fromType, sal_Int32 toType)
128                                                                     throw(my_SQLException, my_RuntimeException);
129             sal_Bool SAL_CALL supportsTableCorrelationNames()       throw(my_SQLException, my_RuntimeException);
130             sal_Bool SAL_CALL supportsDifferentTableCorrelationNames() throw(my_SQLException, my_RuntimeException);
131             sal_Bool SAL_CALL supportsExpressionsInOrderBy()        throw(my_SQLException, my_RuntimeException);
132             sal_Bool SAL_CALL supportsOrderByUnrelated()            throw(my_SQLException, my_RuntimeException);
133             sal_Bool SAL_CALL supportsGroupBy()                     throw(my_SQLException, my_RuntimeException);
134             sal_Bool SAL_CALL supportsGroupByUnrelated()            throw(my_SQLException, my_RuntimeException);
135             sal_Bool SAL_CALL supportsGroupByBeyondSelect()         throw(my_SQLException, my_RuntimeException);
136             sal_Bool SAL_CALL supportsLikeEscapeClause()            throw(my_SQLException, my_RuntimeException);
137             sal_Bool SAL_CALL supportsMultipleResultSets()          throw(my_SQLException, my_RuntimeException);
138             sal_Bool SAL_CALL supportsMultipleTransactions()        throw(my_SQLException, my_RuntimeException);
139             sal_Bool SAL_CALL supportsNonNullableColumns()          throw(my_SQLException, my_RuntimeException);
140             sal_Bool SAL_CALL supportsMinimumSQLGrammar()           throw(my_SQLException, my_RuntimeException);
141             sal_Bool SAL_CALL supportsCoreSQLGrammar()              throw(my_SQLException, my_RuntimeException);
142             sal_Bool SAL_CALL supportsExtendedSQLGrammar()          throw(my_SQLException, my_RuntimeException);
143             sal_Bool SAL_CALL supportsANSI92EntryLevelSQL()         throw(my_SQLException, my_RuntimeException);
144             sal_Bool SAL_CALL supportsANSI92IntermediateSQL()       throw(my_SQLException, my_RuntimeException);
145             sal_Bool SAL_CALL supportsANSI92FullSQL()               throw(my_SQLException, my_RuntimeException);
146             sal_Bool SAL_CALL supportsIntegrityEnhancementFacility()throw(my_SQLException, my_RuntimeException);
147             sal_Bool SAL_CALL supportsOuterJoins()                  throw(my_SQLException, my_RuntimeException);
148             sal_Bool SAL_CALL supportsFullOuterJoins()              throw(my_SQLException, my_RuntimeException);
149             sal_Bool SAL_CALL supportsLimitedOuterJoins()           throw(my_SQLException, my_RuntimeException);
150             OUString SAL_CALL getSchemaTerm()               throw(my_SQLException, my_RuntimeException);
151             OUString SAL_CALL getProcedureTerm()                throw(my_SQLException, my_RuntimeException);
152             OUString SAL_CALL getCatalogTerm()              throw(my_SQLException, my_RuntimeException);
153             sal_Bool SAL_CALL isCatalogAtStart()                    throw(my_SQLException, my_RuntimeException);
154             OUString SAL_CALL getCatalogSeparator()         throw(my_SQLException, my_RuntimeException);
155             sal_Bool SAL_CALL supportsSchemasInDataManipulation()   throw(my_SQLException, my_RuntimeException);
156             sal_Bool SAL_CALL supportsSchemasInProcedureCalls()     throw(my_SQLException, my_RuntimeException);
157             sal_Bool SAL_CALL supportsSchemasInTableDefinitions()   throw(my_SQLException, my_RuntimeException);
158             sal_Bool SAL_CALL supportsSchemasInIndexDefinitions()   throw(my_SQLException, my_RuntimeException);
159             sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions() throw(my_SQLException, my_RuntimeException);
160             sal_Bool SAL_CALL supportsCatalogsInDataManipulation()  throw(my_SQLException, my_RuntimeException);
161             sal_Bool SAL_CALL supportsCatalogsInProcedureCalls()    throw(my_SQLException, my_RuntimeException);
162             sal_Bool SAL_CALL supportsCatalogsInTableDefinitions()  throw(my_SQLException, my_RuntimeException);
163             sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions()  throw(my_SQLException, my_RuntimeException);
164             sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions() throw(my_SQLException, my_RuntimeException);
165             sal_Bool SAL_CALL supportsPositionedDelete()            throw(my_SQLException, my_RuntimeException);
166             sal_Bool SAL_CALL supportsPositionedUpdate()            throw(my_SQLException, my_RuntimeException);
167             sal_Bool SAL_CALL supportsSelectForUpdate()             throw(my_SQLException, my_RuntimeException);
168             sal_Bool SAL_CALL supportsStoredProcedures()            throw(my_SQLException, my_RuntimeException);
169             sal_Bool SAL_CALL supportsSubqueriesInComparisons()     throw(my_SQLException, my_RuntimeException);
170             sal_Bool SAL_CALL supportsSubqueriesInExists()          throw(my_SQLException, my_RuntimeException);
171             sal_Bool SAL_CALL supportsSubqueriesInIns()             throw(my_SQLException, my_RuntimeException);
172             sal_Bool SAL_CALL supportsSubqueriesInQuantifieds()     throw(my_SQLException, my_RuntimeException);
173             sal_Bool SAL_CALL supportsCorrelatedSubqueries()        throw(my_SQLException, my_RuntimeException);
174             sal_Bool SAL_CALL supportsUnion()                       throw(my_SQLException, my_RuntimeException);
175             sal_Bool SAL_CALL supportsUnionAll()                    throw(my_SQLException, my_RuntimeException);
176             sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit()     throw(my_SQLException, my_RuntimeException);
177             sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback()   throw(my_SQLException, my_RuntimeException);
178             sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit()  throw(my_SQLException, my_RuntimeException);
179             sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback() throw(my_SQLException, my_RuntimeException);
180             sal_Int32 SAL_CALL getMaxBinaryLiteralLength()          throw(my_SQLException, my_RuntimeException);
181             sal_Int32 SAL_CALL getMaxCharLiteralLength()            throw(my_SQLException, my_RuntimeException);
182             sal_Int32 SAL_CALL getMaxColumnNameLength()             throw(my_SQLException, my_RuntimeException);
183             sal_Int32 SAL_CALL getMaxColumnsInGroupBy()             throw(my_SQLException, my_RuntimeException);
184             sal_Int32 SAL_CALL getMaxColumnsInIndex()               throw(my_SQLException, my_RuntimeException);
185             sal_Int32 SAL_CALL getMaxColumnsInOrderBy()             throw(my_SQLException, my_RuntimeException);
186             sal_Int32 SAL_CALL getMaxColumnsInSelect()              throw(my_SQLException, my_RuntimeException);
187             sal_Int32 SAL_CALL getMaxColumnsInTable()               throw(my_SQLException, my_RuntimeException);
188             sal_Int32 SAL_CALL getMaxConnections()                  throw(my_SQLException, my_RuntimeException);
189             sal_Int32 SAL_CALL getMaxCursorNameLength()             throw(my_SQLException, my_RuntimeException);
190             sal_Int32 SAL_CALL getMaxIndexLength()                  throw(my_SQLException, my_RuntimeException);
191             sal_Int32 SAL_CALL getMaxSchemaNameLength()             throw(my_SQLException, my_RuntimeException);
192             sal_Int32 SAL_CALL getMaxProcedureNameLength()          throw(my_SQLException, my_RuntimeException);
193             sal_Int32 SAL_CALL getMaxCatalogNameLength()            throw(my_SQLException, my_RuntimeException);
194             sal_Int32 SAL_CALL getMaxRowSize()                      throw(my_SQLException, my_RuntimeException);
195             sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs()          throw(my_SQLException, my_RuntimeException);
196             sal_Int32 SAL_CALL getMaxStatementLength()              throw(my_SQLException, my_RuntimeException);
197             sal_Int32 SAL_CALL getMaxStatements()                   throw(my_SQLException, my_RuntimeException);
198             sal_Int32 SAL_CALL getMaxTableNameLength()              throw(my_SQLException, my_RuntimeException);
199             sal_Int32 SAL_CALL getMaxTablesInSelect()               throw(my_SQLException, my_RuntimeException);
200             sal_Int32 SAL_CALL getMaxUserNameLength()               throw(my_SQLException, my_RuntimeException);
201             sal_Int32 SAL_CALL getDefaultTransactionIsolation()     throw(my_SQLException, my_RuntimeException);
202             sal_Bool SAL_CALL supportsTransactions()                throw(my_SQLException, my_RuntimeException);
203             sal_Bool SAL_CALL supportsTransactionIsolationLevel(sal_Int32 level)
204                                                                     throw(my_SQLException, my_RuntimeException);
205             sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions()
206                                                                     throw(my_SQLException, my_RuntimeException);
207             sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly()throw(my_SQLException, my_RuntimeException);
208             sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit()   throw(my_SQLException, my_RuntimeException);
209             sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions()     throw(my_SQLException, my_RuntimeException);
210             my_XResultSetRef SAL_CALL getProcedures(const Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern) throw(my_SQLException, my_RuntimeException);
211             my_XResultSetRef SAL_CALL getProcedureColumns(const Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern, const OUString& columnNamePattern) throw(my_SQLException, my_RuntimeException);
212             my_XResultSetRef SAL_CALL getTables(const Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const ::com::sun::star::uno::Sequence< OUString >& types) throw(my_SQLException, my_RuntimeException);
213             my_XResultSetRef SAL_CALL getSchemas() throw(my_SQLException, my_RuntimeException);
214             my_XResultSetRef SAL_CALL getCatalogs() throw(my_SQLException, my_RuntimeException);
215             my_XResultSetRef SAL_CALL getTableTypes() throw(my_SQLException, my_RuntimeException);
216             my_XResultSetRef SAL_CALL getColumns(const Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern) throw(my_SQLException, my_RuntimeException);
217             my_XResultSetRef SAL_CALL getColumnPrivileges(const Any& catalog, const OUString& schema, const OUString& table, const OUString& columnNamePattern) throw(my_SQLException, my_RuntimeException);
218             my_XResultSetRef SAL_CALL getTablePrivileges(const Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern) throw(my_SQLException, my_RuntimeException);
219             my_XResultSetRef SAL_CALL getBestRowIdentifier(const Any& catalog, const OUString& schema, const OUString& table, sal_Int32 scope, sal_Bool nullable) throw(my_SQLException, my_RuntimeException);
220             my_XResultSetRef SAL_CALL getVersionColumns(const Any& catalog, const OUString& schema, const OUString& table) throw(my_SQLException, my_RuntimeException);
221             my_XResultSetRef SAL_CALL getPrimaryKeys(const Any& catalog, const OUString& schema, const OUString& table) throw(my_SQLException, my_RuntimeException);
222             my_XResultSetRef SAL_CALL getImportedKeys(const Any& catalog, const OUString& schema, const OUString& table) throw(my_SQLException, my_RuntimeException);
223             my_XResultSetRef SAL_CALL getExportedKeys(const Any& catalog, const OUString& schema, const OUString& table) throw(my_SQLException, my_RuntimeException);
224             my_XResultSetRef SAL_CALL getCrossReference(const Any& primaryCatalog, const OUString& primarySchema, const OUString& primaryTable, const Any& foreignCatalog, const OUString& foreignSchema, const OUString& foreignTable) throw(my_SQLException, my_RuntimeException);
225             my_XResultSetRef SAL_CALL getTypeInfo() throw(my_SQLException, my_RuntimeException);
226             my_XResultSetRef SAL_CALL getIndexInfo(const Any& catalog, const OUString& schema, const OUString& table, sal_Bool unique, sal_Bool approximate) throw(my_SQLException, my_RuntimeException);
227             sal_Bool SAL_CALL supportsResultSetType(sal_Int32 setType) throw(my_SQLException, my_RuntimeException);
228             sal_Bool SAL_CALL supportsResultSetConcurrency(sal_Int32 setType, sal_Int32 concurrency) throw(my_SQLException, my_RuntimeException);
229             sal_Bool SAL_CALL ownUpdatesAreVisible(sal_Int32 setType)   throw(my_SQLException, my_RuntimeException);
230             sal_Bool SAL_CALL ownDeletesAreVisible(sal_Int32 setType)   throw(my_SQLException, my_RuntimeException);
231             sal_Bool SAL_CALL ownInsertsAreVisible(sal_Int32 setType)   throw(my_SQLException, my_RuntimeException);
232             sal_Bool SAL_CALL othersUpdatesAreVisible(sal_Int32 setType)throw(my_SQLException, my_RuntimeException);
233             sal_Bool SAL_CALL othersDeletesAreVisible(sal_Int32 setType)throw(my_SQLException, my_RuntimeException);
234             sal_Bool SAL_CALL othersInsertsAreVisible(sal_Int32 setType)throw(my_SQLException, my_RuntimeException);
235             sal_Bool SAL_CALL updatesAreDetected(sal_Int32 setType)     throw(my_SQLException, my_RuntimeException);
236             sal_Bool SAL_CALL deletesAreDetected(sal_Int32 setType)     throw(my_SQLException, my_RuntimeException);
237             sal_Bool SAL_CALL insertsAreDetected(sal_Int32 setType)     throw(my_SQLException, my_RuntimeException);
238             sal_Bool SAL_CALL supportsBatchUpdates() throw(my_SQLException, my_RuntimeException);
239             my_XResultSetRef SAL_CALL getUDTs(const Any& catalog, const OUString& schemaPattern, const OUString& typeNamePattern, const ::com::sun::star::uno::Sequence< sal_Int32 >& types) throw(my_SQLException, my_RuntimeException);
240             ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection() throw(my_SQLException, my_RuntimeException);
241         };
242     }
243 }
244 
245 #endif // CONNECTIVITY_SDATABASEMETADATA_HXX
246