User: obo     
Date: 2006/07/10 08:02:47

Modified:
   dba/dbaccess/source/core/api/KeySet.cxx

Log:
 INTEGRATION: CWS qiq (1.60.2); FILE MERGED
 2006/06/30 13:23:35 fs 1.60.2.4: during #i51143#: PROPERTY_ID_HY0000 
superseded by StandardSQLState.SQL_GENERAL_ERROR
 2006/06/27 11:53:54 fs 1.60.2.3: RESYNC: (1.60-1.61); FILE MERGED
 2006/06/16 14:16:03 fs 1.60.2.2: during #i51143#: replaced 
TTypeDefaultValuePair/TPositionTypePair with struct with named members - this 
is much more readable than ::std::pair< ..., ::std::pair< ..., ... > >
 2006/05/24 06:40:19 fs 1.60.2.1: some refactoring of compose/quoteTableName 
and friends, in preparation of #i51143#

File Changes:

Directory: /dba/dbaccess/source/core/api/
=========================================

File [changed]: KeySet.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/KeySet.cxx?r1=1.61&r2=1.62
Delta lines:  +57 -54
---------------------
--- KeySet.cxx  20 Jun 2006 02:35:08 -0000      1.61
+++ KeySet.cxx  10 Jul 2006 15:02:45 -0000      1.62
@@ -93,6 +93,9 @@
 #ifndef _CONNECTIVITY_DBTOOLS_HXX_
 #include <connectivity/dbtools.hxx>
 #endif
+#ifndef _DBHELPER_DBEXCEPTION_HXX_
+#include <connectivity/dbexception.hxx>
+#endif
 #include <list>
 #include <algorithm>
 #ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_HPP_
@@ -112,7 +115,8 @@
 #endif
 
 using namespace dbaccess;
-using namespace connectivity;
+using namespace ::connectivity;
+using namespace ::dbtools;
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::sdbc;
@@ -188,8 +192,8 @@
 
        Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData();
        bool bCase = (xMeta.is() && xMeta->storesMixedCaseQuotedIdentifiers()) 
? true : false;
-       m_pKeyColumnNames = new OColumnNamePos(bCase);
-       m_pColumnNames = new OColumnNamePos(bCase);
+       m_pKeyColumnNames = new SelectColumnsMetaData(bCase);
+       m_pColumnNames = new SelectColumnsMetaData(bCase);
 
        Reference<XNameAccess> xKeyColumns      = getKeyColumns();
        Reference<XColumnsSupplier> xSup(m_xComposer,UNO_QUERY);
@@ -198,7 +202,7 @@
        
::dbaccess::getColumnPositions(xSup->getColumns(),xKeyColumns,m_sUpdateTableName,(*m_pKeyColumnNames));
        
::dbaccess::getColumnPositions(xSup->getColumns(),xSourceColumns,m_sUpdateTableName,(*m_pColumnNames));
 
-       OColumnNamePos::const_iterator aPosIter = (*m_pKeyColumnNames).begin();
+       SelectColumnsMetaData::const_iterator aPosIter = 
(*m_pKeyColumnNames).begin();
        for(;aPosIter != (*m_pKeyColumnNames).end();++aPosIter)
        {
                if(xSourceColumns->hasByName(aPosIter->first))
@@ -233,9 +237,9 @@
        ::rtl::OUString sComposedName;
        sCatalog = sSchema = sTable = ::rtl::OUString();
        
::dbtools::qualifiedNameComponents(xMetaData,m_sUpdateTableName,sCatalog,sSchema,sTable,::dbtools::eInDataManipulation);
-       
::dbtools::composeTableName(xMetaData,sCatalog,sSchema,sTable,sComposedName,sal_True,::dbtools::eInDataManipulation);
+       sComposedName = ::dbtools::composeTableName( xMetaData, sCatalog, 
sSchema, sTable, sal_True, ::dbtools::eInDataManipulation );
        // create the where clause
-       OColumnNamePos::const_iterator aIter;
+       SelectColumnsMetaData::const_iterator aIter;
        for(aIter = (*m_pKeyColumnNames).begin();aIter != 
(*m_pKeyColumnNames).end();)
        {
                aFilter += sComposedName;
@@ -324,7 +328,7 @@
 
        ::rtl::OUString aCondition = ::rtl::OUString::createFromAscii("( ");
 
-       OColumnNamePos::const_iterator aIter = (*m_pKeyColumnNames).begin();
+       SelectColumnsMetaData::const_iterator aIter = 
(*m_pKeyColumnNames).begin();
        for(;aIter != (*m_pKeyColumnNames).end();++aIter)
        {
                aCondition += ::dbtools::quoteName( aQuote,aIter->first);
@@ -418,13 +422,13 @@
 
        sal_Int32 i = 1;
        // here we build the condition part for the update statement
-       OColumnNamePos::const_iterator aIter = m_pColumnNames->begin();
+       SelectColumnsMetaData::const_iterator aIter = m_pColumnNames->begin();
        for(;aIter != m_pColumnNames->end();++aIter,++i)
        {
                if(xKeyColumns.is() && xKeyColumns->hasByName(aIter->first))
                {
                        sKeyCondition += ::dbtools::quoteName( 
aQuote,aIter->first);
-                       if((*_rOrginalRow)[aIter->second.first].isNull())
+                       if((*_rOrginalRow)[aIter->second.nPosition].isNull())
                                sKeyCondition += 
::rtl::OUString::createFromAscii(" IS NULL");
                        else
                                sKeyCondition += 
::rtl::OUString::createFromAscii(" = ?");
@@ -438,19 +442,19 @@
                                if((*aIndexIter)->hasByName(aIter->first))
                                {
                                        sIndexCondition += 
::dbtools::quoteName( aQuote,aIter->first);
-                                       
if((*_rOrginalRow)[aIter->second.first].isNull())
+                                       
if((*_rOrginalRow)[aIter->second.nPosition].isNull())
                                                sIndexCondition += 
::rtl::OUString::createFromAscii(" IS NULL");
                                        else
                                        {
                                                sIndexCondition += 
::rtl::OUString::createFromAscii(" = ?");
-                                               
aIndexColumnPositions.push_back(aIter->second.first);
+                                               
aIndexColumnPositions.push_back(aIter->second.nPosition);
                                        }
                                        sIndexCondition += aAnd;
                                        break;
                                }
                        }
                }
-               if((*_rInsertRow)[aIter->second.first].isModified())
+               if((*_rInsertRow)[aIter->second.nPosition].isModified())
                {
                        sSetValues += ::dbtools::quoteName( 
aQuote,aIter->first);
                        sSetValues += aPara;
@@ -463,7 +467,7 @@
                aSql += sSetValues;
        }
        else
-               throw 
SQLException(DBACORE_RESSTRING(RID_STR_NO_VALUE_CHANGED),m_xConnection,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY0000")),1000,Any());
+        ::dbtools::throwSQLException( DBACORE_RESSTRING( 
RID_STR_NO_VALUE_CHANGED ), SQL_GENERAL_ERROR, m_xConnection );
 
        if(sKeyCondition.getLength() || sIndexCondition.getLength())
        {
@@ -487,8 +491,7 @@
                aSql += aCondition;
        }
        else
-               throw 
SQLException(DBACORE_RESSTRING(RID_STR_NO_CONDITION_FOR_PK),m_xConnection,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY0000")),1000,Any());
-
+        ::dbtools::throwSQLException( DBACORE_RESSTRING( 
RID_STR_NO_CONDITION_FOR_PK ), SQL_GENERAL_ERROR, m_xConnection );
 
        // now create end execute the prepared statement
        Reference< XPreparedStatement > 
xPrep(m_xConnection->prepareStatement(aSql));
@@ -501,11 +504,11 @@
        for(;aIter != m_pColumnNames->end();++aIter,++j)
        {
 
-               sal_Int32 nPos = aIter->second.first;
+               sal_Int32 nPos = aIter->second.nPosition;
                if((*_rInsertRow)[nPos].isModified())
                {
                        
(*_rInsertRow)[nPos].setSigned((*_rOrginalRow)[nPos].isSigned());
-                       
setParameter(i++,xParameter,(*_rInsertRow)[nPos],aIter->second.second.first);
+                       
setParameter(i++,xParameter,(*_rInsertRow)[nPos],aIter->second.nType);
                }
        }
        // and then the values of the where condition
@@ -513,7 +516,7 @@
        j = 0;
        for(;aIter != (*m_pKeyColumnNames).end();++aIter,++i,++j)
        {
-               
setParameter(i,xParameter,(*_rOrginalRow)[aIter->second.first],aIter->second.second.first);
+               
setParameter(i,xParameter,(*_rOrginalRow)[aIter->second.nPosition],aIter->second.nType);
        }
 
        // now we have to set the index values
@@ -550,12 +553,12 @@
        ::rtl::OUString aQuote = getIdentifierQuoteString();
     static ::rtl::OUString aComma(RTL_CONSTASCII_USTRINGPARAM(","));
 
-       OColumnNamePos::const_iterator aIter = m_pColumnNames->begin();
+       SelectColumnsMetaData::const_iterator aIter = m_pColumnNames->begin();
        sal_Int32 j = 1;
     sal_Bool bModified = sal_False;
        for(;aIter != m_pColumnNames->end();++aIter,++j)
        {
-               if((*_rInsertRow)[aIter->second.first].isModified())
+               if((*_rInsertRow)[aIter->second.nPosition].isModified())
                {
                        aSql += ::dbtools::quoteName( aQuote,aIter->first);
                        aSql += aComma;
@@ -564,7 +567,7 @@
                }
        }
     if ( !bModified )
-        throw 
SQLException(DBACORE_RESSTRING(RID_STR_NO_VALUE_CHANGED),m_xConnection,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY0000")),1000,Any());
+        ::dbtools::throwSQLException( DBACORE_RESSTRING( 
RID_STR_NO_VALUE_CHANGED ), SQL_GENERAL_ERROR, m_xConnection );
 
        aSql = 
aSql.replaceAt(aSql.getLength()-1,1,::rtl::OUString::createFromAscii(")"));
        aValues = 
aValues.replaceAt(aValues.getLength()-1,1,::rtl::OUString::createFromAscii(")"));
@@ -574,10 +577,10 @@
        Reference< XPreparedStatement > 
xPrep(m_xConnection->prepareStatement(aSql));
        Reference< XParameters > xParameter(xPrep,UNO_QUERY);
 
-       OColumnNamePos::const_iterator aPosIter = m_pColumnNames->begin();
+       SelectColumnsMetaData::const_iterator aPosIter = 
m_pColumnNames->begin();
        for(sal_Int32 i = 1;aPosIter != m_pColumnNames->end();++aPosIter)
        {
-               sal_Int32 nPos = aPosIter->second.first;
+               sal_Int32 nPos = aPosIter->second.nPosition;
                if((*_rInsertRow)[nPos].isModified())
                {
                        if((*_rInsertRow)[nPos].isNull())
@@ -585,7 +588,7 @@
                        else
                        {
                                
(*_rInsertRow)[nPos].setSigned(m_aSignedFlags[nPos-1]);
-                               
setParameter(i++,xParameter,(*_rInsertRow)[nPos],aPosIter->second.second.first);
+                               
setParameter(i++,xParameter,(*_rInsertRow)[nPos],aPosIter->second.nType);
                        }
                }
        }
@@ -595,11 +598,11 @@
        if ( m_bInserted )
        {
         // first insert the default values into the insertrow
-        OColumnNamePos::const_iterator defaultIter = m_pColumnNames->begin();
+        SelectColumnsMetaData::const_iterator defaultIter = 
m_pColumnNames->begin();
            for(;defaultIter != m_pColumnNames->end();++defaultIter)
            {
-            if ( !(*_rInsertRow)[defaultIter->second.first].isModified() )
-                           (*_rInsertRow)[defaultIter->second.first] = 
defaultIter->second.second.second;
+            if ( !(*_rInsertRow)[defaultIter->second.nPosition].isModified() )
+                (*_rInsertRow)[defaultIter->second.nPosition] = 
defaultIter->second.sDefaultValue;
         }
                try
                {
@@ -620,9 +623,9 @@
 #if OSL_DEBUG_LEVEL > 1
                                                ::rtl::OUString sColumnName( 
xMd->getColumnName(i) );
 #endif
-                                               OColumnNamePos::iterator aFind 
= m_pKeyColumnNames->find(*aAutoIter);
+                                               SelectColumnsMetaData::iterator 
aFind = m_pKeyColumnNames->find(*aAutoIter);
                                                if ( aFind != 
m_pKeyColumnNames->end() )
-                            
(*_rInsertRow)[aFind->second.first].fill(i,aFind->second.second.first,xRow);
+                            
(*_rInsertRow)[aFind->second.nPosition].fill(i,aFind->second.nType,xRow);
                                        }
                                        bAutoValuesFetched = sal_True;
                                }
@@ -673,9 +676,9 @@
                                        for (sal_Int32 i=1;aAutoIter != 
aAutoEnd; ++aAutoIter,++i)
                                        {
                                                // we will only fetch values 
which are keycolumns
-                                               OColumnNamePos::iterator aFind 
= m_pKeyColumnNames->find(*aAutoIter);
+                                               SelectColumnsMetaData::iterator 
aFind = m_pKeyColumnNames->find(*aAutoIter);
                                                if(aFind != 
m_pKeyColumnNames->end())
-                            
(*_rInsertRow)[aFind->second.first].fill(i,aFind->second.second.first,xRow);
+                            
(*_rInsertRow)[aFind->second.nPosition].fill(i,aFind->second.nType,xRow);
                                        }
                                }
                                ::comphelper::disposeComponent(xStatement);
@@ -702,12 +705,12 @@
 void OKeySet::copyRowValue(const ORowSetRow& _rInsertRow,ORowSetRow& _rKeyRow)
 {
     connectivity::ORowVector< ORowSetValue >::iterator aIter = 
_rKeyRow->begin();
-       OColumnNamePos::const_iterator aPosIter = (*m_pKeyColumnNames).begin();
-    OColumnNamePos::const_iterator aPosEnd = (*m_pKeyColumnNames).end();
+       SelectColumnsMetaData::const_iterator aPosIter = 
(*m_pKeyColumnNames).begin();
+    SelectColumnsMetaData::const_iterator aPosEnd = (*m_pKeyColumnNames).end();
        for(;aPosIter != aPosEnd;++aPosIter,++aIter)
     {
-               *aIter = (*_rInsertRow)[aPosIter->second.first];
-        aIter->setTypeKind(aPosIter->second.second.first);
+               *aIter = (*_rInsertRow)[aPosIter->second.nPosition];
+        aIter->setTypeKind(aPosIter->second.nType);
     }
 }
 // -------------------------------------------------------------------------
@@ -738,7 +741,7 @@
 
        ::rtl::OUString aColumnName,sIndexCondition;
        ::std::vector<sal_Int32> aIndexColumnPositions;
-       OColumnNamePos::const_iterator aIter = m_pColumnNames->begin();
+       SelectColumnsMetaData::const_iterator aIter = m_pColumnNames->begin();
 
        sal_Int32 i = 1;
        for(i = 1;aIter != m_pColumnNames->end();++aIter,++i)
@@ -746,7 +749,7 @@
                if(xKeyColumns.is() && xKeyColumns->hasByName(aIter->first))
                {
                        aSql += ::dbtools::quoteName( aQuote,aIter->first);
-                       if((*_rDeleteRow)[aIter->second.first].isNull())
+                       if((*_rDeleteRow)[aIter->second.nPosition].isNull())
                        {
                                OSL_ENSURE(0,"can a primary key be null");
                                aSql += ::rtl::OUString::createFromAscii(" IS 
NULL");
@@ -763,12 +766,12 @@
                                if((*aIndexIter)->hasByName(aIter->first))
                                {
                                        sIndexCondition += 
::dbtools::quoteName( aQuote,aIter->first);
-                                       
if((*_rDeleteRow)[aIter->second.first].isNull())
+                                       
if((*_rDeleteRow)[aIter->second.nPosition].isNull())
                                                sIndexCondition += 
::rtl::OUString::createFromAscii(" IS NULL");
                                        else
                                        {
                                                sIndexCondition += 
::rtl::OUString::createFromAscii(" = ?");
-                                               
aIndexColumnPositions.push_back(aIter->second.first);
+                                               
aIndexColumnPositions.push_back(aIter->second.nPosition);
                                        }
                                        sIndexCondition += aAnd;
 
@@ -788,7 +791,7 @@
        i = 1;
        for(;aIter != (*m_pKeyColumnNames).end();++aIter,++i)
        {
-               
setParameter(i,xParameter,(*_rDeleteRow)[aIter->second.first],aIter->second.second.first);
+               
setParameter(i,xParameter,(*_rDeleteRow)[aIter->second.nPosition],aIter->second.nType);
        }
 
        // now we have to set the index values
@@ -1024,7 +1027,7 @@
        xParameter->clearParameters();
        sal_Int32 nPos=1;
        connectivity::ORowVector< ORowSetValue >::const_iterator aIter = 
m_aKeyIter->second.first->begin();
-       OColumnNamePos::const_iterator aPosIter = (*m_pKeyColumnNames).begin();
+       SelectColumnsMetaData::const_iterator aPosIter = 
(*m_pKeyColumnNames).begin();
        for(;aPosIter != (*m_pKeyColumnNames).end();++aPosIter,++aIter,++nPos)
                setParameter(nPos,xParameter,*aIter);
 
@@ -1040,15 +1043,17 @@
 {
        // fetch the next row and append on the keyset
        sal_Bool bRet = sal_False;
-       if(!m_bRowCountFinal && (bRet = m_xDriverSet->next()))
+       if ( !m_bRowCountFinal )
+        bRet = m_xDriverSet->next();
+    if ( bRet )
        {
                ORowSetRow aKeyRow = new connectivity::ORowVector< ORowSetValue 
>((*m_pKeyColumnNames).size());
                connectivity::ORowVector< ORowSetValue >::iterator aIter = 
aKeyRow->begin();
-               OColumnNamePos::const_iterator aPosIter = 
(*m_pKeyColumnNames).begin();
+               SelectColumnsMetaData::const_iterator aPosIter = 
(*m_pKeyColumnNames).begin();
                for(;aPosIter != (*m_pKeyColumnNames).end();++aPosIter,++aIter)
                {
-                       const TPositionTypePair& rPair = aPosIter->second;
-            aIter->fill(rPair.first,rPair.second.first,m_xDriverRow);
+                       const SelectColumnDescription& rColDesc = 
aPosIter->second;
+            aIter->fill(rColDesc.nPosition,rColDesc.nType,m_xDriverRow);
                }
                m_aKeyIter = 
m_aKeyMap.insert(OKeySetMatrix::value_type(m_aKeyMap.rbegin()->first+1,OKeySetValue(aKeyRow,0))).first;
        }
@@ -1208,12 +1213,10 @@
 {
        ::rtl::OUString aComposedName;
        Reference<XDatabaseMetaData> xMetaData = m_xConnection->getMetaData();
-       sal_Bool bUseCatalogInSelect = 
::dbtools::isDataSourcePropertyEnabled(m_xConnection,PROPERTY_USECATALOGINSELECT,sal_True);
-       sal_Bool bUseSchemaInSelect = 
::dbtools::isDataSourcePropertyEnabled(m_xConnection,PROPERTY_USESCHEMAINSELECT,sal_True);
 
        if( xMetaData.is() && xMetaData->supportsTableCorrelationNames() )
        {
-               
::dbtools::composeTableName(xMetaData,_sCatalog,_sSchema,_sTable,aComposedName,sal_False,::dbtools::eInDataManipulation);
+               aComposedName = ::dbtools::composeTableName( xMetaData, 
_sCatalog, _sSchema, _sTable, sal_False, ::dbtools::eInDataManipulation );
                // first we have to check if the composed tablename is in the 
select clause or if an alias is used
                Reference<XTablesSupplier> xTabSup(m_xComposer,UNO_QUERY);
                Reference<XNameAccess> xSelectTables = xTabSup->getTables();
@@ -1224,14 +1227,14 @@
                        { // the composed name isn't used in the select clause 
so we have to find out which name is used instead
                                ::rtl::OUString sCatalog,sSchema,sTable;
                                
::dbtools::qualifiedNameComponents(xMetaData,m_sUpdateTableName,sCatalog,sSchema,sTable,::dbtools::eInDataManipulation);
-                               
::dbtools::composeTableName(xMetaData,sCatalog,sSchema,sTable,aComposedName,sal_True,::dbtools::eInDataManipulation,bUseCatalogInSelect,bUseSchemaInSelect);
+                               aComposedName = 
::dbtools::composeTableNameForSelect( m_xConnection, sCatalog, sSchema, sTable 
);
                        }
                        else
-                               
::dbtools::composeTableName(xMetaData,_sCatalog,_sSchema,_sTable,aComposedName,sal_True,::dbtools::eInDataManipulation,bUseCatalogInSelect,bUseSchemaInSelect);
+                               aComposedName = 
::dbtools::composeTableNameForSelect( m_xConnection, _sCatalog, _sSchema, 
_sTable );
                }
        }
        else
-               
::dbtools::composeTableName(xMetaData,_sCatalog,_sSchema,_sTable,aComposedName,sal_True,::dbtools::eInDataManipulation,bUseCatalogInSelect,bUseSchemaInSelect);
+               aComposedName = ::dbtools::composeTableNameForSelect( 
m_xConnection, _sCatalog, _sSchema, _sTable );
 
        return aComposedName;
 }
@@ -1241,7 +1244,7 @@
        void getColumnPositions(const Reference<XNameAccess>& _rxQueryColumns,
                                                        const 
Reference<XNameAccess>& _rxColumns,
                                                        const ::rtl::OUString& 
_rsUpdateTableName,
-                                                       OColumnNamePos& 
_rColumnNames)
+                                                       SelectColumnsMetaData& 
_rColumnNames)
        {
                // get the real name of the columns
                Sequence< ::rtl::OUString> 
aSelNames(_rxQueryColumns->getElementNames());
@@ -1274,7 +1277,7 @@
                     if ( 
xColumnProp->getPropertySetInfo()->hasPropertyByName(PROPERTY_DEFAULTVALUE) )
                         xColumnProp->getPropertyValue(PROPERTY_DEFAULTVALUE) 
>>= sColumnDefault;
 
-                    _rColumnNames[sRealName] = 
TPositionTypePair(nPos,TTypeDefaultValuePair(nType,sColumnDefault));
+                    _rColumnNames[sRealName] = SelectColumnDescription( nPos, 
nType, sColumnDefault );
                                        break;
                                }
                        }




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to