User: obo     
Date: 2006/07/10 07:19:34

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

Log:
 INTEGRATION: CWS qiq (1.7.104); FILE MERGED
 2006/06/27 13:54:00 fs 1.7.104.3: RESYNC: (1.7-1.8); FILE MERGED
 2006/06/16 11:32:29 fs 1.7.104.2: during #i51143#:
 
 refactored VCollection:
 - createEmptyObject now named createDescriptor
 - cloneObject removed
 - appendObject now returns the newly created object
   (previously done via a subsequent call to cloneObject)
 2006/05/23 13:24:21 fs 1.7.104.1: some refactoring of compose/quoteTableName 
and friends, in preparation of #i51143#

File Changes:

Directory: /dba/connectivity/source/commontools/
================================================

File [changed]: TKeys.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/connectivity/source/commontools/TKeys.cxx?r1=1.8&r2=1.9
Delta lines:  +106 -104
-----------------------
--- TKeys.cxx   20 Jun 2006 01:04:17 -0000      1.8
+++ TKeys.cxx   10 Jul 2006 14:19:32 -0000      1.9
@@ -122,7 +122,7 @@
                                if ( xRow->getString(12) == _rName )
                                {
                                        ::rtl::OUString aComposedName;
-                                       
::dbtools::composeTableName(m_pTable->getMetaData(),aCatalog,aSchema,aName,aComposedName,sal_False,::dbtools::eInDataManipulation);
+                                       aComposedName = 
::dbtools::composeTableName(m_pTable->getMetaData(),aCatalog,aSchema,aName,sal_False,::dbtools::eInDataManipulation);
                                        OTableKeyHelper* pRet = new 
OTableKeyHelper(m_pTable,_rName,aComposedName,KeyType::FOREIGN,nUpdateRule,nDeleteRule);
                                        xRet = pRet;
                                        break;
@@ -145,7 +145,7 @@
        m_pTable->refreshKeys();
 }
 // -------------------------------------------------------------------------
-Reference< XPropertySet > OKeysHelper::createEmptyObject()
+Reference< XPropertySet > OKeysHelper::createDescriptor()
 {
        return new OTableKeyHelper(m_pTable);
 }
@@ -178,20 +178,44 @@
        return sRet;
 }
 // -------------------------------------------------------------------------
+void OKeysHelper::cloneDescriptorColumns( const sdbcx::ObjectType& 
_rSourceDescriptor, const sdbcx::ObjectType& _rDestDescriptor )
+{
+       Reference< XColumnsSupplier > xColSupp( _rSourceDescriptor, 
UNO_QUERY_THROW );
+       Reference< XIndexAccess > xSourceCols( xColSupp->getColumns(), 
UNO_QUERY_THROW );
+
+    xColSupp.set( _rDestDescriptor, UNO_QUERY_THROW );
+       Reference< XAppend > xDestAppend( xColSupp->getColumns(), 
UNO_QUERY_THROW );
+
+    sal_Int32 nCount = xSourceCols->getCount();
+       for ( sal_Int32 i=0; i< nCount; ++i )
+       {
+        Reference< XPropertySet > xColProp( xSourceCols->getByIndex(i), 
UNO_QUERY );
+               xDestAppend->appendByDescriptor( xColProp );
+       }
+}
+// -------------------------------------------------------------------------
 // XAppend
-void OKeysHelper::appendObject( const Reference< XPropertySet >& descriptor )
+sdbcx::ObjectType OKeysHelper::appendObject( const ::rtl::OUString& _rForName, 
const Reference< XPropertySet >& descriptor )
 {
-       const ::dbtools::OPropertyMap& rPropMap = OMetaConnection::getPropMap();
-       ::rtl::OUString aName = 
getString(descriptor->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)));
-       if ( !m_pTable->isNew() )
+       if ( m_pTable->isNew() )
        {
+               Reference< XPropertySet > xNewDescriptor( cloneDescriptor( 
descriptor ) );
+        cloneDescriptorColumns( descriptor, xNewDescriptor );
+        return xNewDescriptor;
+    }
+
+    // if we're here, we belong to a table which is not new, i.e. already 
exists in the database.
+    // In this case, really append the new index.
+
+    const ::dbtools::OPropertyMap& rPropMap = OMetaConnection::getPropMap();
                sal_Int32 nKeyType              = 
getINT32(descriptor->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_TYPE)));
 
                ::rtl::OUString aSql    = 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ALTER TABLE "));
                ::rtl::OUString aQuote  = 
m_pTable->getConnection()->getMetaData()->getIdentifierQuoteString(  );
                ::rtl::OUString aDot    = 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("."));
 
-               aSql += 
composeTableName(m_pTable->getConnection()->getMetaData(),m_pTable,sal_True,::dbtools::eInTableDefinitions)
 + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ADD "));
+    aSql += composeTableName( m_pTable->getConnection()->getMetaData(), 
m_pTable, ::dbtools::eInTableDefinitions, false, false, true );
+    aSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ADD "));
 
                if ( nKeyType == KeyType::PRIMARY )
                {
@@ -239,7 +263,8 @@
 
                Reference< XStatement > xStmt = 
m_pTable->getConnection()->createStatement(  );
                xStmt->execute(aSql);
-               // we need a name for the insertion
+       // find the name which the database gave the new key
+    ::rtl::OUString sNewName( _rForName );
                try
                {
                        ::rtl::OUString aSchema,aTable;
@@ -266,16 +291,19 @@
                                        ::rtl::OUString sName = 
xRow->getString(nColumn);
                                        if ( !m_pElements->exists(sName) ) // 
this name wasn't inserted yet so it must be te new one
                                        {
-                                               
descriptor->setPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME),makeAny(sName));
+                                       descriptor->setPropertyValue( 
rPropMap.getNameByIndex( PROPERTY_ID_NAME ), makeAny( sName ) );
+                    sNewName = sName;
                                                break;
                                        }
                                }
+                       ::comphelper::disposeComponent(xResult);
                        }
                }
                catch(const SQLException&)
                {
                }
-       }
+
+    return createObject( sNewName );
 }
 // -------------------------------------------------------------------------
 // XDrop
@@ -285,7 +313,7 @@
        {
                ::rtl::OUString aSql    = 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ALTER TABLE "));
 
-               aSql += 
composeTableName(m_pTable->getConnection()->getMetaData(),m_pTable,sal_True,::dbtools::eInTableDefinitions);
+               aSql += composeTableName( 
m_pTable->getConnection()->getMetaData(), 
m_pTable,::dbtools::eInTableDefinitions, false, false, true );
 
                Reference<XPropertySet> xKey(getObject(_nPos),UNO_QUERY);
 
@@ -313,32 +341,6 @@
                        ::comphelper::disposeComponent(xStmt);
                }
        }
-}
-// 
-----------------------------------------------------------------------------
-sdbcx::ObjectType OKeysHelper::cloneObject(const Reference< XPropertySet >& 
_xDescriptor)
-{
-       sdbcx::ObjectType xName;
-       if(!m_pTable->isNew())
-       {
-        xName = OKeys_BASE::cloneObject(_xDescriptor);
-       }
-       else
-       {
-               Reference<XPropertySet> xProp = createEmptyObject();
-               ::comphelper::copyProperties(_xDescriptor,xProp);
-               Reference<XColumnsSupplier> xSup(_xDescriptor,UNO_QUERY);
-               Reference<XIndexAccess> xIndex(xSup->getColumns(),UNO_QUERY);
-               Reference<XColumnsSupplier> xDestSup(xProp,UNO_QUERY);
-               Reference<XAppend> xAppend(xDestSup->getColumns(),UNO_QUERY);
-               sal_Int32 nCount = xIndex->getCount();
-               for(sal_Int32 i=0;i< nCount;++i)
-               {
-            Reference<XPropertySet> xColProp(xIndex->getByIndex(i),UNO_QUERY);
-                       xAppend->appendByDescriptor(xColProp);
-               }
-               xName = xProp;
-       }
-       return xName;
 }
 // 
-----------------------------------------------------------------------------
 } // namespace connectivity




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

Reply via email to