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]
