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