diff options
Diffstat (limited to 'connectivity/inc/connectivity/dbtools.hxx')
-rw-r--r-- | connectivity/inc/connectivity/dbtools.hxx | 825 |
1 files changed, 825 insertions, 0 deletions
diff --git a/connectivity/inc/connectivity/dbtools.hxx b/connectivity/inc/connectivity/dbtools.hxx new file mode 100644 index 000000000000..9b93830aeefe --- /dev/null +++ b/connectivity/inc/connectivity/dbtools.hxx @@ -0,0 +1,825 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 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_ + |