xref: /AOO41X/main/connectivity/inc/connectivity/dbtools.hxx (revision caf5cd79edad04a48dcaf209068b3b89eae4622e)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _CONNECTIVITY_DBTOOLS_HXX_
25 #define _CONNECTIVITY_DBTOOLS_HXX_
26 
27 #include <connectivity/dbexception.hxx>
28 #include <comphelper/types.hxx>
29 #include <com/sun/star/sdbc/DataType.hpp>
30 #include <comphelper/stl_types.hxx>
31 #include <unotools/sharedunocomponent.hxx>
32 #include "connectivity/dbtoolsdllapi.hxx"
33 #include "connectivity/FValue.hxx"
34 
35 namespace com { namespace sun { namespace star {
36 
37 namespace sdb {
38     class XSingleSelectQueryComposer;
39     class SQLContext;
40 }
41 namespace sdbcx {
42     class XTablesSupplier;
43 }
44 namespace sdbc {
45     class XConnection;
46     class XDatabaseMetaData;
47     class XRowSet;
48     class XDataSource;
49     class SQLException;
50     class XParameters;
51     class XRowUpdate;
52 }
53 namespace beans {
54     class XPropertySet;
55 }
56 namespace awt {
57     class XWindow;
58 }
59 namespace lang {
60     struct Locale;
61     class XMultiServiceFactory;
62     class WrappedTargetException;
63 }
64 namespace container {
65     class XNameAccess;
66 }
67 
68 namespace util {
69     class XNumberFormatTypes;
70     class XNumberFormatsSupplier;
71 }
72 namespace task {
73     class XInteractionHandler;
74 }
75 
76 } } }
77 
78 namespace rtl
79 {
80     class OUStringBuffer;
81 }
82 
83 //.........................................................................
84 namespace dbtools
85 {
86     class ISQLStatementHelper;
87     typedef ::utl::SharedUNOComponent< ::com::sun::star::sdbc::XConnection > SharedConnection;
88 
89     enum EComposeRule
90     {
91         eInTableDefinitions,
92         eInIndexDefinitions,
93         eInDataManipulation,
94         eInProcedureCalls,
95         eInPrivilegeDefinitions,
96         eComplete
97     };
98 //=========================================================================
99     // date conversion
100 
101     // calculates the default numberformat for a given datatype and a give language
102     OOO_DLLPUBLIC_DBTOOLS
103     sal_Int32 getDefaultNumberFormat(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xColumn,
104                                      const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatTypes >& _xTypes,
105                                      const ::com::sun::star::lang::Locale& _rLocale);
106 
107     // calculates the default numberformat for a given datatype and a give language
108     // @param  _nDataType @see com.sun.star.sdbc.DataType
109     // @param _nScale       can be zero
110     OOO_DLLPUBLIC_DBTOOLS
111     sal_Int32 getDefaultNumberFormat(sal_Int32 _nDataType,
112                                      sal_Int32 _nScale,
113                                      sal_Bool _bIsCurrency,
114                                      const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatTypes >& _xTypes,
115                                      const ::com::sun::star::lang::Locale& _rLocale);
116 
117 //=========================================================================
118 
119     /** creates a connection which can be used for the rowset given
120 
121         The function tries to obtain a connection for the row set with the following
122         steps (in this order):
123         <nl>
124             <li>If the rowset already has an ActiveConnection (means a non-<NULL/> value vor this property),
125                 this one is used.</li>
126             <li>If row set is part of a database form document (see ->isEmbeddedInDatabase),
127                 a connection for the respective database is used.</li>
128             <li>If in the parent hierarchy of the row set, there is an object supporting
129                 the XConnection interface, this one is returned.</li>
130             <li>If the DataSourceName property of the row set is not empty, a connection for this
131                 data source is retrieved.</li>
132             <li>If the URL property of the row set is not empty, an connection for this URL is
133                 retrieved from the driver manager.
134         </nl>
135 
136         @param _rxRowSet
137             the row set
138 
139         @param _rxFactory
140             a service factory, which can be used to create data sources, interaction handler etc (the usual stuff)
141 
142         @param _bSetAsActiveConnection
143             If <TRUE/>, the calculated connection is set as ActiveConnection property on the rowset.
144 
145             If the connection was newly created by the method, and this parameter is <TRUE/>, then
146             the ownership of the connection is delivered to a temporary object, which observes the
147             row set: As soon as a connection-relevant property of the row set changes, or as soon
148             as somebody else sets another ActiveConnection at the row set, the original
149             connection (the one which this function calculated) is disposed and discarded. At this
150             very moment, also the temporary observer object dies. This way, it is ensured that
151             there's no resource leak from an un-owned connection object.
152     */
153     OOO_DLLPUBLIC_DBTOOLS
154     ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> connectRowset(
155         const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxRowSet,
156         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory,
157         sal_Bool _bSetAsActiveConnection
158     )   SAL_THROW ( ( ::com::sun::star::sdbc::SQLException
159                     , ::com::sun::star::lang::WrappedTargetException
160                     , ::com::sun::star::uno::RuntimeException ) );
161 
162     /** ensures that a row set has a valid ActiveConnection, if possible
163 
164         This function does nearly the same as ->connectRowset. In fact, it is to be preferred over
165         ->connectRowset, if possible.
166 
167         There are a few differences:
168         <ul><li>If a connection could be determined for the given RowSet, it is always
169                 set as ActiveConnection.</li>
170             <li>Definition of the ownership of the created connection allows for more scenarios:
171                 <ul><li>If the connection was not newly created, the returned ->SharedConnection
172                         instance will not have the ownership, since in this case it's assumed
173                         that there already is an instance which has the ownership.</li>
174                     <li>If the connection was newly created, and ->_bUseAutoConnectionDisposer
175                         is <TRUE/>, then the returned SharedConnection instance will <em>not</em>
176                         be the owner of the connection. Instead, the ownership will be delivered
177                         to a temporary object as described for connectRowset.</li>
178                     <li>If the connection was newly created, and ->_bUseAutoConnectionDisposer
179                         is <FALSE/>, then the returned SharedConnection instance will have the
180                         ownership of the XConnection.</li>
181                 </ul>
182             </li>
183         </ul>
184     */
185     OOO_DLLPUBLIC_DBTOOLS SharedConnection    ensureRowSetConnection(
186         const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxRowSet,
187         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory,
188         bool _bUseAutoConnectionDisposer
189     )   SAL_THROW ( ( ::com::sun::star::sdbc::SQLException
190                     , ::com::sun::star::lang::WrappedTargetException
191                     , ::com::sun::star::uno::RuntimeException ) );
192 
193     /** returns the connection the RowSet is currently working with (which is the ActiveConnection property)
194     */
195     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);
196     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> getConnection(
197             const ::rtl::OUString& _rsTitleOrPath,
198             const ::rtl::OUString& _rsUser,
199             const ::rtl::OUString& _rsPwd,
200             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory);
201 
202     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> getConnection_withFeedback(
203             const ::rtl::OUString& _rDataSourceName,
204             const ::rtl::OUString& _rUser,
205             const ::rtl::OUString& _rPwd,
206             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory)
207         SAL_THROW ( (::com::sun::star::sdbc::SQLException) );
208 
209 
210     /** determines whether the given component is part of a document which is an embedded database
211         document (such as a form)
212     */
213     OOO_DLLPUBLIC_DBTOOLS bool    isEmbeddedInDatabase(
214                 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxComponent,
215                 ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxActualConnection
216             );
217 
218     /** returns the columns of the named table of the given connection
219     */
220     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getTableFields(
221         const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConn,
222         const ::rtl::OUString& _rName
223     );
224 
225     /** returns the primary key columns of the table
226     */
227     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getPrimaryKeyColumns_throw(
228         const ::com::sun::star::uno::Any& i_aTable
229     );
230     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getPrimaryKeyColumns_throw(
231         const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& i_xTable
232     );
233 
234     /** get fields for a result set given by a "command descriptor"
235 
236         <p>A command descriptor here means:
237         <ul><li>a SDB-level connection (<type scope="com.sun.star.sdb">Connection</type></li>
238             <li>a string specifying the name of an object relative to the connection</li>
239             <li>a <type scope="com.sun.star.sdb">CommandType</type> value specifying the type
240                 of the object</type></li>
241         </ul>
242         </p>
243 
244         @param _rxConnection
245             the connection relative to which the to-be-examined object exists
246 
247         @param _nCommandType
248             the type of the object
249 
250         @param _rCommand
251             the object. This may be a table name, a query name, or an SQL statement, depending on the value
252             of <arg>_nCommandType</arg>
253 
254         @param _rxCollectionOner
255             If (and only if) <arg>CommandType</arg> is CommandType.COMMAND, the fields collection which is returned
256             by this function here is a temporary object. It is kept alive by another object, which is to be
257             created temporarily, too. To ensure that the fields you get are valid as long as you need them,
258             the owner which controls their life time is transfered to this parameter upon return.<br/>
259 
260             Your fields live as long as this component lives.<br/>
261 
262             Additionally, you are encouraged to dispose this component as soon as you don't need the fields anymore.
263             It depends on the connection's implementation if this is necessary, but the is no guarantee, so to
264             be on the safe side with respect to resource leaks, you should dispose the component.
265 
266         @param _pErrorInfo
267             If not <NULL/>, then upon return from the function the instance pointed to by this argument will
268             contain any available error information in case something went wrong.
269 
270         @return
271             the container of the columns (aka fields) of the object
272     */
273     OOO_DLLPUBLIC_DBTOOLS
274     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >
275         getFieldsByCommandDescriptor(
276             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
277             const sal_Int32 _nCommandType,
278             const ::rtl::OUString& _rCommand,
279             ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& _rxKeepFieldsAlive,
280             SQLExceptionInfo* _pErrorInfo = NULL
281         )   SAL_THROW( ( ) );
282 
283 
284     /** get fields for a result set given by a "command descriptor"
285 
286         <p>A command descriptor here means:
287         <ul><li>a SDB-level connection (<type scope="com.sun.star.sdb">Connection</type></li>
288             <li>a string specifying the name of an object relative to the connection</li>
289             <li>a <type scope="com.sun.star.sdb">CommandType</type> value specifying the type
290                 of the object</type></li>
291         </ul>
292         </p>
293 
294         @param _rxConnection
295             the connection relative to which the to-be-examined object exists
296 
297         @param _nCommandType
298             the type of the object
299 
300         @param _rCommand
301             the object. This may be a table name, a query name, or an SQL statement, depending on the value
302             of <arg>_nCommandType</arg>
303 
304         @param _pErrorInfo
305             If not <NULL/>, then upon return from the function the instance pointed to by this argument will
306             contain any available error information in case something went wrong.
307 
308         @return
309             an array of strings containing the names of the columns (aka fields) of the object
310     */
311     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Sequence< ::rtl::OUString >
312         getFieldNamesByCommandDescriptor(
313             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
314             const sal_Int32 _nCommandType,
315             const ::rtl::OUString& _rCommand,
316             SQLExceptionInfo* _pErrorInfo = NULL
317         )   SAL_THROW( ( ) );
318 
319 
320     /** create a new ::com::sun::star::sdbc::SQLContext, fill it with the given descriptions and the given source,
321         and <i>append</i> _rException (i.e. put it into the NextException member of the SQLContext).
322     */
323     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 );
324 
325     OOO_DLLPUBLIC_DBTOOLS
326     ::com::sun::star::sdbc::SQLException prependErrorInfo(
327         const ::com::sun::star::sdbc::SQLException& _rChainedException,
328         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext,
329         const ::rtl::OUString& _rAdditionalError,
330         const StandardSQLState _eSQLState = SQL_ERROR_UNSPECIFIED,
331         const sal_Int32 _nErrorCode = 0);
332 
333     /** search the parent hierachy for a data source.
334     */
335     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);
336 
337     /** determines the value of a booolean data source setting, given by ASCII name
338 
339         @param _rxConnection
340             the connection belonging to the data source whose setting is to be retrieved
341         @param _pAsciiSettingName
342             the ASCII name of the setting
343     */
344     OOO_DLLPUBLIC_DBTOOLS bool getBooleanDataSourceSetting(
345             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
346             const sal_Char* _pAsciiSettingName
347         );
348 
349     /** check if a specific property is enabled in the info sequence
350         @deprecated
351             Use getBooleanDataSourceSetting instead, which cares for the default of the property itself,
352             instead of spreading this knowledge through all callers.
353     */
354     OOO_DLLPUBLIC_DBTOOLS
355     sal_Bool isDataSourcePropertyEnabled(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _xProp
356                                         ,const ::rtl::OUString& _sProperty,
357                                         sal_Bool _bDefault = sal_False);
358 
359     /** retrieves a particular indirect data source setting
360 
361         @param _rxDataSource
362             a data source component
363         @param _pAsciiSettingsName
364             the ASCII name of the setting to obtain
365         @param _rSettingsValue
366             the value of the setting, upon successfull return
367 
368         @return
369             <FALSE/> if the setting is not present in the <member scope="com::sun::star::sdb">DataSource::Info</member>
370             member of the data source
371             <TRUE/> otherwise
372     */
373     OOO_DLLPUBLIC_DBTOOLS
374     bool    getDataSourceSetting(
375         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxDataSource,
376         const sal_Char* _pAsciiSettingsName,
377         ::com::sun::star::uno::Any& /* [out] */ _rSettingsValue
378     );
379     OOO_DLLPUBLIC_DBTOOLS
380     bool    getDataSourceSetting(
381         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxDataSource,
382         const ::rtl::OUString& _sSettingsName,
383         ::com::sun::star::uno::Any& /* [out] */ _rSettingsValue
384     );
385 
386     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString getDefaultReportEngineServiceName(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory);
387 
388     /** quote the given name with the given quote string.
389     */
390     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString quoteName(const ::rtl::OUString& _rQuote, const ::rtl::OUString& _rName);
391 
392     /** quote the given table name (which may contain a catalog and a schema) according to the rules provided by the meta data
393     */
394     OOO_DLLPUBLIC_DBTOOLS
395     ::rtl::OUString quoteTableName(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData>& _rxMeta
396                                     , const ::rtl::OUString& _rName
397                                     ,EComposeRule _eComposeRule);
398 
399     /** split a fully qualified table name (including catalog and schema, if appliable) into it's component parts.
400         @param  _rxConnMetaData     meta data describing the connection where you got the table name from
401         @param  _rQualifiedName     fully qualified table name
402         @param  _rCatalog           (out parameter) upon return, contains the catalog name
403         @param  _rSchema            (out parameter) upon return, contains the schema name
404         @param  _rName              (out parameter) upon return, contains the table name
405         @param  _eComposeRule       where do you need the name for
406     */
407     OOO_DLLPUBLIC_DBTOOLS void qualifiedNameComponents(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rxConnMetaData,
408         const ::rtl::OUString& _rQualifiedName, ::rtl::OUString& _rCatalog, ::rtl::OUString& _rSchema, ::rtl::OUString& _rName,EComposeRule _eComposeRule);
409 
410     /** calculate a NumberFormatsSupplier for use with an given connection
411         @param      _rxConn         the connection for which the formatter is requested
412         @param      _bAllowDefault  if the connection (and related components, such as it's parent) cannot supply
413                                     a formatter, we can ask the DatabaseEnvironment for a default one. This parameter
414                                     states if this is allowed.
415         @param      _rxFactory      required (only of _bAllowDefault is sal_True) for creating the DatabaseEnvironment.
416         @return     the formatter all object related to the given connection should work with.
417     */
418     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier> getNumberFormats(
419         const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConn,
420         sal_Bool _bAllowDefault = sal_False,
421         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory = ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>()
422     );
423 
424     /** returns the statement which is composed from the current settings of a row set
425 
426         If the row set is currently not connected, it is attempted to do so with it's current settings.
427         (TODO: isn't this a resource leak? Do we really need this behaviour?).
428 
429         @param _rxRowSet
430             the row set whose settings should be examined. Must not be <NULL/>
431         @param _rxFactory
432             a service factory which may be needed to connect the row set
433         @param _bUseRowSetFilter
434             If <TRUE/>, the <b>Filter</b> property of the row set will also be examined. In case it is
435             not empty, and <b>ApplyFilter</b> is <TRUE/>, it will also be added to the composed statement.
436         @param _bUseRowSetOrder
437             If <TRUE/>, the <b>Order</b> property of the row set will also be examined. In case it is
438             not empty, it will also be added to the composed statement.
439     */
440     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString getComposedRowSetStatement(
441             const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxRowSet,
442             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory,
443             sal_Bool _bUseRowSetFilter = sal_True,
444             sal_Bool _bUseRowSetOrder = sal_True
445     )   SAL_THROW( ( ::com::sun::star::sdbc::SQLException ) );
446 
447     /** create an <type scope="com::sun::star::sdb">XSingleSelectQueryComposer</type> which represents
448         the current settings (Command/CommandType/Filter/Order) of the given rowset.
449 
450         As such an instance can be obtained from a <type scope="com::sun::star::sdb">Connection</type>
451         only the function searches for the connection the RowSet is using via connectRowset.
452         This implies that a connection will be set on the RowSet if needed.
453         (need to changes this sometimes ...)
454     */
455     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > getCurrentSettingsComposer(
456         const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxRowSetProps,
457         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory
458     );
459 
460     /** transfer and translate properties between two FormComponents
461         @param      _rxOld      the source property set
462         @param      _rxNew      the destination property set
463         @param      _rLocale    the locale for converting number related properties
464     */
465     OOO_DLLPUBLIC_DBTOOLS void TransferFormComponentProperties(
466         const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxOld,
467         const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxNew,
468         const ::com::sun::star::lang::Locale& _rLocale
469         );
470 
471     /** check if the property "Privileges" supports ::com::sun::star::sdbcx::Privilege::INSERT
472         @param      _rxCursorSet    the property set
473     */
474     OOO_DLLPUBLIC_DBTOOLS sal_Bool canInsert(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxCursorSet);
475     /** check if the property "Privileges" supports ::com::sun::star::sdbcx::Privilege::UPDATE
476         @param      _rxCursorSet    the property set
477     */
478     OOO_DLLPUBLIC_DBTOOLS sal_Bool canUpdate(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxCursorSet);
479     /** check if the property "Privileges" supports ::com::sun::star::sdbcx::Privilege::DELETE
480         @param      _rxCursorSet    the property set
481     */
482     OOO_DLLPUBLIC_DBTOOLS sal_Bool canDelete(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxCursorSet);
483 
484     //----------------------------------------------------------------------------------
485     /** compose a complete table name from it's up to three parts, regarding to the database meta data composing rules
486     */
487     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString composeTableName( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rxMetaData,
488                             const ::rtl::OUString& _rCatalog,
489                             const ::rtl::OUString& _rSchema,
490                             const ::rtl::OUString& _rName,
491                             sal_Bool _bQuote,
492                             EComposeRule _eComposeRule);
493 
494     /** composes a table name for usage in a SELECT statement
495 
496         This includes quoting of the table as indicated by the connection's meta data, plus respecting
497         the settings "UseCatalogInSelect" and "UseSchemaInSelect", which might be present
498         in the data source which the connection belongs to.
499     */
500     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString composeTableNameForSelect(
501                             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
502                             const ::rtl::OUString& _rCatalog,
503                             const ::rtl::OUString& _rSchema,
504                             const ::rtl::OUString& _rName );
505 
506     /** composes a table name for usage in a SELECT statement
507 
508         This includes quoting of the table as indicated by the connection's meta data, plus respecting
509         the settings "UseCatalogInSelect" and "UseSchemaInSelect", which might be present
510         in the data source which the connection belongs to.
511     */
512     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString composeTableNameForSelect(
513                             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
514                             const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xTable );
515     //----------------------------------------------------------------------------------
516     /** 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>
517         @param  _xMetaData
518             The metadata from the connection.
519         @param  _xTable
520             The table.
521     */
522     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString composeTableName(
523         const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData>& _xMetaData,
524         const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xTable,
525         EComposeRule _eComposeRule,
526         bool _bSuppressCatalogName,
527         bool _bSuppressSchemaName,
528         bool _bQuote);
529 
530     //----------------------------------------------------------------------------------
531     OOO_DLLPUBLIC_DBTOOLS sal_Int32 getSearchColumnFlag( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConn,
532                                     sal_Int32 _nDataType);
533     // return the datasource for the given datasource name
534     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDataSource> getDataSource(const ::rtl::OUString& _rsDataSourceName,
535                         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory);
536 
537     /** search for a name that is NOT in the NameAcces
538         @param  _rxContainer
539             the NameAccess container to search in
540         @param  _rBaseName
541             the base name that should be used to create the new name
542         @param  _bStartWithNumber
543             When <TRUE/> the name ends with number even when the name itself doesn't occur in the collection.
544         @return
545             A name which doesn't exist in the collection.
546     */
547     OOO_DLLPUBLIC_DBTOOLS
548     ::rtl::OUString createUniqueName(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess>& _rxContainer,
549                                      const ::rtl::OUString& _rBaseName,
550                                      sal_Bool _bStartWithNumber = sal_True);
551 
552     /** creates a unique name which is not already used in the given name array
553     */
554     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString createUniqueName(
555         const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _rNames,
556         const ::rtl::OUString& _rBaseName,
557         sal_Bool _bStartWithNumber = sal_True
558     );
559 
560     /** create a name which is a valid SQL 92 identifier name
561         @param      _rName          the string which should be converted
562         @param      _rSpecials      @see com.sun.star.sdbc.XDatabaseMetaData.getExtraNameCharacters
563 
564         @see isValidSQLName
565     */
566     OOO_DLLPUBLIC_DBTOOLS ::rtl::OUString convertName2SQLName(const ::rtl::OUString& _rName,const ::rtl::OUString& _rSpecials);
567 
568     /** checks whether the given name is a valid SQL name
569 
570         @param      _rName          the string which should be converted
571         @param      _rSpecials      @see com.sun.star.sdbc.XDatabaseMetaData.getExtraNameCharacters
572 
573         @see convertName2SQLName
574     */
575     OOO_DLLPUBLIC_DBTOOLS sal_Bool isValidSQLName( const ::rtl::OUString& _rName, const ::rtl::OUString& _rSpecials );
576 
577     OOO_DLLPUBLIC_DBTOOLS
578     void showError( const SQLExceptionInfo& _rInfo,
579                     const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow>& _pParent,
580                     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory);
581 
582     /** implements <method scope="com.sun.star.sdb">XRowUpdate::updateObject</method>
583         <p>The object which is to be set is analyzed, and in case it is a simlpe scalar type for which there
584         is another updateXXX method, this other method is used.</p>
585         @param _rxUpdatedObject
586             the interface to forward all updateXXX calls to (except updateObject)
587         @param _nColumnIndex
588             the column index to update
589         @param _rValue
590             the value to update
591         @return
592             <TRUE/> if the update request was successfully re-routed to one of the other updateXXX methods
593     */
594     OOO_DLLPUBLIC_DBTOOLS
595     sal_Bool implUpdateObject(  const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowUpdate >& _rxUpdatedObject,
596                                 const sal_Int32 _nColumnIndex,
597                                 const ::com::sun::star::uno::Any& _rValue)  SAL_THROW   (   (   ::com::sun::star::sdbc::SQLException,   ::com::sun::star::uno::RuntimeException)    );
598 
599 
600 
601     /** ask the user for parameters if the prepared statement needs some and sets them in the prepared statement
602         @param _xConnection     the connection must be able to create <type scope="com::sun::star::sdb">SingleSelectQueryComposer</type>s
603         @param _xPreparedStmt   the prepared statement where the parameters could be set when needed
604         @param _aParametersSet  contains which parameters have to asked for and which already have set.
605     */
606     OOO_DLLPUBLIC_DBTOOLS
607     void askForParameters(  const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer >& _xComposer,
608                             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters>& _xParameters,
609                             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection,
610                             const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxHandler,
611                             const ::std::bit_vector& _aParametersSet = ::std::bit_vector());
612 
613     /** call the appropiate set method for the specific sql type @see com::sun::star::sdbc::DataType
614         @param  _xParams        the parameters where to set the value
615         @param  parameterIndex  the index of the parameter, 1 based
616         @param  x               the value to set
617         @param  sqlType         the corresponding sql type @see com::sun::star::sdbc::DataType
618         @param  scale           the scale of the sql type can be 0
619     */
620     OOO_DLLPUBLIC_DBTOOLS
621     void setObjectWithInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters>& _xParameters,
622                             sal_Int32 parameterIndex,
623                             const ::com::sun::star::uno::Any& x,
624                             sal_Int32 sqlType,
625                             sal_Int32 scale=0) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
626 
627     /** call the appropiate set method for the specific sql type @see com::sun::star::sdbc::DataType
628         @param  _xParams        the parameters where to set the value
629         @param  parameterIndex  the index of the parameter, 1 based
630         @param  x               the value to set
631         @param  sqlType         the corresponding sql type @see com::sun::star::sdbc::DataType
632         @param  scale           the scale of the sql type can be 0
633     */
634     OOO_DLLPUBLIC_DBTOOLS
635     void setObjectWithInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters>& _xParameters,
636                             sal_Int32 parameterIndex,
637                             const ::connectivity::ORowSetValue& x,
638                             sal_Int32 sqlType,
639                             sal_Int32 scale=0) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
640 
641 
642     /** implements <method scope="com.sun.star.sdb">XParameters::setObject</method>
643         <p>The object which is to be set is analyzed, and in case it is a simlpe scalar type for which there
644         is another setXXX method, this other method is used.</p>
645         @param _rxParameters
646             the interface to forward all setXXX calls to (except setObject)
647         @param _nColumnIndex
648             the column index to update
649         @param _rValue
650             the value to update
651         @return
652             <TRUE/> if the update request was successfully re-routed to one of the other updateXXX methods
653     */
654     OOO_DLLPUBLIC_DBTOOLS
655     sal_Bool implSetObject( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters>& _rxParameters,
656                             const sal_Int32 _nColumnIndex,
657                             const ::com::sun::star::uno::Any& _rValue) SAL_THROW ( ( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) );
658 
659     /** creates the standard sql create table statement without the key part.
660         @param  descriptor
661             The descriptor of the new table.
662         @param  _xConnection
663             The connection.
664         @param  _bAddScale
665             The scale will also be added when the value is 0.
666     */
667     OOO_DLLPUBLIC_DBTOOLS
668     ::rtl::OUString createStandardCreateStatement(  const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor,
669                                                     const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection,
670                                                     ISQLStatementHelper* _pHelper,
671                                                     const ::rtl::OUString& _sCreatePattern = ::rtl::OUString());
672 
673     /** creates the standard sql statement for the key part of a create table statement.
674         @param  descriptor
675             The descriptor of the new table.
676         @param  _xConnection
677             The connection.
678     */
679     OOO_DLLPUBLIC_DBTOOLS
680     ::rtl::OUString createStandardKeyStatement( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor,
681                                                 const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection);
682 
683     /** creates the standard sql statement for the column part of a create table statement.
684         @param  _pHelper
685             Allow to add special SQL constructs.
686         @param  descriptor
687             The descriptor of the column.
688         @param  _xConnection
689             The connection.
690         @param  _pHelper
691             Allow to add special SQL constructs.
692     */
693     OOO_DLLPUBLIC_DBTOOLS
694     ::rtl::OUString createStandardColumnPart(   const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor
695                                                 ,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection
696                                                 ,ISQLStatementHelper* _pHelper = NULL
697                                                 ,const ::rtl::OUString& _sCreatePattern = ::rtl::OUString());
698 
699     /** creates a SQL CREATE TABLE statement
700 
701         @param  descriptor
702             The descriptor of the new table.
703         @param  _xConnection
704             The connection.
705         @param  _pHelper
706             Allow to add special SQL constructs.
707         @param  _sCreatePattern
708 
709         @return
710             The CREATE TABLE statement.
711     */
712     OOO_DLLPUBLIC_DBTOOLS
713     ::rtl::OUString createSqlCreateTableStatement(  const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor
714                                                     ,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection
715                                                     ,ISQLStatementHelper* _pHelper = NULL
716                                                     ,const ::rtl::OUString& _sCreatePattern = ::rtl::OUString());
717 
718     /** creates a SDBC column with the help of getColumns.
719         @param  _xTable
720             The table.
721         @param  _rName
722             The name of the column.
723         @param  _bCase
724             Is the column case sensitive.
725         @param  _bQueryForInfo
726             If <TRUE/> the autoincrement and currency field will be read from the meta data, otherwise the following parameters will be used instead
727         @param  _bIsAutoIncrement
728             <TRUE/> if the column is an autoincrement.
729         @param  _bIsCurrency
730             <TRUE/> if the column is a currency field.
731         @param  _nDataType
732             The data type of the column.
733     */
734     OOO_DLLPUBLIC_DBTOOLS
735     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>
736             createSDBCXColumn(  const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xTable,
737                                 const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection,
738                                 const ::rtl::OUString& _rName,
739                                 sal_Bool _bCase,
740                                 sal_Bool _bQueryForInfo = sal_True,
741                                 sal_Bool _bIsAutoIncrement = sal_False,
742                                 sal_Bool _bIsCurrency = sal_False,
743                                 sal_Int32 _nDataType = com::sun::star::sdbc::DataType::OTHER);
744 
745     /** tries to locate the corresponding DataDefinitionSupplier for the given url and connection
746         @param  _rsUrl
747             The URL used to connect to the database.
748         @param  _xConnection
749             The connection used to find the correct driver.
750         @param  _rxFactory
751             Used to create the drivermanager.
752         @return
753             The datadefintion object.
754     */
755     OOO_DLLPUBLIC_DBTOOLS ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier> getDataDefinitionByURLAndConnection(
756             const ::rtl::OUString& _rsUrl,
757             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection,
758             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory);
759 
760     /** returns the table privileges to the given parameters
761         @param  _xMetaData
762             The meta data.
763         @param  _sCatalog
764             contains the catalog name
765         @param  _sSchema
766             contains the schema name
767         @param  _sTable
768             contains the table name
769     */
770     OOO_DLLPUBLIC_DBTOOLS
771     sal_Int32 getTablePrivileges(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData>& _xMetaData,
772                                  const ::rtl::OUString& _sCatalog,
773                                  const ::rtl::OUString& _sSchema,
774                                  const ::rtl::OUString& _sTable);
775 
776     typedef ::std::pair<sal_Bool,sal_Bool> TBoolPair;
777     typedef ::std::pair< TBoolPair,sal_Int32 > ColumnInformation;
778     typedef ::std::multimap< ::rtl::OUString, ColumnInformation, ::comphelper::UStringMixLess> ColumnInformationMap;
779     /** collects the information about auto increment, currency and data type for the given column name.
780         The column must be quoted, * is also valid.
781         @param  _xConnection
782             The connection.
783         @param  _sComposedTableName
784             The quoted table name. ccc.sss.ttt
785         @param  _sName
786             The name of the column, or *
787         @param  _rInfo
788             The information about the column(s).
789     */
790     OOO_DLLPUBLIC_DBTOOLS
791     void collectColumnInformation(  const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection,
792                                     const ::rtl::OUString& _sComposedTableName,
793                                     const ::rtl::OUString& _rName,
794                                     ColumnInformationMap& _rInfo);
795 
796 
797     /** adds a boolean comparison clause to the given SQL predicate
798 
799         @param _rExpression
800             the expression which is to be compared with a boolean value
801         @param _bValue
802             the boolean value which the expression is to be compared with
803         @param _nBooleanComparisonMode
804             the boolean comparison mode to be used. Usually obtained from
805             a css.sdb.DataSource's Settings member.
806         @param _out_rSQLPredicate
807             the buffer to which the comparison predicate will be appended
808     */
809     OOO_DLLPUBLIC_DBTOOLS void getBoleanComparisonPredicate(
810             const ::rtl::OUString& _rExpression,
811             const sal_Bool  _bValue,
812             const sal_Int32 _nBooleanComparisonMode,
813             ::rtl::OUStringBuffer& _out_rSQLPredicate
814         );
815 
816 //.........................................................................
817 }   // namespace dbtools
818 //.........................................................................
819 
820 #endif // _CONNECTIVITY_DBTOOLS_HXX_
821 
822