Tag: cws_src680_qiq User: fs Date: 06/05/23 06:22:07 Modified: /dba/connectivity/source/commontools/ dbtools.cxx
Log: some refactoring of compose/quoteTableName and friends, in preparation of #i51143# File Changes: Directory: /dba/connectivity/source/commontools/ ================================================ File [changed]: dbtools.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/commontools/dbtools.cxx?r1=1.59.34.1&r2=1.59.34.2 Delta lines: +170 -126 ----------------------- --- dbtools.cxx 11 May 2006 10:31:09 -0000 1.59.34.1 +++ dbtools.cxx 23 May 2006 13:22:03 -0000 1.59.34.2 @@ -4,9 +4,9 @@ * * $RCSfile: dbtools.cxx,v $ * - * $Revision: 1.59.34.1 $ + * $Revision: 1.59.34.2 $ * - * last change: $Author: fs $ $Date: 2006/05/11 10:31:09 $ + * last change: $Author: fs $ $Date: 2006/05/23 13:22:03 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -211,6 +211,12 @@ //============================================================================== //============================================================================== +namespace +{ + typedef sal_Bool (SAL_CALL XDatabaseMetaData::*FMetaDataSupport)(); +} +//============================================================================== +//============================================================================== sal_Int32 getDefaultNumberFormat(const Reference< XPropertySet >& _xColumn, const Reference< XNumberFormatTypes >& _xTypes, const Locale& _rLocale) @@ -849,18 +855,97 @@ _eSQLState == SQL_ERROR_UNSPECIFIED ? ::rtl::OUString() : getStandardSQLState( _eSQLState ), _nErrorCode, makeAny( _rChainedException ) ); } + +//-------------------------------------------------------------------------- +static ::rtl::OUString impl_doComposeTableName( const Reference< XDatabaseMetaData >& _rxMetaData, + const ::rtl::OUString& _rCatalog, const ::rtl::OUString& _rSchema, const ::rtl::OUString& _rName, + sal_Bool _bQuote, EComposeRule _eComposeRule ) +{ + ::rtl::OUString sComposedName; + + OSL_ENSURE(_rxMetaData.is(), "impl_doComposeTableName : invalid meta data !"); + if ( !_rxMetaData.is() ) + return sComposedName; + OSL_ENSURE(_rName.getLength(), "impl_doComposeTableName : at least the name should be non-empty !"); + + FMetaDataSupport pCatalogCall = XDatabaseMetaData::supportsCatalogsInDataManipulation; + FMetaDataSupport pSchemaCall = XDatabaseMetaData::supportsSchemasInDataManipulation; + bool bIgnoreMetaData = false; + + switch ( _eComposeRule ) + { + case eInTableDefinitions: + pCatalogCall = XDatabaseMetaData::supportsCatalogsInTableDefinitions; + pSchemaCall = XDatabaseMetaData::supportsSchemasInTableDefinitions; + break; + case eInIndexDefinitions: + pCatalogCall = XDatabaseMetaData::supportsCatalogsInIndexDefinitions; + pSchemaCall = XDatabaseMetaData::supportsSchemasInIndexDefinitions; + break; + case eInProcedureCalls: + pCatalogCall = XDatabaseMetaData::supportsCatalogsInProcedureCalls; + pSchemaCall = XDatabaseMetaData::supportsSchemasInProcedureCalls; + break; + case eInPrivilegeDefinitions: + pCatalogCall = XDatabaseMetaData::supportsCatalogsInPrivilegeDefinitions; + pSchemaCall = XDatabaseMetaData::supportsSchemasInPrivilegeDefinitions; + break; + case eComplete: + bIgnoreMetaData = true; + break; + } + + + ::rtl::OUString sQuoteString = _rxMetaData->getIdentifierQuoteString(); +#define QUOTE(s,s2) if (_bQuote) s += quoteName(sQuoteString,s2); else s += s2 + + static ::rtl::OUString sSeparator = ::rtl::OUString::createFromAscii("."); + + ::rtl::OUString sCatalogSep; + sal_Bool bCatlogAtStart = sal_True; + if ( _rCatalog.getLength() && ( bIgnoreMetaData || (_rxMetaData.get()->*pCatalogCall)() ) ) + { + sCatalogSep = _rxMetaData->getCatalogSeparator(); + bCatlogAtStart = _rxMetaData->isCatalogAtStart(); + + if ( bCatlogAtStart && sCatalogSep.getLength()) + { + QUOTE(sComposedName,_rCatalog); + sComposedName += sCatalogSep; + } + } + + if ( _rSchema.getLength() && ( bIgnoreMetaData || (_rxMetaData.get()->*pSchemaCall)() ) ) + { + QUOTE(sComposedName,_rSchema); + sComposedName += sSeparator; + } + + QUOTE(sComposedName,_rName); + + if ( _rCatalog.getLength() + && !bCatlogAtStart + && sCatalogSep.getLength() + && ( bIgnoreMetaData + || (_rxMetaData.get()->*pCatalogCall)() + ) + ) + { + sComposedName += sCatalogSep; + QUOTE(sComposedName,_rCatalog); + } + + return sComposedName; +} + //------------------------------------------------------------------------------ ::rtl::OUString quoteTableName(const Reference< XDatabaseMetaData>& _rxMeta , const ::rtl::OUString& _rName - , EComposeRule _eComposeRule - , sal_Bool _bUseCatalogInSelect - , sal_Bool _bUseSchemaInSelect) + , EComposeRule _eComposeRule) { - ::rtl::OUString sCatalog,sSchema,sTable,sQuotedName; + ::rtl::OUString sCatalog, sSchema, sTable; qualifiedNameComponents(_rxMeta,_rName,sCatalog,sSchema,sTable,_eComposeRule); - composeTableName(_rxMeta,sCatalog,sSchema,sTable,sQuotedName,sal_True,_eComposeRule,_bUseCatalogInSelect,_bUseSchemaInSelect); - - return sQuotedName; + return impl_doComposeTableName( _rxMeta, sCatalog, sSchema, sTable, sal_True, _eComposeRule ); } //------------------------------------------------------------------------------ @@ -1273,10 +1358,12 @@ if ( !sCommand.getLength() ) break; - sal_Bool bUseCatalogInSelect = isDataSourcePropertyEnabled(xConn,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UseCatalogInSelect")),sal_True); - sal_Bool bUseSchemaInSelect = isDataSourcePropertyEnabled(xConn,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UseSchemaInSelect")),sal_True); sStatement = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SELECT * FROM ")); - sStatement += quoteTableName(xConn->getMetaData(), sCommand,eInDataManipulation,bUseCatalogInSelect,bUseSchemaInSelect); + + ::rtl::OUString sCatalog, sSchema, sTable; + qualifiedNameComponents( xConn->getMetaData(), sCommand, sCatalog, sSchema, sTable, eInDataManipulation ); + + sStatement += composeTableNameForSelect( xConn, sCatalog, sSchema, sTable ); } break; @@ -1416,131 +1503,88 @@ return xReturn; } -namespace -{ - class OMetaDataWrapper - { - const Reference< XDatabaseMetaData > m_xMetaData; - public: - OMetaDataWrapper(const Reference< XDatabaseMetaData >& _xMetaData) : m_xMetaData(_xMetaData){} - - bool supportsSchemasInDataManipulation( ) - { - return m_xMetaData->supportsSchemasInDataManipulation() ? true : false; - } - bool supportsSchemasInProcedureCalls( ) - { - return m_xMetaData->supportsSchemasInProcedureCalls() ? true : false; - } - bool supportsSchemasInTableDefinitions( ) - { - return m_xMetaData->supportsSchemasInTableDefinitions() ? true : false; - } - bool supportsSchemasInIndexDefinitions( ) - { - return m_xMetaData->supportsSchemasInIndexDefinitions() ? true : false; - } - bool supportsSchemasInPrivilegeDefinitions( ) - { - return m_xMetaData->supportsSchemasInPrivilegeDefinitions() ? true : false; - } - bool supportsCatalogsInDataManipulation( ) - { - return m_xMetaData->supportsCatalogsInDataManipulation() ? true : false; - } - bool supportsCatalogsInProcedureCalls( ) - { - return m_xMetaData->supportsCatalogsInProcedureCalls() ? true : false; - } - bool supportsCatalogsInTableDefinitions( ) - { - return m_xMetaData->supportsCatalogsInTableDefinitions() ? true : false; - } - bool supportsCatalogsInIndexDefinitions( ) - { - return m_xMetaData->supportsCatalogsInIndexDefinitions() ? true : false; - } - bool supportsCatalogsInPrivilegeDefinitions( ) - { - return m_xMetaData->supportsCatalogsInPrivilegeDefinitions() ? true : false; - } - }; -} //-------------------------------------------------------------------------- -void composeTableName( const Reference< XDatabaseMetaData >& _rxMetaData, +::rtl::OUString composeTableName( const Reference< XDatabaseMetaData >& _rxMetaData, const ::rtl::OUString& _rCatalog, const ::rtl::OUString& _rSchema, const ::rtl::OUString& _rName, - ::rtl::OUString& _rComposedName, sal_Bool _bQuote, - EComposeRule _eComposeRule - , sal_Bool _bUseCatalogInSelect - , sal_Bool _bUseSchemaInSelect) + EComposeRule _eComposeRule) { - OSL_ENSURE(_rxMetaData.is(), "composeTableName : invalid meta data !"); - if ( !_rxMetaData.is() ) - return; // just to be save here - OSL_ENSURE(_rName.getLength(), "composeTableName : at least the name should be non-empty !"); - - ::std::mem_fun_t<bool,OMetaDataWrapper> aCatalogCall = ::std::mem_fun(&OMetaDataWrapper::supportsCatalogsInDataManipulation); - ::std::mem_fun_t<bool,OMetaDataWrapper> aSchemaCall = ::std::mem_fun(&OMetaDataWrapper::supportsSchemasInDataManipulation); - - switch ( _eComposeRule ) - { - case eInTableDefinitions: - aCatalogCall = ::std::mem_fun(&OMetaDataWrapper::supportsCatalogsInTableDefinitions); - aSchemaCall = ::std::mem_fun(&OMetaDataWrapper::supportsSchemasInTableDefinitions); - break; - case eInIndexDefinitions: - aCatalogCall = ::std::mem_fun(&OMetaDataWrapper::supportsCatalogsInIndexDefinitions); - aSchemaCall = ::std::mem_fun(&OMetaDataWrapper::supportsSchemasInIndexDefinitions); - break; - case eInProcedureCalls: - aCatalogCall = ::std::mem_fun(&OMetaDataWrapper::supportsCatalogsInProcedureCalls); - aSchemaCall = ::std::mem_fun(&OMetaDataWrapper::supportsSchemasInProcedureCalls); - break; - case eInPrivilegeDefinitions: - aCatalogCall = ::std::mem_fun(&OMetaDataWrapper::supportsCatalogsInPrivilegeDefinitions); - aSchemaCall = ::std::mem_fun(&OMetaDataWrapper::supportsSchemasInPrivilegeDefinitions); - break; - } - - - ::rtl::OUString sQuoteString = _rxMetaData->getIdentifierQuoteString(); -#define QUOTE(s,s2) if (_bQuote) s += quoteName(sQuoteString,s2); else s += s2 + return impl_doComposeTableName( _rxMetaData, _rCatalog, _rSchema, _rName, _bQuote, _eComposeRule ); +} - static ::rtl::OUString sEmpty; - static ::rtl::OUString sSeparator = ::rtl::OUString::createFromAscii("."); +// ----------------------------------------------------------------------------- +::rtl::OUString composeTableNameForSelect( const Reference< XConnection >& _rxConnection, + const ::rtl::OUString& _rCatalog, const ::rtl::OUString& _rSchema, const ::rtl::OUString& _rName ) +{ + sal_Bool bUseCatalogInSelect = isDataSourcePropertyEnabled( _rxConnection, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "UseCatalogInSelect" ) ), sal_True ); + sal_Bool bUseSchemaInSelect = isDataSourcePropertyEnabled( _rxConnection, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "UseSchemaInSelect" ) ), sal_True ); - OMetaDataWrapper aWrapper(_rxMetaData); - _rComposedName = sEmpty; - ::rtl::OUString sCatalogSep; - sal_Bool bCatlogAtStart = sal_True; - if ( _bUseCatalogInSelect && _rCatalog.getLength() && aCatalogCall(&aWrapper) ) - { - sCatalogSep = _rxMetaData->getCatalogSeparator(); - bCatlogAtStart = _rxMetaData->isCatalogAtStart(); + return impl_doComposeTableName( + _rxConnection->getMetaData(), + bUseCatalogInSelect ? _rCatalog : ::rtl::OUString(), + bUseSchemaInSelect ? _rSchema : ::rtl::OUString(), + _rName, + true, + eInDataManipulation + ); +} - if ( bCatlogAtStart && sCatalogSep.getLength()) +// ----------------------------------------------------------------------------- +namespace +{ + static void lcl_getTableNameComponents( const Reference<XPropertySet>& _xTable, + ::rtl::OUString& _out_rCatalog, ::rtl::OUString& _out_rSchema, ::rtl::OUString& _out_rName ) { - QUOTE(_rComposedName,_rCatalog); - _rComposedName += sCatalogSep; + ::dbtools::OPropertyMap& rPropMap = OMetaConnection::getPropMap(); + Reference< XPropertySetInfo > xInfo = _xTable->getPropertySetInfo(); + if ( xInfo.is() + && xInfo->hasPropertyByName(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)) + && xInfo->hasPropertyByName(rPropMap.getNameByIndex(PROPERTY_ID_SCHEMANAME)) + && xInfo->hasPropertyByName(rPropMap.getNameByIndex(PROPERTY_ID_NAME)) ) + { + + ::rtl::OUString aCatalog; + ::rtl::OUString aSchema; + ::rtl::OUString aTable; + _xTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)) >>= _out_rCatalog; + _xTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= _out_rSchema; + _xTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)) >>= _out_rName; } + else + OSL_ENSURE( false, "::dbtools::lcl_getTableNameComponents: this is no table object!" ); } +} - if ( _bUseSchemaInSelect && _rSchema.getLength() && aSchemaCall(&aWrapper) ) - { - QUOTE(_rComposedName,_rSchema); - _rComposedName += sSeparator; - } +// ----------------------------------------------------------------------------- +::rtl::OUString composeTableNameForSelect( const Reference< XConnection >& _rxConnection, const Reference<XPropertySet>& _xTable ) +{ + ::rtl::OUString sCatalog, sSchema, sName; + lcl_getTableNameComponents( _xTable, sCatalog, sSchema, sName ); - QUOTE(_rComposedName,_rName); + return composeTableNameForSelect( _rxConnection, sCatalog, sSchema, sName ); +} - if ( _bUseCatalogInSelect && _rCatalog.getLength() && !bCatlogAtStart && sCatalogSep.getLength() && aCatalogCall(&aWrapper) ) - { - _rComposedName += sCatalogSep; - QUOTE(_rComposedName,_rCatalog); - } +// ----------------------------------------------------------------------------- +::rtl::OUString composeTableName(const Reference<XDatabaseMetaData>& _xMetaData, + const Reference<XPropertySet>& _xTable, + EComposeRule _eComposeRule, + bool _bSuppressCatalog, + bool _bSuppressSchema, + bool _bQuote ) +{ + ::rtl::OUString sCatalog, sSchema, sName; + lcl_getTableNameComponents( _xTable, sCatalog, sSchema, sName ); + + return impl_doComposeTableName( + _xMetaData, + _bSuppressCatalog ? ::rtl::OUString() : sCatalog, + _bSuppressSchema ? ::rtl::OUString() : sSchema, + sName, + _bQuote, + _eComposeRule + ); } // ----------------------------------------------------------------------------- sal_Int32 getSearchColumnFlag( const Reference< XConnection>& _rxConn,sal_Int32 _nDataType) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
