30#include <core_resource.hxx>
39#include <com/sun/star/beans/PropertyAttribute.hpp>
40#include <com/sun/star/frame/XStorable.hpp>
41#include <com/sun/star/sdb/DatabaseContext.hpp>
42#include <com/sun/star/sdb/SQLContext.hpp>
43#include <com/sun/star/sdbc/ConnectionPool.hpp>
44#include <com/sun/star/sdbc/XDriver.hpp>
45#include <com/sun/star/task/InteractionHandler.hpp>
46#include <com/sun/star/ucb/AuthenticationRequest.hpp>
52#include <osl/file.hxx>
54#include <osl/diagnose.h>
56#include <typelib/typedescription.hxx>
84 bool implCheckItemType(
SfxItemSet const & _rSet,
const sal_uInt16 _nId,
const std::function<
bool (
const SfxPoolItem* )>& isItemType )
86 bool bCorrectType =
false;
89 OSL_ENSURE( pPool,
"implCheckItemType: invalid item pool!" );
93 bCorrectType = isItemType(&rDefItem);
103 _rxSet->setPropertyValue(_rName, _rValue);
107 SAL_WARN(
"dbaccess",
"ODbAdminDialog::implTranslateProperty: could not set the property "
117 if ( _pHostName && _pHostName->
GetValue().getLength() )
122 sNewUrl +=
":" + OUString::number(_pPortNumber->
GetValue());
133 , m_pItemSetHelper(_pItemSetHelper)
203 OSL_ENSURE(
m_pItemSetHelper->
getOutputSet(),
"ODbDataSourceAdministrationHelper::getCurrentSettings : not to be called without an example set!");
207 std::vector< PropertyValue > aReturn;
212 if (pUser && pUser->
GetValue().getLength())
213 aReturn.emplace_back(
"user", 0,
214 Any(pUser->
GetValue()), PropertyState_DIRECT_VALUE);
221 OUString sPassword = pPassword ? pPassword->
GetValue() : OUString();
224 if ((!pPassword || !pPassword->
GetValue().getLength()) && (pPasswordRequired && pPasswordRequired->
GetValue()))
232 if ( !xHandler.is() )
239 OUString sLoginRequest(
DBA_RES(STR_ENTER_CONNECTION_PASSWORD));
240 OUString sTemp =
sName;
242 if ( !
sName.isEmpty() )
243 sLoginRequest = sLoginRequest.replaceAll(
"$name$",
sName);
246 sLoginRequest = sLoginRequest.replaceAll(
"\"$name$\"",
"");
248 sLoginRequest = sLoginRequest.replaceAll(
"$name$",
"");
252 AuthenticationRequest aRequest;
253 aRequest.ServerName =
sName;
254 aRequest.Diagnostic = sLoginRequest;
255 aRequest.HasRealm =
false;
257 aRequest.HasUserName = pUser !=
nullptr;
258 aRequest.UserName = pUser ? pUser->
GetValue() : OUString();
259 aRequest.HasPassword =
true;
261 aRequest.HasAccount =
false;
270 pAuthenticate->setCanChangeUserName(
false );
271 pAuthenticate->setRememberPassword( RememberAuthentication_SESSION );
274 pRequest->addContinuation(pAbort);
275 pRequest->addContinuation(pAuthenticate);
282 xHandler->handle(pRequest);
288 if (!pAuthenticate->wasSelected())
291 sPassword = pAuthenticate->getPassword();
292 if (pAuthenticate->getRememberPassword())
296 if (!sPassword.isEmpty())
297 aReturn.emplace_back(
"password", 0,
298 Any(sPassword), PropertyState_DIRECT_VALUE);
301 if ( !aReturn.empty() )
312 OSL_ENSURE(
m_pItemSetHelper->
getOutputSet(),
"ODbDataSourceAdministrationHelper::successfullyConnected: not to be called without an example set!");
319 if (pPassword && (0 != pPassword->
GetValue().getLength()))
321 OUString sPassword = pPassword->
GetValue();
337 std::pair< Reference<XConnection>,
bool> aRet;
357 if ( aRet.first.is() )
373 OUString sCurrentActionError =
DBA_RES(STR_COULDNOTCREATE_DRIVERMANAGER);
374 sCurrentActionError = sCurrentActionError.replaceFirst(
"#servicename#",
"com.sun.star.sdbc.ConnectionPool");
378 xDriverManager.set( ConnectionPool::create(
getORB() ) );
384 throw SQLException(sCurrentActionError,
getORB(),
"S1000", 0, anyEx);
390 sCurrentActionError =
DBA_RES(STR_NOREGISTEREDDRIVER);
391 sCurrentActionError = sCurrentActionError.replaceFirst(
"#connurl#", _sURL);
393 throw SQLException(sCurrentActionError,
getORB(),
"S1000", 0,
Any());
405 OUString sCurrentDatasource;
407 OSL_ENSURE(!sCurrentDatasource.isEmpty(),
"No datasource name given!");
428 OSL_ENSURE(
m_xDatasource.is(),
"ODbDataSourceAdministrationHelper::getCurrentDataSource: no data source!");
435 OSL_ENSURE( pConnectURL ,
"ODbDataSourceAdministrationHelper::getDatasourceType: invalid items in the source set!" );
437 OSL_ENSURE(pTypeCollection,
"ODbDataSourceAdministrationHelper::getDatasourceType: invalid items in the source set!");
456 OSL_ENSURE(pUrlItem,
"Connection URL is NULL. -> GPF!");
457 OSL_ENSURE(pTypeCollection,
"ODbDataSourceAdministrationHelper::getDatasourceType: invalid items in the source set!");
459 OSL_ENSURE(pCollection,
"ODbDataSourceAdministrationHelper::getDatasourceType: invalid type collection!");
472 OUString sNewFileName;
473 if ( ::osl::FileBase::getSystemPathFromFileURL( sFileName, sNewFileName ) == ::osl::FileBase::E_None )
475 sNewUrl += sNewFileName;
485 sNewUrl = lcl_createHostWithPort(pHostName,pPortNumber);
486 OUString sDatabaseName = pDatabaseName ? pDatabaseName->GetValue() : OUString();
487 if ( !sDatabaseName.getLength() && pUrlItem )
493 if ( !sDatabaseName.isEmpty() )
495 sNewUrl +=
"/" + sDatabaseName;
504 if ( pHostName && pHostName->
GetValue().getLength() )
506 sNewUrl =
"@" + lcl_createHostWithPort(pHostName,pPortNumber);
507 OUString sDatabaseName = pDatabaseName ? pDatabaseName->GetValue() : OUString();
508 if ( sDatabaseName.isEmpty() && pUrlItem )
510 if ( !sDatabaseName.isEmpty() )
512 sNewUrl +=
":" + sDatabaseName;
524 sNewUrl = pCollection->
cutPrefix(pUrlItem->
GetValue()) + lcl_createHostWithPort(
nullptr,pPortNumber);
534 if (pHostName && pHostName->
GetValue().getLength())
536 OUString hostname( pHostName->
GetValue() );
537 hostname = hostname.replaceAll(
"\\",
"\\\\");
538 hostname = hostname.replaceAll(
"\'",
"\\'");
539 hostname =
"'" + hostname +
"'";
540 rURL +=
" host=" + hostname;
542 if (pPortNumber && pPortNumber->GetValue())
544 OUString port =
"'" + OUString::number(pPortNumber->GetValue()) +
"'";
545 rURL +=
" port=" + port;
547 if (pDatabaseName && pDatabaseName->GetValue().getLength())
549 OUString dbname( pDatabaseName->GetValue() );
550 dbname = dbname.replaceAll(
"\\",
"\\\\");
551 dbname = dbname.replaceAll(
"\'",
"\\'");
552 dbname =
"'" + dbname +
"'";
553 rURL +=
" dbname=" + dbname;
564 if ( !sNewUrl.isEmpty() )
574struct PropertyValueLess
576 bool operator() (
const PropertyValue& x,
const PropertyValue& y)
const
577 {
return x.Name <
y.Name; }
594 aValue = _rxSource->getPropertyValue(elem.second);
598 SAL_WARN(
"dbaccess",
"ODbDataSourceAdministrationHelper::translateProperties: could not extract the property "
609 _rxSource->getPropertyValue(
PROPERTY_INFO) >>= aAdditionalInfo;
615 for (
const PropertyValue& rAdditionalInfo : std::as_const(aAdditionalInfo))
617 if( rAdditionalInfo.Name ==
"JDBCDRV" )
619 PropertyValue aCompatibility(rAdditionalInfo);
620 aCompatibility.Name =
"JavaDriverClass";
621 aInfos.insert(aCompatibility);
624 aInfos.insert(rAdditionalInfo);
630 PropertyValue aSearchFor;
633 aSearchFor.Name = elem.second;
634 PropertyValueSet::const_iterator aInfoPos =
aInfos.find(aSearchFor);
635 if (
aInfos.end() != aInfoPos)
658 OSL_ENSURE(_rxDest.is(),
"ODbDataSourceAdministrationHelper::translateProperties: invalid property set!");
664 try { xInfo = _rxDest->getPropertySetInfo(); }
665 catch(Exception&) { }
667 static constexpr OUStringLiteral sUrlProp(u
"URL");
671 const SfxPoolItem* pCurrentItem = _rSource.
GetItem(
static_cast<sal_uInt16
>(elem.first));
674 sal_Int16
nAttributes = PropertyAttribute::READONLY;
677 try {
nAttributes = xInfo->getPropertyByName(elem.second).Attributes; }
678 catch(Exception&) { }
680 if ((nAttributes & PropertyAttribute::READONLY) == 0)
682 if ( sUrlProp == elem.second )
686 lcl_putProperty(_rxDest, elem.second,aValue);
702 catch(Exception&) { }
718 const ::connectivity::DriversConfig aDriverConfig(
getORB());
719 const ::comphelper::NamedValueCollection&
aProperties = aDriverConfig.getProperties(
eType);
723 MapInt2String::const_iterator aTranslation;
735 if ( !sCharSet.isEmpty() )
736 aRelevantSettings.insert(PropertyValue(aTranslation->second, 0,
Any(sCharSet), PropertyState_DIRECT_VALUE));
739 aRelevantSettings.insert(PropertyValue(aTranslation->second, 0,
implTranslateProperty(pCurrent), PropertyState_DIRECT_VALUE));
748 PropertyValue* pInfo = _rInfo.getArray();
749 PropertyValue aSearchFor;
750 sal_Int32 nObsoleteSetting = -1;
751 sal_Int32
nCount = _rInfo.getLength();
752 for (sal_Int32
i = 0;
i <
nCount; ++
i, ++pInfo)
754 aSearchFor.Name = pInfo->Name;
755 PropertyValueSet::const_iterator aOverwrittenSetting = aRelevantSettings.find(aSearchFor);
756 if (aRelevantSettings.end() != aOverwrittenSetting)
758 if ( pInfo->Value != aOverwrittenSetting->Value )
759 *pInfo = *aOverwrittenSetting;
760 aRelevantSettings.erase(aOverwrittenSetting);
762 else if( pInfo->Name ==
"JDBCDRV" )
764 nObsoleteSetting =
i;
767 aPreservedSettings[
i] = pInfo->Name;
769 if (-1 != nObsoleteSetting)
770 ::comphelper::removeElementAt(_rInfo, nObsoleteSetting);
772 if ( !aPreservedSettings.empty() )
779 std::set<OUString> aIndirectProps;
782 std::inserter(aIndirectProps,aIndirectProps.begin()),
786 std::vector< sal_Int32 > aRemoveIndexes;
787 sal_Int32 nPositionCorrector = 0;
788 for (
auto const& preservedSetting : aPreservedSettings)
790 if (aIndirectProps.end() != aIndirectProps.find(preservedSetting.second))
792 aRemoveIndexes.push_back(preservedSetting.first - nPositionCorrector);
793 ++nPositionCorrector;
797 for (
auto const& removeIndex : aRemoveIndexes)
798 ::comphelper::removeElementAt(_rInfo, removeIndex);
802 aTypeSettings =
aProperties.getOrDefault(
"TypeInfoSettings",aTypeSettings);
804 if ( aTypeSettings.hasElements() )
806 aRelevantSettings.insert(PropertyValue(
"TypeInfoSettings", 0,
Any(aTypeSettings), PropertyState_DIRECT_VALUE));
810 if ( aRelevantSettings.empty() )
813 sal_Int32 nOldLength = _rInfo.getLength();
814 _rInfo.realloc(nOldLength + aRelevantSettings.size());
815 PropertyValue* pAppendValues = _rInfo.getArray() + nOldLength;
816 for (
auto const& relevantSetting : aRelevantSettings)
821 relevantSetting.Value >>= sCharSet;
822 if ( !sCharSet.isEmpty() )
823 *pAppendValues = relevantSetting;
826 *pAppendValues = relevantSetting;
846 else if ( pBoolItem )
850 else if ( pOptBoolItem )
855 aValue <<= pOptBoolItem->
GetValue();
857 else if ( pInt32Item )
861 else if ( pStringListItem )
863 aValue <<= pStringListItem->
getList();
867 OSL_FAIL(
"ODbDataSourceAdministrationHelper::implTranslateProperty: unsupported item type!");
877 lcl_putProperty(_rxSet, _rName,aValue);
887 aString = aPos->second;
893 aString = indirectPos->second;
902 switch ( _rValue.getValueType().getTypeClass() )
904 case TypeClass_STRING:
905 if ( implCheckItemType( _rSet, _nId, checkItemType<SfxStringItem> ) )
912 SAL_WARN(
"dbaccess",
"ODbDataSourceAdministrationHelper::implTranslateProperty: invalid property value ("
917 case TypeClass_BOOLEAN:
918 if ( implCheckItemType( _rSet, _nId, checkItemType<SfxBoolItem> ) )
924 else if ( implCheckItemType( _rSet, _nId, checkItemType<OptionalBoolItem> ) )
926 OptionalBoolItem aItem( _nId );
927 if ( _rValue.hasValue() )
931 aItem.SetValue( bValue );
938 SAL_WARN(
"dbaccess",
"ODbDataSourceAdministrationHelper::implTranslateProperty: invalid property value ("
940 <<
" should be no boolean)!");
945 if ( implCheckItemType( _rSet, _nId, checkItemType<SfxInt32Item> ) )
952 SAL_WARN(
"dbaccess",
"ODbDataSourceAdministrationHelper::implTranslateProperty: invalid property value ("
954 <<
" should be no int)!");
958 case TypeClass_SEQUENCE:
959 if ( implCheckItemType( _rSet, _nId, checkItemType<OStringListItem> ) )
962 TypeDescription aTD(_rValue.getValueType());
963 typelib_IndirectTypeDescription* pSequenceTD =
964 reinterpret_cast< typelib_IndirectTypeDescription*
>(aTD.get());
965 OSL_ENSURE(pSequenceTD && pSequenceTD->pType,
"ODbDataSourceAdministrationHelper::implTranslateProperty: invalid sequence type!");
967 Type aElementType(pSequenceTD->pType);
968 switch (aElementType.getTypeClass())
970 case TypeClass_STRING:
974 _rSet.
Put(OStringListItem(_nId, aStringList));
978 OSL_FAIL(
"ODbDataSourceAdministrationHelper::implTranslateProperty: unsupported property value type!");
982 SAL_WARN(
"dbaccess",
"ODbDataSourceAdministrationHelper::implTranslateProperty: invalid property value ("
984 <<
" should be no string sequence)!");
993 OSL_FAIL(
"ODbDataSourceAdministrationHelper::implTranslateProperty: unsupported property value type!");
1000 OSL_ENSURE(pUrlItem,
"Document URL is NULL. -> GPF!");
1011 OSL_ENSURE(pUrlItem,
"Connection URL is NULL. -> GPF!");
1012 OSL_ENSURE(pTypeCollection,
"ODbAdminDialog::getDatasourceType: invalid items in the source set!");
1014 OSL_ENSURE(pCollection,
"ODbAdminDialog::getDatasourceType: invalid type collection!");
1017 sal_Int32 nPortNumber = -1;
1018 OUString sNewHostName;
1043 if ( !sUrlPart.isEmpty() )
1056 if ( !sNewHostName.isEmpty() )
1068 if ( !xDatasource.is() )
1078 OSL_ENSURE( !
m_aDataSourceOrName.hasValue(),
"ODbDataSourceAdministrationHelper::setDataSourceOrName: already have one!" );
1086 ,m_pCollection(_pCollection)
1092 ,m_pCollection(_rSource.getCollection())
PropertiesInfo aProperties
sal_Int32 GetValue() const
const OUString & GetValue() const
const SfxPoolItem & GetDefaultItem(sal_uInt16 nWhich) const
SfxItemPool * GetPool() const
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
virtual bool operator==(const SfxPoolItem &) const=0
VALUE_TYPE getOrDefault(const OUString &_rValueName, const VALUE_TYPE &_rDefault) const
OUString getType(std::u16string_view _sURL) const
DATASOURCE_TYPE determineType(std::u16string_view _rDsn) const
OUString cutPrefix(std::u16string_view _sURL) const
on a given string, cut the type prefix and return the result
OUString getPrefix(std::u16string_view _sURL) const
on a given string, return the type prefix
void extractHostNamePort(const OUString &_rDsn, OUString &_sDatabaseName, OUString &_rHostname, sal_Int32 &_nPortNumber) const
allows an ODsnTypeCollection to be transported in an SfxItemSet
::dbaccess::ODsnTypeCollection * getCollection() const
virtual DbuTypeCollectionItem * Clone(SfxItemPool *_pPool=nullptr) const override
DbuTypeCollectionItem(sal_Int16 nWhich, ::dbaccess::ODsnTypeCollection *_pCollection)
virtual bool operator==(const SfxPoolItem &_rItem) const override
virtual SfxItemSet * getWriteOutputSet()=0
virtual const SfxItemSet * getOutputSet() const =0
bool getCurrentSettings(css::uno::Sequence< css::beans::PropertyValue > &_rDriverParams)
translate the current dialog SfxItems into driver relevant PropertyValues
std::pair< css::uno::Reference< css::sdbc::XConnection >, bool > createConnection()
creates a new connection.
OString translatePropertyId(sal_Int32 _nId)
css::uno::Reference< css::uno::XComponentContext > m_xContext
css::uno::Reference< css::sdbc::XDriver > getDriver()
return the corresponding driver for the selected URL
const css::uno::Reference< css::uno::XComponentContext > & getORB() const
std::map< sal_Int32, OUString > MapInt2String
css::uno::Reference< css::beans::XPropertySet > m_xDatasource
database context we're working in
void successfullyConnected()
to be called if the settings got from getCurrentSettings have been used for successfully connecting
void clearPassword()
clear the password in the current data source's item set
static OUString getDocumentUrl(SfxItemSet const &_rDest)
weld::Window * m_pParent
translating property id's into names (indirect properties of a data source)
static void convertUrl(SfxItemSet &_rDest)
fill the necessary information from the url line
void setDataSourceOrName(const css::uno::Any &_rDataSourceOrName)
css::uno::Reference< css::beans::XPropertySet > const & getCurrentDataSource()
returns the data source the dialog is currently working with
static OUString getDatasourceType(const SfxItemSet &_rSet)
extracts the connection type from the given setThe connection type is determined by the value of the ...
void implTranslateProperty(SfxItemSet &_rSet, sal_Int32 _nId, const css::uno::Any &_rValue)
translate the given value into an SfxPoolItem, put this into the given set under the given id
ODbDataSourceAdministrationHelper(const css::uno::Reference< css::uno::XComponentContext > &_xORB, weld::Window *pParent, weld::Window *pTopParent, IItemSetHelper *_pItemSetHelper)
OUString getConnectionURL() const
returns the connection URL
MapInt2String m_aDirectPropTranslator
void translateProperties(const css::uno::Reference< css::beans::XPropertySet > &_rxSource, SfxItemSet &_rDest)
translates properties of a UNO data source into SfxItems
void fillDatasourceInfo(const SfxItemSet &_rSource, css::uno::Sequence< css::beans::PropertyValue > &_rInfo)
fill a data source info array with the settings from a given item set
IItemSetHelper * m_pItemSetHelper
css::uno::Reference< css::sdb::XDatabaseContext > m_xDatabaseContext
service factory
static bool hasAuthentication(const SfxItemSet &_rSet)
check if the data source described by the given set needs authenticationThe return value depends on t...
bool saveChanges(const SfxItemSet &_rSource)
MapInt2String m_aIndirectPropTranslator
translating property id's into names (direct properties of a data source)
css::uno::Reference< css::frame::XModel > m_xModel
css::uno::Any m_aDataSourceOrName
<type>SfxPoolItem</type> which transports a sequence of <type scope="rtl">OUString</type>'s
const css::uno::Sequence< OUString > & getList() const
virtual css::uno::Reference< css::awt::XWindow > GetXWindow()=0
Reference< XComponentContext > m_xContext
#define TOOLS_WARN_EXCEPTION(area, stream)
#define DBG_UNHANDLED_EXCEPTION(...)
#define DSID_CONN_LDAP_BASEDN
#define DSID_DECIMALDELIMITER
#define DSID_RESPECTRESULTSETTYPE
#define DSID_CONN_LDAP_PORTNUMBER
#define DSID_ESCAPE_DATETIME
#define DSID_ENABLEOUTERJOIN
#define DSID_DOCUMENT_URL
#define DSID_THOUSANDSDELIMITER
#define DSID_SHOWDELETEDROWS
#define DSID_DATABASENAME
#define DSID_CONN_LDAP_USESSL
#define DSID_AS_BEFORE_CORRNAME
#define DSID_INDEXAPPENDIX
#define DSID_CONN_LDAP_ROWCOUNT
#define DSID_MAX_ROW_SCAN
#define DSID_TEXTFILEEXTENSION
#define DSID_BOOLEANCOMPARISON
#define DSID_TYPECOLLECTION
#define DSID_CONN_HOSTNAME
#define DSID_PARAMETERNAMESUBST
#define DSID_MYSQL_PORTNUMBER
#define DSID_CHECK_REQUIRED_FIELDS
#define DSID_FIELDDELIMITER
#define DSID_AUTOINCREMENTVALUE
#define DSID_PRIMARY_KEY_SUPPORT
#define DSID_IGNOREDRIVER_PRIV
#define DSID_POSTGRES_PORTNUMBER
#define DSID_AUTORETRIEVEENABLED
#define DSID_TEXTFILEHEADER
#define DSID_IGNORECURRENCY
#define DSID_ADDITIONALOPTIONS
#define DSID_SUPPRESSVERSIONCL
#define DSID_JDBCDRIVERCLASS
#define DSID_APPEND_TABLE_ALIAS
#define DSID_ALLOWLONGTABLENAMES
#define DSID_FIRST_ITEM_ID
#define DSID_ORACLE_PORTNUMBER
#define DSID_TEXTDELIMITER
#define DSID_AUTORETRIEVEVALUE
#define DSID_PASSWORDREQUIRED
#define DSID_LAST_ITEM_ID
#define SAL_WARN(area, stream)
OString stripEnd(const OString &rIn, char c)
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
OInteraction< css::task::XInteractionAbort > OInteractionAbort
Any SAL_CALL getCaughtException()
DATASOURCE_TYPE
known datasource types
static bool checkItemType(const SfxPoolItem *pItem)
css::uno::Reference< css::uno::XInterface > getDataSourceOrModel(const css::uno::Reference< css::uno::XInterface > &_xObject)
returns either the model when data source is given as parameter, or returns a data source when a mode...
OUString getStrippedDatabaseName(const css::uno::Reference< css::beans::XPropertySet > &_xDataSource, OUString &_rsDatabaseName)
returns the stripped database name.
std::set< PropertyValue, PropertyValueLess > PropertyValueSet
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
Sequence< Property > aInfos
void VCL_DLLPUBLIC ShowServiceNotAvailableError(weld::Widget *pParent, std::u16string_view rServiceName, bool bError)
constexpr OUStringLiteral INFO_JDBCDRIVERCLASS
constexpr OUStringLiteral INFO_AS_BEFORE_CORRELATION_NAME
constexpr OUStringLiteral INFO_FORMS_CHECK_REQUIRED_FIELDS
constexpr OUStringLiteral PROPERTY_TABLEFILTER(u"TableFilter")
constexpr OUStringLiteral INFO_TEXTFILEEXTENSION
constexpr OUStringLiteral PROPERTY_USER(u"User")
constexpr OUStringLiteral INFO_SHOWDELETEDROWS
constexpr OUStringLiteral PROPERTY_URL(u"URL")
constexpr OUStringLiteral PROPERTY_INFO(u"Info")
constexpr OUStringLiteral PROPERTY_USESCHEMAINSELECT(u"UseSchemaInSelect")
constexpr OUStringLiteral INFO_AUTORETRIEVEVALUE
constexpr OUStringLiteral PROPERTY_ENABLEOUTERJOIN(u"EnableOuterJoinEscape")
constexpr OUStringLiteral PROPERTY_USECATALOGINSELECT(u"UseCatalogInSelect")
constexpr OUStringLiteral PROPERTY_ISREADONLY(u"IsReadOnly")
constexpr OUStringLiteral PROPERTY_ENABLESQL92CHECK(u"EnableSQL92Check")
constexpr OUStringLiteral INFO_DECIMALDELIMITER
constexpr OUStringLiteral INFO_APPEND_TABLE_ALIAS
constexpr OUStringLiteral INFO_TEXTFILEHEADER
constexpr OUStringLiteral INFO_CONN_LDAP_ROWCOUNT
constexpr OUStringLiteral INFO_PARAMETERNAMESUBST
constexpr OUStringLiteral INFO_IGNOREDRIVER_PRIV
constexpr OUStringLiteral PROPERTY_PASSWORD(u"Password")
constexpr OUStringLiteral INFO_TEXTDELIMITER
constexpr OUStringLiteral PROPERTY_BOOLEANCOMPARISONMODE(u"BooleanComparisonMode")
constexpr OUStringLiteral INFO_AUTORETRIEVEENABLED
constexpr OUStringLiteral INFO_CHARSET
constexpr OUStringLiteral INFO_ADDITIONALOPTIONS
constexpr OUStringLiteral PROPERTY_SUPPRESSVERSIONCL(u"SuppressVersionColumns")
constexpr OUStringLiteral INFO_ALLOWLONGTABLENAMES
constexpr OUStringLiteral PROPERTY_NAME(u"Name")
constexpr OUStringLiteral INFO_FIELDDELIMITER
constexpr OUStringLiteral INFO_THOUSANDSDELIMITER
constexpr OUStringLiteral PROPERTY_AUTOINCREMENTCREATION(u"AutoIncrementCreation")
constexpr OUStringLiteral INFO_CONN_LDAP_BASEDN
constexpr OUStringLiteral INFO_ESCAPE_DATETIME
constexpr OUStringLiteral PROPERTY_ISPASSWORDREQUIRED(u"IsPasswordRequired")
constexpr OUStringLiteral INFO_USECATALOG
Reference< XModel > xModel
the model of the sub component. Might be <NULL>
const std::u16string_view aStringList[]