1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef _CONNECTIVITY_ODBC_OCONNECTION_HXX_ 28 #define _CONNECTIVITY_ODBC_OCONNECTION_HXX_ 29 30 #include <com/sun/star/sdbc/SQLWarning.hpp> 31 #include <com/sun/star/beans/PropertyValue.hpp> 32 #include "odbc/OFunctiondefs.hxx" 33 #include "odbc/odbcbasedllapi.hxx" 34 #include "OSubComponent.hxx" 35 #include "connectivity/CommonTools.hxx" 36 #include "TConnection.hxx" 37 #include "OTypeInfo.hxx" 38 #include <cppuhelper/weakref.hxx> 39 #include "AutoRetrievingBase.hxx" 40 #include <osl/module.h> 41 42 43 #include <map> 44 45 namespace connectivity 46 { 47 namespace odbc 48 { 49 50 class OStatement_Base; 51 class ODBCDriver; 52 class ODatabaseMetaData; 53 54 typedef connectivity::OMetaConnection OConnection_BASE; 55 typedef ::std::vector< ::connectivity::OTypeInfo> TTypeInfoVector; 56 57 class OOO_DLLPUBLIC_ODBCBASE OConnection : 58 public OConnection_BASE, 59 public connectivity::OSubComponent<OConnection, OConnection_BASE>, 60 public OAutoRetrievingBase 61 { 62 friend class connectivity::OSubComponent<OConnection, OConnection_BASE>; 63 64 protected: 65 //==================================================================== 66 // Data attributes 67 //==================================================================== 68 ::std::map< SQLHANDLE,OConnection*> m_aConnections; // holds all connectionas which are need for serveral statements 69 TTypeInfoVector m_aTypeInfo; // vector containing an entry 70 // for each row returned by 71 // DatabaseMetaData.getTypeInfo. 72 73 74 ::com::sun::star::sdbc::SQLWarning m_aLastWarning; // Last SQLWarning generated by 75 // an operation 76 ::rtl::OUString m_sUser; // the user name 77 ODBCDriver* m_pDriver; // Pointer to the owning 78 // driver object 79 80 SQLHANDLE m_aConnectionHandle; 81 SQLHANDLE m_pDriverHandleCopy; // performance reason 82 sal_Int32 m_nStatementCount; 83 sal_Bool m_bClosed; 84 sal_Bool m_bUseCatalog; // should we use the catalog on filebased databases 85 sal_Bool m_bUseOldDateFormat; 86 sal_Bool m_bParameterSubstitution; 87 sal_Bool m_bIgnoreDriverPrivileges; 88 sal_Bool m_bPreventGetVersionColumns; // #i60273# 89 sal_Bool m_bReadOnly; 90 91 92 SQLRETURN OpenConnection(const ::rtl::OUString& aConnectStr,sal_Int32 nTimeOut, sal_Bool bSilent); 93 94 virtual OConnection* cloneConnection(); // creates a new connection 95 96 public: 97 oslGenericFunction getOdbcFunction(sal_Int32 _nIndex) const; 98 virtual SQLRETURN Construct( const ::rtl::OUString& url,const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info) throw(::com::sun::star::sdbc::SQLException); 99 100 OConnection(const SQLHANDLE _pDriverHandle,ODBCDriver* _pDriver); 101 // OConnection(const SQLHANDLE _pConnectionHandle); 102 virtual ~OConnection(); 103 104 void closeAllStatements () throw( ::com::sun::star::sdbc::SQLException); 105 106 // OComponentHelper 107 virtual void SAL_CALL disposing(void); 108 // XInterface 109 virtual void SAL_CALL release() throw(); 110 111 // XServiceInfo 112 DECLARE_SERVICE_INFO(); 113 // XConnection 114 virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement > SAL_CALL createStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 115 virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 116 virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCall( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 117 virtual ::rtl::OUString SAL_CALL nativeSQL( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 118 virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 119 virtual sal_Bool SAL_CALL getAutoCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 120 virtual void SAL_CALL commit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 121 virtual void SAL_CALL rollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 122 virtual sal_Bool SAL_CALL isClosed( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 123 virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 124 virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 125 virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 126 virtual void SAL_CALL setCatalog( const ::rtl::OUString& catalog ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 127 virtual ::rtl::OUString SAL_CALL getCatalog( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 128 virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 129 virtual sal_Int32 SAL_CALL getTransactionIsolation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 130 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTypeMap( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 131 virtual void SAL_CALL setTypeMap( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 132 // XCloseable 133 virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 134 // XWarningsSupplier 135 virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 136 virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 137 // 138 SQLHANDLE getConnection() { return m_aConnectionHandle; } 139 140 // should we use the catalog on filebased databases 141 inline sal_Bool isCatalogUsed() const { return m_bUseCatalog; } 142 inline sal_Bool isParameterSubstitutionEnabled() const { return m_bParameterSubstitution; } 143 inline sal_Bool isIgnoreDriverPrivilegesEnabled() const { return m_bIgnoreDriverPrivileges; } 144 inline sal_Bool preventGetVersionColumns() const { return m_bPreventGetVersionColumns; } 145 inline sal_Bool useOldDateFormat() const { return m_bUseOldDateFormat; } 146 inline SQLHANDLE getDriverHandle() const { return m_pDriverHandleCopy;} 147 inline ODBCDriver* getDriver() const { return m_pDriver;} 148 inline ::rtl::OUString getUserName() const { return m_sUser; } 149 150 SQLHANDLE createStatementHandle(); 151 // close and free the handle and set it to SQL_NULLHANDLE 152 void freeStatementHandle(SQLHANDLE& _pHandle); 153 154 void buildTypeInfo() throw( ::com::sun::star::sdbc::SQLException); 155 const TTypeInfoVector& getTypeInfo() const { return m_aTypeInfo; } 156 }; 157 } 158 } 159 #endif // _CONNECTIVITY_ODBC_OCONNECTION_HXX_ 160 161