[Libreoffice-commits] core.git: connectivity/source include/connectivity

Lionel Elie Mamane lionel at mamane.lu
Wed Jun 17 05:33:48 PDT 2015


 connectivity/source/commontools/parameters.cxx |   34 +++++++++++++++++--------
 include/connectivity/parameters.hxx            |    3 +-
 2 files changed, 26 insertions(+), 11 deletions(-)

New commits:
commit 09a490ddf516289b4ce2f70a19603b9590917632
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jun 17 14:32:29 2015 +0200

    parameter handling: fix confusion between column name and realname
    
    Change-Id: I81fd45276183b911e4560ca785221894ea2ebc88

diff --git a/connectivity/source/commontools/parameters.cxx b/connectivity/source/commontools/parameters.cxx
index 8459ae9..1f94a59 100644
--- a/connectivity/source/commontools/parameters.cxx
+++ b/connectivity/source/commontools/parameters.cxx
@@ -105,6 +105,8 @@ namespace dbtools
         m_aMasterFields.realloc( 0 );
         m_aDetailFields.realloc( 0 );
         m_sIdentifierQuoteString.clear();
+        m_sSpecialCharacters.clear();
+        m_xConnectionMetadata.clear();
         ::std::vector< bool > aEmptyArray;
         m_aParametersVisited.swap( aEmptyArray );
         m_bUpToDate = false;
@@ -208,24 +210,32 @@ namespace dbtools
 
 
     OUString ParameterManager::createFilterConditionFromColumnLink(
-        const OUString& _rMasterColumn, const OUString& _rDetailLink, OUString& _rNewParamName )
+        const OUString &_rMasterColumn, const Reference < XPropertySet > &xDetailField, OUString &o_rNewParamName )
     {
         OUString sFilter;
-
         // format is:
         // <detail_column> = :<new_param_name>
-        sFilter = quoteName( m_sIdentifierQuoteString, _rDetailLink );
-        sFilter += " = :";
+        {
+            OUString tblName;
+            xDetailField->getPropertyValue("TableName") >>= tblName;
+            if (!tblName.isEmpty())
+                sFilter = ::dbtools::quoteTableName( m_xConnectionMetadata, tblName, ::dbtools::eInDataManipulation ) + ".";
+        }
+        {
+            OUString colName;
+            xDetailField->getPropertyValue("RealName") >>= colName;
+            sFilter += quoteName( m_sIdentifierQuoteString, colName ) + " = :";
+        }
 
         // generate a parameter name which is not already used
-        _rNewParamName = "link_from_";
-        _rNewParamName += convertName2SQLName( _rMasterColumn, m_sSpecialCharacters );
-        while ( m_aParameterInformation.find( _rNewParamName ) != m_aParameterInformation.end() )
+        o_rNewParamName = "link_from_";
+        o_rNewParamName += convertName2SQLName( _rMasterColumn, m_sSpecialCharacters );
+        while ( m_aParameterInformation.find( o_rNewParamName ) != m_aParameterInformation.end() )
         {
-            _rNewParamName += "_";
+            o_rNewParamName += "_";
         }
 
-        return sFilter += _rNewParamName;
+        return sFilter += o_rNewParamName;
     }
 
 
@@ -279,8 +289,11 @@ namespace dbtools
                 // does the detail name denote a column?
                 if ( _rxColumns->hasByName( *pDetailFields ) )
                 {
+                    Reference< XPropertySet > xDetailField(_rxColumns->getByName( *pDetailFields ), UNO_QUERY);
+                    assert(xDetailField.is());
+
                     OUString sNewParamName;
-                    const OUString sFilterCondition = createFilterConditionFromColumnLink( *pMasterFields, *pDetailFields, sNewParamName );
+                    const OUString sFilterCondition = createFilterConditionFromColumnLink( *pMasterFields, xDetailField, sNewParamName );
                     OSL_PRECOND( !sNewParamName.isEmpty(), "ParameterManager::classifyLinks: createFilterConditionFromColumnLink returned nonsense!" );
 
                     // remember meta information about this new parameter
@@ -754,6 +767,7 @@ namespace dbtools
                 xMeta = xConnection->getMetaData();
             if ( xMeta.is() )
             {
+                m_xConnectionMetadata = xMeta;
                 m_sIdentifierQuoteString = xMeta->getIdentifierQuoteString();
                 m_sSpecialCharacters = xMeta->getExtraNameCharacters();
             }
diff --git a/include/connectivity/parameters.hxx b/include/connectivity/parameters.hxx
index dce18c7..ce49959 100644
--- a/include/connectivity/parameters.hxx
+++ b/include/connectivity/parameters.hxx
@@ -126,6 +126,7 @@ namespace dbtools
 
         OUString                     m_sIdentifierQuoteString;
         OUString                     m_sSpecialCharacters;
+        ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xConnectionMetadata;
 
         ::std::vector< bool >               m_aParametersVisited;
 
@@ -244,7 +245,7 @@ namespace dbtools
         OUString
                 createFilterConditionFromColumnLink(
                     const OUString& /* [in]  */ _rMasterColumn,
-                    const OUString& /* [in]  */ _rDetailColumn,
+                    const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& /* [in]  */ xDetailColumn,
                           OUString& /* [out] */ _rNewParamName
                 );
 


More information about the Libreoffice-commits mailing list