User: obo     
Date: 2006/07/10 07:20:31

Modified:
   dba/connectivity/source/commontools/dbtools.cxx

Log:
 INTEGRATION: CWS qiq (1.59.34); FILE MERGED
 2006/06/28 08:40:40 fs 1.59.34.5: #i10000#
 2006/06/27 13:58:09 fs 1.59.34.4: RESYNC: (1.59-1.60); FILE MERGED
 2006/05/24 11:42:55 fs 1.59.34.3: #i10000#
 2006/05/23 13:22:03 fs 1.59.34.2: some refactoring of compose/quoteTableName 
and friends, in preparation of #i51143#
 2006/05/11 10:31:09 fs 1.59.34.1: #i51143# +prependErrorInfo

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.60&r2=1.61
Delta lines:  +179 -83
----------------------
--- dbtools.cxx 20 Jun 2006 01:06:02 -0000      1.60
+++ dbtools.cxx 10 Jul 2006 14:20:29 -0000      1.61
@@ -217,6 +217,12 @@
 
 
//==============================================================================
 
//==============================================================================
+namespace
+{
+    typedef sal_Bool (SAL_CALL XDatabaseMetaData::*FMetaDataSupport)();
+}
+//==============================================================================
+//==============================================================================
 sal_Int32 getDefaultNumberFormat(const Reference< XPropertySet >& _xColumn,
                                                                 const 
Reference< XNumberFormatTypes >& _xTypes,
                                                                 const Locale& 
_rLocale)
@@ -845,25 +851,110 @@
 
//------------------------------------------------------------------------------
 SQLContext prependContextInfo(const SQLException& _rException, const 
Reference< XInterface >& _rxContext, const ::rtl::OUString& 
_rContextDescription, const ::rtl::OUString& _rContextDetails)
 {
-       // determine the type of the exception
-       SQLExceptionInfo aInfo(_rException);
+       return SQLContext( _rContextDescription, _rxContext, ::rtl::OUString(), 
0, makeAny( _rException ), _rContextDetails );
+}
+//------------------------------------------------------------------------------
+SQLException prependErrorInfo( const SQLException& _rChainedException, const 
Reference< XInterface >& _rxContext,
+    const ::rtl::OUString& _rAdditionalError, const StandardSQLState 
_eSQLState, const sal_Int32 _nErrorCode )
+{
+    return SQLException( _rAdditionalError, _rxContext,
+        _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;
+        case eInDataManipulation:
+            // already properly set above
+            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);
+       }
 
-       // the new first chain element
-       SQLContext aContextDescription(_rContextDescription, _rxContext, 
::rtl::OUString(), 0, aInfo.get(), _rContextDetails);
-       return aContextDescription;
+    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 );
 }
 
 
//------------------------------------------------------------------------------
@@ -1278,10 +1369,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;
 
@@ -1422,84 +1515,87 @@
        return xReturn;
 }
 //--------------------------------------------------------------------------
-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 !");
-
-    typedef sal_Bool (SAL_CALL XDatabaseMetaData::*GetBooleanMetaData)();
-    GetBooleanMetaData catalogUsage = 
&XDatabaseMetaData::supportsCatalogsInDataManipulation;
-    GetBooleanMetaData schemaUsage = 
&XDatabaseMetaData::supportsSchemasInDataManipulation;
-
-       switch ( _eComposeRule )
-       {
-               case eInTableDefinitions:
-            catalogUsage = 
&XDatabaseMetaData::supportsCatalogsInTableDefinitions;
-            schemaUsage = 
&XDatabaseMetaData::supportsSchemasInTableDefinitions;
-                       break;
-               case eInIndexDefinitions:
-            catalogUsage = 
&XDatabaseMetaData::supportsCatalogsInIndexDefinitions;
-            schemaUsage = 
&XDatabaseMetaData::supportsSchemasInIndexDefinitions;
-                       break;
-               case eInProcedureCalls:
-            catalogUsage = 
&XDatabaseMetaData::supportsCatalogsInProcedureCalls;
-            schemaUsage = &XDatabaseMetaData::supportsSchemasInProcedureCalls;
-                       break;
-               case eInPrivilegeDefinitions:
-            catalogUsage = 
&XDatabaseMetaData::supportsCatalogsInPrivilegeDefinitions;
-            schemaUsage = 
&XDatabaseMetaData::supportsSchemasInPrivilegeDefinitions;
-                       break;
-        case eInDataManipulation:
-            catalogUsage = 
&XDatabaseMetaData::supportsCatalogsInDataManipulation;
-            schemaUsage = 
&XDatabaseMetaData::supportsSchemasInDataManipulation;
-            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 );
 
-       _rComposedName = sEmpty;
-       ::rtl::OUString sCatalogSep;
-       sal_Bool bCatlogAtStart = sal_True;
-    if ( _bUseCatalogInSelect && _rCatalog.getLength() && 
(_rxMetaData.get()->*catalogUsage)() )
-       {
-               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() && 
(_rxMetaData.get()->*schemaUsage)() )
-       {
-               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() && (_rxMetaData.get()->*catalogUsage)() )
-       {
-               _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