| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _CONNECTIVITY_DBTOOLS_HXX_ |
| #define _CONNECTIVITY_DBTOOLS_HXX_ |
| |
| #include <connectivity/dbexception.hxx> |
| #include <comphelper/types.hxx> |
| #include <com/sun/star/sdbc/DataType.hpp> |
| #include <comphelper/stl_types.hxx> |
| #include <unotools/sharedunocomponent.hxx> |
| #include "connectivity/dbtoolsdllapi.hxx" |
| #include "connectivity/FValue.hxx" |
| |
| namespace com { namespace sun { namespace star { |
| |
| namespace sdb { |
| class XSingleSelectQueryComposer; |
| class SQLContext; |
| } |
| namespace sdbcx { |
| class XTablesSupplier; |
| } |
| namespace sdbc { |
| class XConnection; |
| class XDatabaseMetaData; |
| class XRowSet; |
| class XDataSource; |
| class SQLException; |
| class XParameters; |
| class XRowUpdate; |
| } |
| namespace beans { |
| class XPropertySet; |
| } |
| namespace awt { |
| class XWindow; |
| } |
| namespace lang { |
| struct Locale; |
| class XMultiServiceFactory; |
| class WrappedTargetException; |
| } |
| namespace container { |
| class XNameAccess; |
| } |
| |
| namespace util { |
| class XNumberFormatTypes; |
| class XNumberFormatsSupplier; |
| } |
| namespace task { |
| class XInteractionHandler; |
| } |
| |
| } } } |
| |
| namespace rtl |
| { |
| class OUStringBuffer; |
| } |
| |
| //......................................................................... |
| namespace dbtools |
| { |
| class ISQLStatementHelper; |
| typedef ::utl::SharedUNOComponent< ::com::sun::star::sdbc::XConnection > SharedConnection; |
| |
| enum EComposeRule |
| { |
| eInTableDefinitions, |
| eInIndexDefinitions, |
| eInDataManipulation, |
| eInProcedureCalls, |
| eInPrivilegeDefinitions, |
| eComplete |
| }; |
| //========================================================================= |
| // date conversion |
| |
| // calculates the default numberformat for a given datatype and a give language |
| OOO_DLLPUBLIC_DBTOOLS |
| sal_Int32 getDefaultNumberFormat(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xColumn, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatTypes >& _xTypes, |
| const ::com::sun::star::lang::Locale& _rLocale); |
| |
| // calculates the default numberformat for a given datatype and a give language |
| // @param _nDataType @see com.sun.star.sdbc.DataType |
| // @param _nScale can be zero |
| OOO_DLLPUBLIC_DBTOOLS |
| sal_Int32 getDefaultNumberFormat(sal_Int32 _nDataType, |
| sal_Int32 _nScale, |
| sal_Bool _bIsCurrency, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatTypes >& _xTypes, |
| const ::com::sun::star::lang::Locale& _rLocale); |
| |
| //========================================================================= |
| |
| /** creates a connection which can be used for the rowset given |
| |
| The function tries to obtain a connection for the row set with the following |
| steps (in this order): |
| <nl> |
| <li>If the rowset already has an ActiveConnection (means a non-<NULL/> value vor this property), |
| this one is used.</li> |
| <li>If row set is part of a database form document (see ->isEmbeddedInDatabase), |
| a connection for the respective database is used.</li> |
| <li>If in the parent hierarchy of the row set, there is an object supporting |
| the XConnection interface, this one is returned.</li> |
| <li>If the DataSourceName property of the row set is not empty, a connection for this |
| data source is retrieved.</li> |
| <li>If the URL property of the row set is not empty, an connection for this URL is |
| retrieved from the driver manager. |
| </nl> |
| |
| @param _rxRowSet |
| the row set |
| |
| @param _rxFactory |
| a service factory, which can be used to create data sources, interaction handler etc (the usual stuff) |
| |
| @param _bSetAsActiveConnection |
| If <TRUE/>, the calculated connection is set as ActiveConnection property on the rowset. |
| |
| If the connection was newly created by the method, and this parameter is <TRUE/>, then |
| the ownership of the connection is delivered to a temporary object, which observes the |
| row set: As soon as a connection-relevant property of the row set changes, or as soon |
| as somebody else sets another ActiveConnection at the row set, the original |
| connection (the one which this function calculated) is disposed and discarded. At this |
| very moment, also the temporary observer object dies. This way, it is ensured that |
| there's no resource leak from an un-owned connection object. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> connectRowset( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxRowSet, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, |
| sal_Bool _bSetAsActiveConnection |
| ) SAL_THROW ( ( ::com::sun::star::sdbc::SQLException |
| , ::com::sun::star::lang::WrappedTargetException |
| , ::com::sun::star::uno::RuntimeException ) ); |
| |
| /** ensures that a row set has a valid ActiveConnection, if possible |
| |
| This function does nearly the same as ->connectRowset. In fact, it is to be preferred over |
| ->connectRowset, if possible. |
| |
| There are a few differences: |
| <ul><li>If a connection could be determined for the given RowSet, it is always |
| set as ActiveConnection.</li> |
| <li>Definition of the ownership of the created connection allows for more scenarios: |
| <ul><li>If the connection was not newly created, the returned ->SharedConnection |
| instance will not have the ownership, since in this case it's assumed |
| that there already is an instance which has the ownership.</li> |
| <li>If the connection was newly created, and ->_bUseAutoConnectionDisposer |
| is <TRUE/>, then the returned SharedConnection instance will <em>not</em> |
| be the owner of the connection. Instead, the ownership will be delivered |
| to a temporary object as described for connectRowset.</li> |
| <li>If the connection was newly created, and ->_bUseAutoConnectionDisposer |
| is <FALSE/>, then the returned SharedConnection instance will have the |
| ownership of the XConnection.</li> |
| </ul> |
| </li> |
| </ul> |
| */ |
| OOO_DLLPUBLIC_DBTOOLS SharedConnection ensureRowSetConnection( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxRowSet, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, |
| bool _bUseAutoConnectionDisposer |
| ) SAL_THROW ( ( ::com::sun::star::sdbc::SQLException |
| , ::com::sun::star::lang::WrappedTargetException |
| , ::com::sun::star::uno::RuntimeException ) ); |
| |
| /** returns the connection the RowSet is currently working with (which is the ActiveConnection property) |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> getConnection(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxRowSet) throw (::com::sun::star::uno::RuntimeException); |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> getConnection( |
| const ::rtl::OUString& _rsTitleOrPath, |
| const ::rtl::OUString& _rsUser, |
| const ::rtl::OUString& _rsPwd, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); |
| |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> getConnection_withFeedback( |
| const ::rtl::OUString& _rDataSourceName, |
| const ::rtl::OUString& _rUser, |
| const ::rtl::OUString& _rPwd, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory) |
| SAL_THROW ( (::com::sun::star::sdbc::SQLException) ); |
| |
| |
| /** determines whether the given component is part of a document which is an embedded database |
| document (such as a form) |
| */ |
| OOO_DLLPUBLIC_DBTOOLS bool isEmbeddedInDatabase( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxComponent, |
| ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxActualConnection |
| ); |
| |
| /** returns the columns of the named table of the given connection |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getTableFields( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConn, |
| const ::rtl::OUString& _rName |
| ); |
| |
| /** returns the primary key columns of the table |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getPrimaryKeyColumns_throw( |
| const ::com::sun::star::uno::Any& i_aTable |
| ); |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getPrimaryKeyColumns_throw( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& i_xTable |
| ); |
| |
| /** get fields for a result set given by a "command descriptor" |
| |
| <p>A command descriptor here means: |
| <ul><li>a SDB-level connection (<type scope="com.sun.star.sdb">Connection</type></li> |
| <li>a string specifying the name of an object relative to the connection</li> |
| <li>a <type scope="com.sun.star.sdb">CommandType</type> value specifying the type |
| of the object</type></li> |
| </ul> |
| </p> |
| |
| @param _rxConnection |
| the connection relative to which the to-be-examined object exists |
| |
| @param _nCommandType |
| the type of the object |
| |
| @param _rCommand |
| the object. This may be a table name, a query name, or an SQL statement, depending on the value |
| of <arg>_nCommandType</arg> |
| |
| @param _rxCollectionOner |
| If (and only if) <arg>CommandType</arg> is CommandType.COMMAND, the fields collection which is returned |
| by this function here is a temporary object. It is kept alive by another object, which is to be |
| created temporarily, too. To ensure that the fields you get are valid as long as you need them, |
| the owner which controls their life time is transfered to this parameter upon return.<br/> |
| |
| Your fields live as long as this component lives.<br/> |
| |
| Additionally, you are encouraged to dispose this component as soon as you don't need the fields anymore. |
| It depends on the connection's implementation if this is necessary, but the is no guarantee, so to |
| be on the safe side with respect to resource leaks, you should dispose the component. |
| |
| @param _pErrorInfo |
| If not <NULL/>, then upon return from the function the instance pointed to by this argument will |
| contain any available error information in case something went wrong. |
| |
| @return |
| the container of the columns (aka fields) of the object |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > |
| getFieldsByCommandDescriptor( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection, |
| const sal_Int32 _nCommandType, |
| const ::rtl::OUString& _rCommand, |
| ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& _rxKeepFieldsAlive, |
| SQLExceptionInfo* _pErrorInfo = NULL |
| ) SAL_THROW( ( ) ); |
| |
| |
| /** get fields for a result set given by a "command descriptor" |
| |
| <p>A command descriptor here means: |
| <ul><li>a SDB-level connection (<type scope="com.sun.star.sdb">Connection</type></li> |
| <li>a string specifying the name of an object relative to the connection</li> |
| <li>a <type scope="com.sun.star.sdb">CommandType</type> value specifying the type |
| of the object</type></li> |
| </ul> |
| </p> |
| |
| @param _rxConnection |
| the connection relative to which the to-be-examined object exists |
| |
| @param _nCommandType |
| the type of the object |
| |
| @param _rCommand |
| the object. This may be a table name, a query name, or an SQL statement, depending on the value |
| of <arg>_nCommandType</arg> |
| |
| @param _pErrorInfo |
| If not <NULL/>, then upon return from the function the instance pointed to by this argument will |
| contain any available error information in case something went wrong. |
| |
| @return |
| an array of strings containing the names of the columns (aka fields) of the object |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Sequence< ::rtl::OUString > |
| getFieldNamesByCommandDescriptor( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection, |
| const sal_Int32 _nCommandType, |
| const ::rtl::OUString& _rCommand, |
| SQLExceptionInfo* _pErrorInfo = NULL |
| ) SAL_THROW( ( ) ); |
| |
| |
| /** create a new ::com::sun::star::sdbc::SQLContext, fill it with the given descriptions and the given source, |
| and <i>append</i> _rException (i.e. put it into the NextException member of the SQLContext). |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::sdb::SQLContext prependContextInfo(const ::com::sun::star::sdbc::SQLException& _rException, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext, const ::rtl::OUString& _rContextDescription, const ::rtl::OUString& _rContextDetails ); |
| |
| OOO_DLLPUBLIC_DBTOOLS |
| ::com::sun::star::sdbc::SQLException prependErrorInfo( |
| const ::com::sun::star::sdbc::SQLException& _rChainedException, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext, |
| const ::rtl::OUString& _rAdditionalError, |
| const StandardSQLState _eSQLState = SQL_ERROR_UNSPECIFIED, |
| const sal_Int32 _nErrorCode = 0); |
| |
| /** search the parent hierachy for a data source. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDataSource> findDataSource(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xParent); |
| |
| /** determines the value of a booolean data source setting, given by ASCII name |
| |
| @param _rxConnection |
| the connection belonging to the data source whose setting is to be retrieved |
| @param _pAsciiSettingName |
| the ASCII name of the setting |
| */ |
| OOO_DLLPUBLIC_DBTOOLS bool getBooleanDataSourceSetting( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection, |
| const sal_Char* _pAsciiSettingName |
| ); |
| |
| /** check if a specific property is enabled in the info sequence |
| @deprecated |
| Use getBooleanDataSourceSetting instead, which cares for the default of the property itself, |
| instead of spreading this knowledge through all callers. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| sal_Bool isDataSourcePropertyEnabled(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _xProp |
| ,const ::rtl::OUString& _sProperty, |
| sal_Bool _bDefault = sal_False); |
| |
| /** retrieves a particular indirect data source setting |
| |
| @param _rxDataSource |
| a data source component |
| @param _pAsciiSettingsName |
| the ASCII name of the setting to obtain |
| @param _rSettingsValue |
| the value of the setting, upon successfull return |
| |
| @return |
| <FALSE/> if the setting is not present in the <member scope="com::sun::star::sdb">DataSource::Info</member> |
| member of the data source |
| <TRUE/> otherwise |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| bool getDataSourceSetting( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxDataSource, |
| const sal_Char* _pAsciiSettingsName, |
| ::com::sun::star::uno::Any& /* [out] */ _rSettingsValue |
| ); |
| OOO_DLLPUBLIC_DBTOOLS |
| bool getDataSourceSetting( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxDataSource, |
| const ::rtl::OUString& _sSettingsName, |
| ::com::sun::star::uno::Any& /* [out] */ _rSettingsValue |
| ); |
| |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString getDefaultReportEngineServiceName(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); |
| |
| /** quote the given name with the given quote string. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString quoteName(const ::rtl::OUString& _rQuote, const ::rtl::OUString& _rName); |
| |
| /** quote the given table name (which may contain a catalog and a schema) according to the rules provided by the meta data |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::rtl::OUString quoteTableName(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData>& _rxMeta |
| , const ::rtl::OUString& _rName |
| ,EComposeRule _eComposeRule); |
| |
| /** split a fully qualified table name (including catalog and schema, if appliable) into it's component parts. |
| @param _rxConnMetaData meta data describing the connection where you got the table name from |
| @param _rQualifiedName fully qualified table name |
| @param _rCatalog (out parameter) upon return, contains the catalog name |
| @param _rSchema (out parameter) upon return, contains the schema name |
| @param _rName (out parameter) upon return, contains the table name |
| @param _eComposeRule where do you need the name for |
| */ |
| OOO_DLLPUBLIC_DBTOOLS void qualifiedNameComponents(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rxConnMetaData, |
| const ::rtl::OUString& _rQualifiedName, ::rtl::OUString& _rCatalog, ::rtl::OUString& _rSchema, ::rtl::OUString& _rName,EComposeRule _eComposeRule); |
| |
| /** calculate a NumberFormatsSupplier for use with an given connection |
| @param _rxConn the connection for which the formatter is requested |
| @param _bAllowDefault if the connection (and related components, such as it's parent) cannot supply |
| a formatter, we can ask the DatabaseEnvironment for a default one. This parameter |
| states if this is allowed. |
| @param _rxFactory required (only of _bAllowDefault is sal_True) for creating the DatabaseEnvironment. |
| @return the formatter all object related to the given connection should work with. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier> getNumberFormats( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConn, |
| sal_Bool _bAllowDefault = sal_False, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory = ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>() |
| ); |
| |
| /** returns the statement which is composed from the current settings of a row set |
| |
| If the row set is currently not connected, it is attempted to do so with it's current settings. |
| (TODO: isn't this a resource leak? Do we really need this behaviour?). |
| |
| @param _rxRowSet |
| the row set whose settings should be examined. Must not be <NULL/> |
| @param _rxFactory |
| a service factory which may be needed to connect the row set |
| @param _bUseRowSetFilter |
| If <TRUE/>, the <b>Filter</b> property of the row set will also be examined. In case it is |
| not empty, and <b>ApplyFilter</b> is <TRUE/>, it will also be added to the composed statement. |
| @param _bUseRowSetOrder |
| If <TRUE/>, the <b>Order</b> property of the row set will also be examined. In case it is |
| not empty, it will also be added to the composed statement. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString getComposedRowSetStatement( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxRowSet, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, |
| sal_Bool _bUseRowSetFilter = sal_True, |
| sal_Bool _bUseRowSetOrder = sal_True |
| ) SAL_THROW( ( ::com::sun::star::sdbc::SQLException ) ); |
| |
| /** create an <type scope="com::sun::star::sdb">XSingleSelectQueryComposer</type> which represents |
| the current settings (Command/CommandType/Filter/Order) of the given rowset. |
| |
| As such an instance can be obtained from a <type scope="com::sun::star::sdb">Connection</type> |
| only the function searches for the connection the RowSet is using via connectRowset. |
| This implies that a connection will be set on the RowSet if needed. |
| (need to changes this sometimes ...) |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > getCurrentSettingsComposer( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxRowSetProps, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory |
| ); |
| |
| /** transfer and translate properties between two FormComponents |
| @param _rxOld the source property set |
| @param _rxNew the destination property set |
| @param _rLocale the locale for converting number related properties |
| */ |
| OOO_DLLPUBLIC_DBTOOLS void TransferFormComponentProperties( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxOld, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxNew, |
| const ::com::sun::star::lang::Locale& _rLocale |
| ); |
| |
| /** check if the property "Privileges" supports ::com::sun::star::sdbcx::Privilege::INSERT |
| @param _rxCursorSet the property set |
| */ |
| OOO_DLLPUBLIC_DBTOOLS sal_Bool canInsert(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxCursorSet); |
| /** check if the property "Privileges" supports ::com::sun::star::sdbcx::Privilege::UPDATE |
| @param _rxCursorSet the property set |
| */ |
| OOO_DLLPUBLIC_DBTOOLS sal_Bool canUpdate(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxCursorSet); |
| /** check if the property "Privileges" supports ::com::sun::star::sdbcx::Privilege::DELETE |
| @param _rxCursorSet the property set |
| */ |
| OOO_DLLPUBLIC_DBTOOLS sal_Bool canDelete(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxCursorSet); |
| |
| //---------------------------------------------------------------------------------- |
| /** compose a complete table name from it's up to three parts, regarding to the database meta data composing rules |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString composeTableName( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rxMetaData, |
| const ::rtl::OUString& _rCatalog, |
| const ::rtl::OUString& _rSchema, |
| const ::rtl::OUString& _rName, |
| sal_Bool _bQuote, |
| EComposeRule _eComposeRule); |
| |
| /** composes a table name for usage in a SELECT statement |
| |
| This includes quoting of the table as indicated by the connection's meta data, plus respecting |
| the settings "UseCatalogInSelect" and "UseSchemaInSelect", which might be present |
| in the data source which the connection belongs to. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString composeTableNameForSelect( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection, |
| const ::rtl::OUString& _rCatalog, |
| const ::rtl::OUString& _rSchema, |
| const ::rtl::OUString& _rName ); |
| |
| /** composes a table name for usage in a SELECT statement |
| |
| This includes quoting of the table as indicated by the connection's meta data, plus respecting |
| the settings "UseCatalogInSelect" and "UseSchemaInSelect", which might be present |
| in the data source which the connection belongs to. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString composeTableNameForSelect( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xTable ); |
| //---------------------------------------------------------------------------------- |
| /** compose the table name out of the property set which must support the properties from the service <member scope= "com::sun::star::sdbcx">table</member> |
| @param _xMetaData |
| The metadata from the connection. |
| @param _xTable |
| The table. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString composeTableName( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData>& _xMetaData, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xTable, |
| EComposeRule _eComposeRule, |
| bool _bSuppressCatalogName, |
| bool _bSuppressSchemaName, |
| bool _bQuote); |
| |
| //---------------------------------------------------------------------------------- |
| OOO_DLLPUBLIC_DBTOOLS sal_Int32 getSearchColumnFlag( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConn, |
| sal_Int32 _nDataType); |
| // return the datasource for the given datasource name |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDataSource> getDataSource(const ::rtl::OUString& _rsDataSourceName, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); |
| |
| /** search for a name that is NOT in the NameAcces |
| @param _rxContainer |
| the NameAccess container to search in |
| @param _rBaseName |
| the base name that should be used to create the new name |
| @param _bStartWithNumber |
| When <TRUE/> the name ends with number even when the name itself doesn't occur in the collection. |
| @return |
| A name which doesn't exist in the collection. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::rtl::OUString createUniqueName(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess>& _rxContainer, |
| const ::rtl::OUString& _rBaseName, |
| sal_Bool _bStartWithNumber = sal_True); |
| |
| /** creates a unique name which is not already used in the given name array |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString createUniqueName( |
| const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _rNames, |
| const ::rtl::OUString& _rBaseName, |
| sal_Bool _bStartWithNumber = sal_True |
| ); |
| |
| /** create a name which is a valid SQL 92 identifier name |
| @param _rName the string which should be converted |
| @param _rSpecials @see com.sun.star.sdbc.XDatabaseMetaData.getExtraNameCharacters |
| |
| @see isValidSQLName |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString convertName2SQLName(const ::rtl::OUString& _rName,const ::rtl::OUString& _rSpecials); |
| |
| /** checks whether the given name is a valid SQL name |
| |
| @param _rName the string which should be converted |
| @param _rSpecials @see com.sun.star.sdbc.XDatabaseMetaData.getExtraNameCharacters |
| |
| @see convertName2SQLName |
| */ |
| OOO_DLLPUBLIC_DBTOOLS sal_Bool isValidSQLName( const ::rtl::OUString& _rName, const ::rtl::OUString& _rSpecials ); |
| |
| OOO_DLLPUBLIC_DBTOOLS |
| void showError( const SQLExceptionInfo& _rInfo, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow>& _pParent, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); |
| |
| /** implements <method scope="com.sun.star.sdb">XRowUpdate::updateObject</method> |
| <p>The object which is to be set is analyzed, and in case it is a simlpe scalar type for which there |
| is another updateXXX method, this other method is used.</p> |
| @param _rxUpdatedObject |
| the interface to forward all updateXXX calls to (except updateObject) |
| @param _nColumnIndex |
| the column index to update |
| @param _rValue |
| the value to update |
| @return |
| <TRUE/> if the update request was successfully re-routed to one of the other updateXXX methods |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| sal_Bool implUpdateObject( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowUpdate >& _rxUpdatedObject, |
| const sal_Int32 _nColumnIndex, |
| const ::com::sun::star::uno::Any& _rValue) SAL_THROW ( ( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) ); |
| |
| |
| |
| /** ask the user for parameters if the prepared statement needs some and sets them in the prepared statement |
| @param _xConnection the connection must be able to create <type scope="com::sun::star::sdb">SingleSelectQueryComposer</type>s |
| @param _xPreparedStmt the prepared statement where the parameters could be set when needed |
| @param _aParametersSet contains which parameters have to asked for and which already have set. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| void askForParameters( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer >& _xComposer, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters>& _xParameters, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxHandler, |
| const ::std::bit_vector& _aParametersSet = ::std::bit_vector()); |
| |
| /** call the appropiate set method for the specific sql type @see com::sun::star::sdbc::DataType |
| @param _xParams the parameters where to set the value |
| @param parameterIndex the index of the parameter, 1 based |
| @param x the value to set |
| @param sqlType the corresponding sql type @see com::sun::star::sdbc::DataType |
| @param scale the scale of the sql type can be 0 |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| void setObjectWithInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters>& _xParameters, |
| sal_Int32 parameterIndex, |
| const ::com::sun::star::uno::Any& x, |
| sal_Int32 sqlType, |
| sal_Int32 scale=0) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); |
| |
| /** call the appropiate set method for the specific sql type @see com::sun::star::sdbc::DataType |
| @param _xParams the parameters where to set the value |
| @param parameterIndex the index of the parameter, 1 based |
| @param x the value to set |
| @param sqlType the corresponding sql type @see com::sun::star::sdbc::DataType |
| @param scale the scale of the sql type can be 0 |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| void setObjectWithInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters>& _xParameters, |
| sal_Int32 parameterIndex, |
| const ::connectivity::ORowSetValue& x, |
| sal_Int32 sqlType, |
| sal_Int32 scale=0) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); |
| |
| |
| /** implements <method scope="com.sun.star.sdb">XParameters::setObject</method> |
| <p>The object which is to be set is analyzed, and in case it is a simlpe scalar type for which there |
| is another setXXX method, this other method is used.</p> |
| @param _rxParameters |
| the interface to forward all setXXX calls to (except setObject) |
| @param _nColumnIndex |
| the column index to update |
| @param _rValue |
| the value to update |
| @return |
| <TRUE/> if the update request was successfully re-routed to one of the other updateXXX methods |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| sal_Bool implSetObject( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters>& _rxParameters, |
| const sal_Int32 _nColumnIndex, |
| const ::com::sun::star::uno::Any& _rValue) SAL_THROW ( ( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) ); |
| |
| /** creates the standard sql create table statement without the key part. |
| @param descriptor |
| The descriptor of the new table. |
| @param _xConnection |
| The connection. |
| @param _bAddScale |
| The scale will also be added when the value is 0. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::rtl::OUString createStandardCreateStatement( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection, |
| ISQLStatementHelper* _pHelper, |
| const ::rtl::OUString& _sCreatePattern = ::rtl::OUString()); |
| |
| /** creates the standard sql statement for the key part of a create table statement. |
| @param descriptor |
| The descriptor of the new table. |
| @param _xConnection |
| The connection. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::rtl::OUString createStandardKeyStatement( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection); |
| |
| /** creates the standard sql statement for the column part of a create table statement. |
| @param _pHelper |
| Allow to add special SQL constructs. |
| @param descriptor |
| The descriptor of the column. |
| @param _xConnection |
| The connection. |
| @param _pHelper |
| Allow to add special SQL constructs. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::rtl::OUString createStandardColumnPart( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor |
| ,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection |
| ,ISQLStatementHelper* _pHelper = NULL |
| ,const ::rtl::OUString& _sCreatePattern = ::rtl::OUString()); |
| |
| /** creates a SQL CREATE TABLE statement |
| |
| @param descriptor |
| The descriptor of the new table. |
| @param _xConnection |
| The connection. |
| @param _pHelper |
| Allow to add special SQL constructs. |
| @param _sCreatePattern |
| |
| @return |
| The CREATE TABLE statement. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::rtl::OUString createSqlCreateTableStatement( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor |
| ,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection |
| ,ISQLStatementHelper* _pHelper = NULL |
| ,const ::rtl::OUString& _sCreatePattern = ::rtl::OUString()); |
| |
| /** creates a SDBC column with the help of getColumns. |
| @param _xTable |
| The table. |
| @param _rName |
| The name of the column. |
| @param _bCase |
| Is the column case sensitive. |
| @param _bQueryForInfo |
| If <TRUE/> the autoincrement and currency field will be read from the meta data, otherwise the following parameters will be used instead |
| @param _bIsAutoIncrement |
| <TRUE/> if the column is an autoincrement. |
| @param _bIsCurrency |
| <TRUE/> if the column is a currency field. |
| @param _nDataType |
| The data type of the column. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> |
| createSDBCXColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xTable, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection, |
| const ::rtl::OUString& _rName, |
| sal_Bool _bCase, |
| sal_Bool _bQueryForInfo = sal_True, |
| sal_Bool _bIsAutoIncrement = sal_False, |
| sal_Bool _bIsCurrency = sal_False, |
| sal_Int32 _nDataType = com::sun::star::sdbc::DataType::OTHER); |
| |
| /** tries to locate the corresponding DataDefinitionSupplier for the given url and connection |
| @param _rsUrl |
| The URL used to connect to the database. |
| @param _xConnection |
| The connection used to find the correct driver. |
| @param _rxFactory |
| Used to create the drivermanager. |
| @return |
| The datadefintion object. |
| */ |
| OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier> getDataDefinitionByURLAndConnection( |
| const ::rtl::OUString& _rsUrl, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); |
| |
| /** returns the table privileges to the given parameters |
| @param _xMetaData |
| The meta data. |
| @param _sCatalog |
| contains the catalog name |
| @param _sSchema |
| contains the schema name |
| @param _sTable |
| contains the table name |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| sal_Int32 getTablePrivileges(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData>& _xMetaData, |
| const ::rtl::OUString& _sCatalog, |
| const ::rtl::OUString& _sSchema, |
| const ::rtl::OUString& _sTable); |
| |
| typedef ::std::pair<sal_Bool,sal_Bool> TBoolPair; |
| typedef ::std::pair< TBoolPair,sal_Int32 > ColumnInformation; |
| typedef ::std::multimap< ::rtl::OUString, ColumnInformation, ::comphelper::UStringMixLess> ColumnInformationMap; |
| /** collects the information about auto increment, currency and data type for the given column name. |
| The column must be quoted, * is also valid. |
| @param _xConnection |
| The connection. |
| @param _sComposedTableName |
| The quoted table name. ccc.sss.ttt |
| @param _sName |
| The name of the column, or * |
| @param _rInfo |
| The information about the column(s). |
| */ |
| OOO_DLLPUBLIC_DBTOOLS |
| void collectColumnInformation( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection, |
| const ::rtl::OUString& _sComposedTableName, |
| const ::rtl::OUString& _rName, |
| ColumnInformationMap& _rInfo); |
| |
| |
| /** adds a boolean comparison clause to the given SQL predicate |
| |
| @param _rExpression |
| the expression which is to be compared with a boolean value |
| @param _bValue |
| the boolean value which the expression is to be compared with |
| @param _nBooleanComparisonMode |
| the boolean comparison mode to be used. Usually obtained from |
| a css.sdb.DataSource's Settings member. |
| @param _out_rSQLPredicate |
| the buffer to which the comparison predicate will be appended |
| */ |
| OOO_DLLPUBLIC_DBTOOLS void getBoleanComparisonPredicate( |
| const ::rtl::OUString& _rExpression, |
| const sal_Bool _bValue, |
| const sal_Int32 _nBooleanComparisonMode, |
| ::rtl::OUStringBuffer& _out_rSQLPredicate |
| ); |
| |
| //......................................................................... |
| } // namespace dbtools |
| //......................................................................... |
| |
| #endif // _CONNECTIVITY_DBTOOLS_HXX_ |
| |