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]

Reply via email to