LibreOffice Module dbaccess (master) 1
statement.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <statement.hxx>
21#include "resultset.hxx"
22#include <stringconstants.hxx>
23#include <strings.hxx>
24#include <com/sun/star/lang/XMultiServiceFactory.hpp>
25#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
26#include <com/sun/star/sdbc/SQLException.hpp>
31#include <comphelper/types.hxx>
34
35using namespace ::com::sun::star::sdb;
36using namespace ::com::sun::star::sdbc;
37using namespace ::com::sun::star::beans;
38using namespace ::com::sun::star::uno;
39using namespace ::com::sun::star::lang;
40using namespace ::cppu;
41using namespace ::osl;
42using namespace dbaccess;
43using namespace dbtools;
44
45
46OStatementBase::OStatementBase(const Reference< XConnection > & _xConn,
47 const Reference< XInterface > & _xStatement)
48 :OSubComponent(m_aMutex, _xConn)
50 ,m_bUseBookmarks( false )
51 ,m_bEscapeProcessing( true )
52
53{
54 OSL_ENSURE(_xStatement.is() ,"Statement is NULL!");
55 m_xAggregateAsSet.set(_xStatement,UNO_QUERY);
57}
58
60{
61}
62
63// css::lang::XTypeProvider
64Sequence< Type > OStatementBase::getTypes()
65{
71 OSubComponent::getTypes() );
72 Reference< XGeneratedResultSet > xGRes(m_xAggregateAsSet, UNO_QUERY);
73 if ( xGRes.is() )
74 aTypes = OTypeCollection(cppu::UnoType<XGeneratedResultSet>::get(),aTypes.getTypes());
75 Reference< XPreparedBatchExecution > xPreparedBatchExecution(m_xAggregateAsSet, UNO_QUERY);
76 if ( xPreparedBatchExecution.is() )
77 aTypes = OTypeCollection(cppu::UnoType<XPreparedBatchExecution>::get(),aTypes.getTypes());
78
79 return aTypes.getTypes();
80}
81
82// css::uno::XInterface
84{
85 Any aIface = OSubComponent::queryInterface( rType );
86 if (!aIface.hasValue())
87 {
88 aIface = ::cppu::queryInterface(
89 rType,
90 static_cast< XPropertySet * >( this ),
91 static_cast< XWarningsSupplier * >( this ),
92 static_cast< XCloseable * >( this ),
93 static_cast< XMultipleResults * >( this ),
94 static_cast< css::util::XCancellable * >( this ));
95 if ( !aIface.hasValue() )
96 {
97 Reference< XGeneratedResultSet > xGRes(m_xAggregateAsSet, UNO_QUERY);
98 if ( cppu::UnoType<XGeneratedResultSet>::get()== rType && xGRes.is() )
99 aIface = ::cppu::queryInterface(rType,static_cast< XGeneratedResultSet * >( this ));
100 }
101 if ( !aIface.hasValue() )
102 {
103 Reference< XPreparedBatchExecution > xGRes(m_xAggregateAsSet, UNO_QUERY);
104 if ( cppu::UnoType<XPreparedBatchExecution>::get()== rType && xGRes.is() )
105 aIface = ::cppu::queryInterface(rType,static_cast< XPreparedBatchExecution * >( this ));
106 }
107 }
108 return aIface;
109}
110
112{
113 OSubComponent::acquire();
114}
117{
119}
120
122{
123 // free the cursor if alive
124 Reference< XComponent > xComp(m_aResultSet.get(), UNO_QUERY);
125 if (xComp.is())
126 xComp->dispose();
127 m_aResultSet.clear();
128}
129
130// OComponentHelper
132{
133 OPropertySetHelper::disposing();
134
135 MutexGuard aGuard(m_aMutex);
136
137 // free pending results
139
140 // free the original statement
141 {
142 MutexGuard aCancelGuard(m_aCancelMutex);
144 }
145
146 if ( m_xAggregateAsSet.is() )
147 {
148 try
149 {
150 Reference< XCloseable > (m_xAggregateAsSet, UNO_QUERY_THROW)->close();
151 }
152 catch(RuntimeException& )
153 {// don't care for anymore
154 }
155 }
156 m_xAggregateAsSet = nullptr;
157
158 // free the parent at last
159 OSubComponent::disposing();
160}
161
162// XCloseable
164{
165 {
166 MutexGuard aGuard( m_aMutex );
167 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
168 }
169 dispose();
170}
171
172// OPropertySetHelper
173Reference< XPropertySetInfo > OStatementBase::getPropertySetInfo()
174{
176}
177
178// comphelper::OPropertyArrayUsageHelper
180{
181 return new ::cppu::OPropertyArrayHelper
182 {
183 {
194 }
195 };
196}
197
198// cppu::OPropertySetHelper
200{
201 return *getArrayHelper();
202}
203
204sal_Bool OStatementBase::convertFastPropertyValue(Any & rConvertedValue, Any & rOldValue, sal_Int32 nHandle, const Any& rValue )
205{
206 bool bModified(false);
207 switch (nHandle)
208 {
210 bModified = ::comphelper::tryPropertyValue( rConvertedValue, rOldValue, rValue, m_bUseBookmarks );
211 break;
212
214 bModified = ::comphelper::tryPropertyValue( rConvertedValue, rOldValue, rValue, m_bEscapeProcessing );
215 break;
216
217 default:
218 if ( m_xAggregateAsSet.is() )
219 {
220 // get the property name
221 OUString sPropName;
222 getInfoHelper().fillPropertyMembersByHandle( &sPropName, nullptr, nHandle );
223
224 // now set the value
225 Any aCurrentValue = m_xAggregateAsSet->getPropertyValue( sPropName );
226 if ( aCurrentValue != rValue )
227 {
228 rOldValue = aCurrentValue;
229 rConvertedValue = rValue;
230 bModified = true;
231 }
232 }
233 break;
234 }
235 return bModified;
236}
237
238void OStatementBase::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue )
239{
240 switch ( nHandle )
241 {
243 {
244 m_bUseBookmarks = ::comphelper::getBOOL( rValue );
245 if ( m_xAggregateAsSet.is() && m_xAggregateAsSet->getPropertySetInfo()->hasPropertyByName( PROPERTY_USEBOOKMARKS ) )
246 m_xAggregateAsSet->setPropertyValue( PROPERTY_USEBOOKMARKS, rValue );
247 }
248 break;
249
251 m_bEscapeProcessing = ::comphelper::getBOOL( rValue );
252 if ( m_xAggregateAsSet.is() )
253 m_xAggregateAsSet->setPropertyValue( PROPERTY_ESCAPE_PROCESSING, rValue );
254 break;
255
256 default:
257 if ( m_xAggregateAsSet.is() )
258 {
259 OUString sPropName;
260 getInfoHelper().fillPropertyMembersByHandle( &sPropName, nullptr, nHandle );
261 m_xAggregateAsSet->setPropertyValue( sPropName, rValue );
262 }
263 break;
264 }
265}
266
267void OStatementBase::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const
268{
269 switch (nHandle)
270 {
272 rValue <<= m_bUseBookmarks;
273 break;
274
276 // don't rely on our aggregate - if it implements this wrong, and always returns
277 // TRUE here, then we would loop in impl_doEscapeProcessing_nothrow
278 rValue <<= m_bEscapeProcessing;
279 break;
280
281 default:
282 if ( m_xAggregateAsSet.is() )
283 {
284 OUString sPropName;
285 const_cast< OStatementBase* >( this )->getInfoHelper().fillPropertyMembersByHandle( &sPropName, nullptr, nHandle );
286 rValue = m_xAggregateAsSet->getPropertyValue( sPropName );
287 }
288 break;
289 }
290}
291
292// XWarningsSupplier
294{
295 MutexGuard aGuard(m_aMutex);
296 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
297
298 return Reference< XWarningsSupplier >(m_xAggregateAsSet, UNO_QUERY_THROW)->getWarnings();
299}
300
302{
303 MutexGuard aGuard(m_aMutex);
304 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
305
306 Reference< XWarningsSupplier >(m_xAggregateAsSet, UNO_QUERY_THROW)->clearWarnings();
307}
308
309// css::util::XCancellable
311{
312 // no blocking as cancel is typically called from a different thread
313 MutexGuard aCancelGuard(m_aCancelMutex);
316 // else do nothing
317}
318
319// XMultipleResults
320Reference< XResultSet > SAL_CALL OStatementBase::getResultSet( )
321{
322 MutexGuard aGuard(m_aMutex);
323 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
324
325 // first check the meta data
326 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
327 if (!xMeta.is() || !xMeta->supportsMultipleResultSets())
329
330 return Reference< XMultipleResults >(m_xAggregateAsSet, UNO_QUERY_THROW)->getResultSet();
331}
332
334{
335 MutexGuard aGuard(m_aMutex);
336 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
337
338 // first check the meta data
339 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
340 if (!xMeta.is() || !xMeta->supportsMultipleResultSets())
342
343 return Reference< XMultipleResults >(m_xAggregateAsSet, UNO_QUERY_THROW)->getUpdateCount();
344}
345
347{
348 MutexGuard aGuard(m_aMutex);
349 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
350
351 // first check the meta data
352 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
353 if (!xMeta.is() || !xMeta->supportsMultipleResultSets())
355
356 // free the previous results
358
359 return Reference< XMultipleResults >(m_xAggregateAsSet, UNO_QUERY_THROW)->getMoreResults();
360}
361
362// XPreparedBatchExecution
364{
365 MutexGuard aGuard(m_aMutex);
366 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
367
368 // first check the meta data
369 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
370 if (!xMeta.is() || !xMeta->supportsBatchUpdates())
372
373 Reference< XPreparedBatchExecution >(m_xAggregateAsSet, UNO_QUERY_THROW)->addBatch();
374}
375
377{
378 MutexGuard aGuard(m_aMutex);
379 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
380
381 // first check the meta data
382 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
383 if (!xMeta.is() || !xMeta->supportsBatchUpdates())
385
386 Reference< XPreparedBatchExecution >(m_xAggregateAsSet, UNO_QUERY_THROW)->clearBatch();
387}
388
389Sequence< sal_Int32 > SAL_CALL OStatementBase::executeBatch( )
390{
391 MutexGuard aGuard(m_aMutex);
392 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
393
394 // first check the meta data
395 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
396 if (!xMeta.is() || !xMeta->supportsBatchUpdates())
398
399 // free the previous results
401
402 return Reference< XPreparedBatchExecution >(m_xAggregateAsSet, UNO_QUERY_THROW)->executeBatch();
403}
404
405Reference< XResultSet > SAL_CALL OStatementBase::getGeneratedValues( )
406{
407 MutexGuard aGuard(m_aMutex);
408 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
409 Reference< XGeneratedResultSet > xGRes(m_xAggregateAsSet, UNO_QUERY);
410
411 if ( xGRes.is() )
412 return xGRes->getGeneratedValues( );
413 return Reference< XResultSet >();
414}
415
416
417// OStatement
418
419OStatement::OStatement( const Reference< XConnection >& _xConn, const Reference< XInterface > & _xStatement )
420 :OStatementBase( _xConn, _xStatement )
421 ,m_bAttemptedComposerCreation( false )
422{
423 m_xAggregateStatement.set( _xStatement, UNO_QUERY_THROW );
424}
425
428
429// XServiceInfo
431{
432 return "com.sun.star.sdb.OStatement";
433}
434
435sal_Bool OStatement::supportsService( const OUString& _rServiceName )
436{
437 return cppu::supportsService(this, _rServiceName);
438}
439
441{
442 return { SERVICE_SDBC_STATEMENT };
443}
444
445// XStatement
446Reference< XResultSet > OStatement::executeQuery( const OUString& _rSQL )
447{
448 MutexGuard aGuard(m_aMutex);
449 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
450
452 Reference< XResultSet > xResultSet;
453
454 OUString sSQL( impl_doEscapeProcessing_nothrow( _rSQL ) );
455
456 Reference< XResultSet > xInnerResultSet = m_xAggregateStatement->executeQuery( sSQL );
457 Reference< XConnection > xConnection( m_xParent, UNO_QUERY_THROW );
458
459 if ( xInnerResultSet.is() )
460 {
461 Reference< XDatabaseMetaData > xMeta = xConnection->getMetaData();
462 bool bCaseSensitive = xMeta.is() && xMeta->supportsMixedCaseQuotedIdentifiers();
463 xResultSet = new OResultSet( xInnerResultSet, *this, bCaseSensitive );
464
465 // keep the resultset weak
466 m_aResultSet = xResultSet;
467 }
468
469 return xResultSet;
470}
471
472sal_Int32 OStatement::executeUpdate( const OUString& _rSQL )
473{
474 MutexGuard aGuard(m_aMutex);
475 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
476
478
479 OUString sSQL( impl_doEscapeProcessing_nothrow( _rSQL ) );
480 return m_xAggregateStatement->executeUpdate( sSQL );
481}
482
483sal_Bool OStatement::execute( const OUString& _rSQL )
484{
485 MutexGuard aGuard(m_aMutex);
486 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
487
489
490 OUString sSQL( impl_doEscapeProcessing_nothrow( _rSQL ) );
491 return m_xAggregateStatement->execute( sSQL );
492}
493
494void OStatement::addBatch( const OUString& _rSQL )
495{
496 MutexGuard aGuard(m_aMutex);
497 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
498
499 // first check the meta data
500 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
501 if (!xMeta.is() || !xMeta->supportsBatchUpdates())
503
504 OUString sSQL( impl_doEscapeProcessing_nothrow( _rSQL ) );
505 Reference< XBatchExecution >(m_xAggregateAsSet, UNO_QUERY_THROW)->addBatch( sSQL );
506}
507
509{
510 MutexGuard aGuard(m_aMutex);
511 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
512 // first check the meta data
513 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
514 if (!xMeta.is() || !xMeta->supportsBatchUpdates())
516
517 Reference< XBatchExecution >(m_xAggregateAsSet, UNO_QUERY_THROW)->clearBatch();
518}
519
520Sequence< sal_Int32 > OStatement::executeBatch( )
521{
522 MutexGuard aGuard(m_aMutex);
523 ::connectivity::checkDisposed(WeakComponentImplHelper::rBHelper.bDisposed);
524 // first check the meta data
525 Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY_THROW)->getMetaData();
526 if (!xMeta.is() || !xMeta->supportsBatchUpdates())
528 return Reference< XBatchExecution >(m_xAggregateAsSet, UNO_QUERY_THROW)->executeBatch( );
529}
530
531
532Reference< XConnection > OStatement::getConnection()
533{
534 return Reference< XConnection >( m_xParent, UNO_QUERY );
535}
536
538{
540 m_xComposer.clear();
541 m_xAggregateStatement.clear();
542}
543
544OUString OStatement::impl_doEscapeProcessing_nothrow( const OUString& _rSQL ) const
545{
546 if ( !m_bEscapeProcessing )
547 return _rSQL;
548 try
549 {
551 return _rSQL;
552
553 bool bParseable = false;
554 try { m_xComposer->setQuery( _rSQL ); bParseable = true; }
555 catch( const SQLException& ) { }
556
557 if ( !bParseable )
558 // if we cannot parse it, silently accept this. The driver is probably able to cope with it then
559 return _rSQL;
560
561 OUString sLowLevelSQL = m_xComposer->getQueryWithSubstitution();
562 return sLowLevelSQL;
563 }
564 catch( const Exception& )
565 {
566 DBG_UNHANDLED_EXCEPTION("dbaccess");
567 }
568
569 return _rSQL;
570}
571
573{
575 return m_xComposer.is();
576
577 const_cast< OStatement* >( this )->m_bAttemptedComposerCreation = true;
578 try
579 {
580 Reference< XMultiServiceFactory > xFactory( m_xParent, UNO_QUERY_THROW );
581 const_cast< OStatement* >( this )->m_xComposer.set( xFactory->createInstance( SERVICE_NAME_SINGLESELECTQUERYCOMPOSER ), UNO_QUERY_THROW );
582 }
583 catch( const Exception& )
584 {
585 DBG_UNHANDLED_EXCEPTION("dbaccess");
586 }
587
588 return m_xComposer.is();
589}
590
591/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual void SAL_CALL acquire() noexcept override
Definition: statement.cxx:111
bool m_bUseBookmarks
Definition: statement.hxx:58
virtual sal_Int32 SAL_CALL getUpdateCount() override
Definition: statement.cxx:333
virtual void SAL_CALL clearWarnings() override
Definition: statement.cxx:301
virtual css::uno::Sequence< sal_Int32 > SAL_CALL executeBatch() override
Definition: statement.cxx:389
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
Definition: statement.cxx:64
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) override
Definition: statement.cxx:83
virtual ::cppu::IPropertyArrayHelper &SAL_CALL getInfoHelper() override
Definition: statement.cxx:199
css::uno::WeakReferenceHelper m_aResultSet
Definition: statement.hxx:55
virtual sal_Bool SAL_CALL convertFastPropertyValue(css::uno::Any &rConvertedValue, css::uno::Any &rOldValue, sal_Int32 nHandle, const css::uno::Any &rValue) override
Definition: statement.cxx:204
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getGeneratedValues() override
Definition: statement.cxx:405
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getResultSet() override
Definition: statement.cxx:320
virtual css::uno::Any SAL_CALL getWarnings() override
Definition: statement.cxx:293
virtual void SAL_CALL clearBatch() override
Definition: statement.cxx:376
virtual void SAL_CALL close() override
Definition: statement.cxx:163
virtual void SAL_CALL release() noexcept override
Definition: statement.cxx:116
virtual sal_Bool SAL_CALL getMoreResults() override
Definition: statement.cxx:346
OStatementBase(const css::uno::Reference< css::sdbc::XConnection > &_xConn, const css::uno::Reference< css::uno::XInterface > &_xStatement)
Definition: statement.cxx:46
virtual void SAL_CALL disposing() override
Definition: statement.cxx:131
void disposeResultSet()
Definition: statement.cxx:121
bool m_bEscapeProcessing
Definition: statement.hxx:59
virtual void SAL_CALL addBatch() override
Definition: statement.cxx:363
virtual ::cppu::IPropertyArrayHelper * createArrayHelper() const override
Definition: statement.cxx:179
css::uno::Reference< css::util::XCancellable > m_xAggregateAsCancellable
Definition: statement.hxx:57
virtual ~OStatementBase() override
Definition: statement.cxx:59
virtual void SAL_CALL cancel() override
Definition: statement.cxx:310
::osl::Mutex m_aCancelMutex
Definition: statement.hxx:53
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
Definition: statement.cxx:173
virtual void SAL_CALL getFastPropertyValue(css::uno::Any &rValue, sal_Int32 nHandle) const override
Definition: statement.cxx:267
css::uno::Reference< css::beans::XPropertySet > m_xAggregateAsSet
Definition: statement.hxx:56
virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const css::uno::Any &rValue) override
Definition: statement.cxx:238
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
Definition: statement.cxx:435
OStatement(const css::uno::Reference< css::sdbc::XConnection > &_xConn, const css::uno::Reference< css::uno::XInterface > &_xStatement)
OUString impl_doEscapeProcessing_nothrow(const OUString &_rSQL) const
does escape processing for the given SQL command, if the our EscapeProcessing property allows so.
Definition: statement.cxx:544
css::uno::Reference< css::sdbc::XStatement > m_xAggregateStatement
Definition: statement.hxx:139
bool m_bAttemptedComposerCreation
Definition: statement.hxx:141
virtual css::uno::Sequence< sal_Int32 > SAL_CALL executeBatch() override
Definition: statement.cxx:520
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Definition: statement.cxx:440
virtual sal_Int32 SAL_CALL executeUpdate(const OUString &sql) override
Definition: statement.cxx:472
virtual sal_Bool SAL_CALL execute(const OUString &sql) override
Definition: statement.cxx:483
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery(const OUString &sql) override
Definition: statement.cxx:446
css::uno::Reference< css::sdb::XSingleSelectQueryComposer > m_xComposer
Definition: statement.hxx:140
virtual OUString SAL_CALL getImplementationName() override
Definition: statement.cxx:430
virtual void SAL_CALL disposing() override
Definition: statement.cxx:537
virtual void SAL_CALL addBatch() override
Definition: statement.cxx:363
virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection() override
Definition: statement.cxx:532
bool impl_ensureComposer_nothrow() const
Definition: statement.cxx:572
virtual void SAL_CALL clearBatch() override
Definition: statement.cxx:508
css::uno::Reference< css::uno::XInterface > m_xParent
Definition: apitools.hxx:33
virtual void SAL_CALL release() noexcept override
Definition: apitools.cxx:46
mutable::osl::Mutex m_aMutex
virtual sal_Bool SAL_CALL fillPropertyMembersByHandle(::rtl::OUString *pPropName, sal_Int16 *pAttributes, sal_Int32 nHandle)=0
static css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL createPropertySetInfo(IPropertyArrayHelper &rProperties)
css::uno::Type const & get()
#define DBG_UNHANDLED_EXCEPTION(...)
Reference< XSingleServiceFactory > xFactory
std::mutex m_aMutex
@ Exception
class SAL_NO_VTABLE XPropertySet
Type
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
void throwFunctionSequenceException(const Reference< XInterface > &Context, const Any &Next)
void dispose()
sal_Int32 nHandle
IMPLEMENT_FORWARD_XTYPEPROVIDER2(OStatement, OStatementBase, OStatement_IFACE)
IMPLEMENT_FORWARD_XINTERFACE2(OStatement, OStatementBase, OStatement_IFACE)
#define PROPERTY_ID_RESULTSETTYPE
#define PROPERTY_ID_QUERYTIMEOUT
#define PROPERTY_ID_ESCAPE_PROCESSING
#define PROPERTY_ID_USEBOOKMARKS
#define PROPERTY_ID_CURSORNAME
#define PROPERTY_ID_RESULTSETCONCURRENCY
#define PROPERTY_ID_MAXFIELDSIZE
#define PROPERTY_ID_FETCHSIZE
#define PROPERTY_ID_MAXROWS
#define PROPERTY_ID_FETCHDIRECTION
constexpr OUStringLiteral PROPERTY_FETCHDIRECTION(u"FetchDirection")
constexpr OUStringLiteral PROPERTY_RESULTSETCONCURRENCY(u"ResultSetConcurrency")
constexpr OUStringLiteral PROPERTY_RESULTSETTYPE(u"ResultSetType")
constexpr OUStringLiteral SERVICE_SDBC_STATEMENT
Definition: strings.hxx:166
constexpr OUStringLiteral PROPERTY_QUERYTIMEOUT(u"QueryTimeOut")
constexpr OUStringLiteral SERVICE_NAME_SINGLESELECTQUERYCOMPOSER
Definition: strings.hxx:201
constexpr OUStringLiteral PROPERTY_MAXFIELDSIZE(u"MaxFieldSize")
constexpr OUStringLiteral PROPERTY_MAXROWS(u"MaxRows")
constexpr OUStringLiteral PROPERTY_ESCAPE_PROCESSING(u"EscapeProcessing")
constexpr OUStringLiteral PROPERTY_USEBOOKMARKS(u"UseBookmarks")
constexpr OUStringLiteral PROPERTY_FETCHSIZE(u"FetchSize")
constexpr OUStringLiteral PROPERTY_CURSORNAME(u"CursorName")
unsigned char sal_Bool
const SvXMLTokenMapEntry aTypes[]