2002-10-25 08:01:47 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-08 04:13:29 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
2005-09-08 04:13:29 +00:00
|
|
|
* $RCSfile: TTableHelper.cxx,v $
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
2006-10-18 12:06:16 +00:00
|
|
|
* $Revision: 1.8 $
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
2006-10-18 12:06:16 +00:00
|
|
|
* last change: $Author: ihi $ $Date: 2006-10-18 13:06:16 $
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
2005-09-08 04:13:29 +00:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
|
|
|
*
|
2005-09-08 04:13:29 +00:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
2005-09-08 04:13:29 +00:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
2005-09-08 04:13:29 +00:00
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
2005-09-08 04:13:29 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2002-10-25 08:01:47 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-09-17 01:01:37 +00:00
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
#include "precompiled_connectivity.hxx"
|
|
|
|
|
2002-10-25 08:01:47 +00:00
|
|
|
#ifndef CONNECTIVITY_TABLEHELPER_HXX
|
|
|
|
#include "connectivity/TTableHelper.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_SDBC_XROW_HPP_
|
|
|
|
#include <com/sun/star/sdbc/XRow.hpp>
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_SDBC_XRESULTSET_HPP_
|
|
|
|
#include <com/sun/star/sdbc/XResultSet.hpp>
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_SDBCX_KEYTYPE_HPP_
|
|
|
|
#include <com/sun/star/sdbcx/KeyType.hpp>
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_SDBC_KEYRULE_HPP_
|
|
|
|
#include <com/sun/star/sdbc/KeyRule.hpp>
|
|
|
|
#endif
|
|
|
|
#ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
|
|
|
|
#include <cppuhelper/typeprovider.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_LANG_DISPOSEDEXCEPTION_HPP_
|
|
|
|
#include <com/sun/star/lang/DisposedException.hpp>
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_SDBC_COLUMNVALUE_HPP_
|
|
|
|
#include <com/sun/star/sdbc/ColumnValue.hpp>
|
|
|
|
#endif
|
|
|
|
#ifndef _COMPHELPER_SEQUENCE_HXX_
|
|
|
|
#include <comphelper/sequence.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _COMPHELPER_EXTRACT_HXX_
|
|
|
|
#include <comphelper/extract.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _COMPHELPER_TYPES_HXX_
|
|
|
|
#include <comphelper/types.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _CONNECTIVITY_DBTOOLS_HXX_
|
|
|
|
#include "connectivity/dbtools.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _CONNECTIVITY_SDBCX_COLLECTION_HXX_
|
|
|
|
#include "connectivity/sdbcx/VCollection.hxx"
|
|
|
|
#endif
|
2006-10-18 12:06:16 +00:00
|
|
|
#ifndef UNOTOOLS_INC_SHAREDUNOCOMPONENT_HXX
|
|
|
|
#include <unotools/sharedunocomponent.hxx>
|
|
|
|
#endif
|
2002-10-25 08:01:47 +00:00
|
|
|
#ifndef CONNECTIVITY_CONNECTION_HXX
|
|
|
|
#include "TConnection.hxx"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
using namespace ::comphelper;
|
|
|
|
using namespace connectivity;
|
|
|
|
using namespace ::com::sun::star::uno;
|
|
|
|
using namespace ::com::sun::star::beans;
|
|
|
|
using namespace ::com::sun::star::sdbcx;
|
|
|
|
using namespace ::com::sun::star::sdbc;
|
|
|
|
using namespace ::com::sun::star::container;
|
|
|
|
using namespace ::com::sun::star::lang;
|
|
|
|
|
|
|
|
OTableHelper::OTableHelper( sdbcx::OCollection* _pTables,
|
|
|
|
const Reference< XConnection >& _xConnection,
|
|
|
|
sal_Bool _bCase)
|
|
|
|
:OTable_TYPEDEF(_pTables,_bCase)
|
|
|
|
,m_xConnection(_xConnection)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
m_xMetaData = m_xConnection->getMetaData();
|
|
|
|
}
|
|
|
|
catch(const Exception&)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
OTableHelper::OTableHelper( sdbcx::OCollection* _pTables,
|
|
|
|
const Reference< XConnection >& _xConnection,
|
|
|
|
sal_Bool _bCase,
|
|
|
|
const ::rtl::OUString& _Name,
|
|
|
|
const ::rtl::OUString& _Type,
|
|
|
|
const ::rtl::OUString& _Description ,
|
|
|
|
const ::rtl::OUString& _SchemaName,
|
|
|
|
const ::rtl::OUString& _CatalogName
|
|
|
|
) : OTable_TYPEDEF(_pTables,
|
|
|
|
_bCase,
|
|
|
|
_Name,
|
|
|
|
_Type,
|
|
|
|
_Description,
|
|
|
|
_SchemaName,
|
|
|
|
_CatalogName)
|
|
|
|
,m_xConnection(_xConnection)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
m_xMetaData = m_xConnection->getMetaData();
|
|
|
|
}
|
|
|
|
catch(const Exception&)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void SAL_CALL OTableHelper::disposing()
|
|
|
|
{
|
|
|
|
OTable_TYPEDEF::disposing();
|
|
|
|
::osl::MutexGuard aGuard(m_aMutex);
|
|
|
|
m_xConnection = NULL;
|
|
|
|
m_xMetaData = NULL;
|
|
|
|
}
|
2006-10-18 12:06:16 +00:00
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
typedef sal_Int32 OrdinalPosition;
|
|
|
|
struct ColumnDesc
|
|
|
|
{
|
|
|
|
::rtl::OUString sName;
|
|
|
|
OrdinalPosition nOrdinalPosition;
|
|
|
|
|
|
|
|
ColumnDesc() {}
|
|
|
|
ColumnDesc( const ::rtl::OUString& _rName, OrdinalPosition _nPosition )
|
|
|
|
:sName( _rName )
|
|
|
|
,nOrdinalPosition( _nPosition )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/** collects ColumnDesc's from a resultset produced by XDatabaseMetaData::getColumns
|
|
|
|
*/
|
|
|
|
void lcl_collectColumnDescs_throw( const Reference< XResultSet >& _rxResult, ::std::vector< ColumnDesc >& _out_rColumns )
|
|
|
|
{
|
|
|
|
Reference< XRow > xRow( _rxResult, UNO_QUERY_THROW );
|
|
|
|
::rtl::OUString sName;
|
|
|
|
OrdinalPosition nOrdinalPosition( 0 );
|
|
|
|
while ( _rxResult->next() )
|
|
|
|
{
|
|
|
|
sName = xRow->getString( 4 ); // COLUMN_NAME
|
|
|
|
nOrdinalPosition = xRow->getInt( 17 ); // ORDINAL_POSITION
|
|
|
|
_out_rColumns.push_back( ColumnDesc( sName, nOrdinalPosition ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/** checks a given array of ColumnDesc's whether it has reasonable ordinal positions. If not,
|
|
|
|
they will be normalized to be the array index.
|
|
|
|
*/
|
|
|
|
void lcl_sanitizeColumnDescs( ::std::vector< ColumnDesc >& _rColumns )
|
|
|
|
{
|
|
|
|
if ( _rColumns.empty() )
|
|
|
|
return;
|
|
|
|
|
|
|
|
// collect all used ordinals
|
|
|
|
::std::set< OrdinalPosition > aUsedOrdinals;
|
|
|
|
for ( ::std::vector< ColumnDesc >::iterator collect = _rColumns.begin();
|
|
|
|
collect != _rColumns.end();
|
|
|
|
++collect
|
|
|
|
)
|
|
|
|
aUsedOrdinals.insert( collect->nOrdinalPosition );
|
|
|
|
|
|
|
|
// we need to have as much different ordinals as we have different columns
|
|
|
|
bool bDuplicates = aUsedOrdinals.size() != _rColumns.size();
|
|
|
|
// and it needs to be a continuous range
|
|
|
|
size_t nOrdinalsRange = *aUsedOrdinals.rbegin() - *aUsedOrdinals.begin() + 1;
|
|
|
|
bool bGaps = nOrdinalsRange != _rColumns.size();
|
|
|
|
|
|
|
|
// if that's not the case, normalize it
|
|
|
|
if ( bGaps || bDuplicates )
|
|
|
|
{
|
|
|
|
OSL_ENSURE( false, "lcl_sanitizeColumnDescs: database did provide invalid ORDINAL_POSITION values!" );
|
|
|
|
|
|
|
|
OrdinalPosition nNormalizedPosition = 1;
|
|
|
|
for ( ::std::vector< ColumnDesc >::iterator normalize = _rColumns.begin();
|
|
|
|
normalize != _rColumns.end();
|
|
|
|
++normalize
|
|
|
|
)
|
|
|
|
normalize->nOrdinalPosition = nNormalizedPosition++;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// what's left is that the range might not be from 1 to <column count>, but for instance
|
|
|
|
// 0 to <column count>-1.
|
|
|
|
size_t nOffset = *aUsedOrdinals.begin() - 1;
|
|
|
|
for ( ::std::vector< ColumnDesc >::iterator offset = _rColumns.begin();
|
|
|
|
offset != _rColumns.end();
|
|
|
|
++offset
|
|
|
|
)
|
|
|
|
offset->nOrdinalPosition -= nOffset;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-10-25 08:01:47 +00:00
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void OTableHelper::refreshColumns()
|
|
|
|
{
|
|
|
|
TStringVector aVector;
|
|
|
|
if(!isNew())
|
|
|
|
{
|
|
|
|
Any aCatalog;
|
|
|
|
if ( m_CatalogName.getLength() )
|
|
|
|
aCatalog <<= m_CatalogName;
|
2006-10-18 12:06:16 +00:00
|
|
|
|
|
|
|
::utl::SharedUNOComponent< XResultSet > xResult( getMetaData()->getColumns(
|
2006-06-20 00:05:01 +00:00
|
|
|
aCatalog,
|
|
|
|
m_SchemaName,
|
|
|
|
m_Name,
|
2006-10-18 12:06:16 +00:00
|
|
|
::rtl::OUString::createFromAscii("%")
|
|
|
|
) );
|
2002-10-25 08:01:47 +00:00
|
|
|
|
2006-10-18 12:06:16 +00:00
|
|
|
// collect the column names, together with their ordinal position
|
|
|
|
::std::vector< ColumnDesc > aColumns;
|
|
|
|
lcl_collectColumnDescs_throw( xResult, aColumns );
|
|
|
|
|
|
|
|
// ensure that the ordinal positions as obtained from the meta data do make sense
|
|
|
|
lcl_sanitizeColumnDescs( aColumns );
|
|
|
|
|
|
|
|
// sort by ordinal position
|
|
|
|
::std::map< OrdinalPosition, ::rtl::OUString > aSortedColumns;
|
|
|
|
for ( ::std::vector< ColumnDesc >::const_iterator copy = aColumns.begin();
|
|
|
|
copy != aColumns.end();
|
|
|
|
++copy
|
|
|
|
)
|
|
|
|
aSortedColumns[ copy->nOrdinalPosition ] = copy->sName;
|
|
|
|
|
|
|
|
// copy them to aVector, now that we have the proper ordering
|
|
|
|
::std::transform(
|
|
|
|
aSortedColumns.begin(),
|
|
|
|
aSortedColumns.end(),
|
|
|
|
::std::insert_iterator< TStringVector >( aVector, aVector.begin() ),
|
|
|
|
::std::select2nd< ::std::map< OrdinalPosition, ::rtl::OUString >::value_type >()
|
|
|
|
);
|
2002-10-25 08:01:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if(m_pColumns)
|
|
|
|
m_pColumns->reFill(aVector);
|
|
|
|
else
|
|
|
|
m_pColumns = createColumns(aVector);
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void OTableHelper::refreshPrimaryKeys(std::vector< ::rtl::OUString>& _rKeys)
|
|
|
|
{
|
|
|
|
Any aCatalog;
|
|
|
|
if ( m_CatalogName.getLength() )
|
|
|
|
aCatalog <<= m_CatalogName;
|
|
|
|
Reference< XResultSet > xResult = getMetaData()->getPrimaryKeys(aCatalog,m_SchemaName,m_Name);
|
|
|
|
|
|
|
|
if(xResult.is())
|
|
|
|
{
|
|
|
|
Reference< XRow > xRow(xResult,UNO_QUERY);
|
|
|
|
if(xResult->next()) // there can be only one primary key
|
|
|
|
{
|
|
|
|
::rtl::OUString aPkName = xRow->getString(6);
|
|
|
|
_rKeys.push_back(aPkName);
|
|
|
|
}
|
|
|
|
::comphelper::disposeComponent(xResult);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void OTableHelper::refreshForgeinKeys(std::vector< ::rtl::OUString>& _rKeys)
|
|
|
|
{
|
|
|
|
Any aCatalog;
|
|
|
|
if ( m_CatalogName.getLength() )
|
|
|
|
aCatalog <<= m_CatalogName;
|
|
|
|
Reference< XResultSet > xResult = getMetaData()->getImportedKeys(aCatalog,m_SchemaName,m_Name);
|
|
|
|
Reference< XRow > xRow(xResult,UNO_QUERY);
|
|
|
|
|
|
|
|
if ( xRow.is() )
|
|
|
|
{
|
|
|
|
while( xResult->next() )
|
|
|
|
{
|
|
|
|
sal_Int32 nKeySeq = xRow->getInt(9);
|
|
|
|
if ( nKeySeq == 1 )
|
|
|
|
{ // only append when the sequnce number is 1 to forbid serveral inserting the same key name
|
|
|
|
::rtl::OUString sFkName = xRow->getString(12);
|
|
|
|
if ( !xRow->wasNull() && sFkName.getLength() )
|
|
|
|
_rKeys.push_back(sFkName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
::comphelper::disposeComponent(xResult);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void OTableHelper::refreshKeys()
|
|
|
|
{
|
|
|
|
TStringVector aVector;
|
|
|
|
|
|
|
|
if(!isNew())
|
|
|
|
{
|
|
|
|
refreshPrimaryKeys(aVector);
|
|
|
|
refreshForgeinKeys(aVector);
|
|
|
|
}
|
|
|
|
if(m_pKeys)
|
|
|
|
m_pKeys->reFill(aVector);
|
|
|
|
else
|
|
|
|
m_pKeys = createKeys(aVector);
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void OTableHelper::refreshIndexes()
|
|
|
|
{
|
|
|
|
TStringVector aVector;
|
|
|
|
if(!isNew())
|
|
|
|
{
|
|
|
|
// fill indexes
|
|
|
|
Any aCatalog;
|
|
|
|
if ( m_CatalogName.getLength() )
|
|
|
|
aCatalog <<= m_CatalogName;
|
|
|
|
Reference< XResultSet > xResult = getMetaData()->getIndexInfo(aCatalog,m_SchemaName,m_Name,sal_False,sal_False);
|
|
|
|
|
|
|
|
if(xResult.is())
|
|
|
|
{
|
|
|
|
Reference< XRow > xRow(xResult,UNO_QUERY);
|
|
|
|
::rtl::OUString aName;
|
|
|
|
::rtl::OUString sCatalogSep = getMetaData()->getCatalogSeparator();
|
|
|
|
::rtl::OUString sPreviousRoundName;
|
|
|
|
while( xResult->next() )
|
|
|
|
{
|
|
|
|
aName = xRow->getString(5);
|
|
|
|
if(aName.getLength())
|
|
|
|
aName += sCatalogSep;
|
|
|
|
aName += xRow->getString(6);
|
|
|
|
if ( aName.getLength() )
|
|
|
|
{
|
|
|
|
// don't insert the name if the last one we inserted was the same
|
|
|
|
if (sPreviousRoundName != aName)
|
|
|
|
aVector.push_back(aName);
|
|
|
|
}
|
|
|
|
sPreviousRoundName = aName;
|
|
|
|
}
|
|
|
|
::comphelper::disposeComponent(xResult);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(m_pIndexes)
|
|
|
|
m_pIndexes->reFill(aVector);
|
|
|
|
else
|
|
|
|
m_pIndexes = createIndexes(aVector);
|
|
|
|
}
|
2006-08-28 13:51:37 +00:00
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
::rtl::OUString OTableHelper::getRenameStart() const
|
|
|
|
{
|
|
|
|
::rtl::OUString sSql(RTL_CONSTASCII_USTRINGPARAM("RENAME "));
|
|
|
|
if ( m_Type == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VIEW")) )
|
|
|
|
sSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" VIEW "));
|
|
|
|
else
|
|
|
|
sSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" TABLE "));
|
|
|
|
|
|
|
|
return sSql;
|
|
|
|
}
|
2002-10-25 08:01:47 +00:00
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
// XRename
|
|
|
|
void SAL_CALL OTableHelper::rename( const ::rtl::OUString& newName ) throw(SQLException, ElementExistException, RuntimeException)
|
|
|
|
{
|
|
|
|
::osl::MutexGuard aGuard(m_aMutex);
|
|
|
|
checkDisposed(
|
|
|
|
#ifdef GCC
|
|
|
|
::connectivity::sdbcx::OTableDescriptor_BASE::rBHelper.bDisposed
|
|
|
|
#else
|
|
|
|
rBHelper.bDisposed
|
|
|
|
#endif
|
|
|
|
);
|
|
|
|
|
|
|
|
if(!isNew())
|
|
|
|
{
|
2006-08-28 13:51:37 +00:00
|
|
|
::rtl::OUString sSql = getRenameStart();
|
2002-10-25 08:01:47 +00:00
|
|
|
::rtl::OUString sQuote = getMetaData()->getIdentifierQuoteString( );
|
|
|
|
|
|
|
|
::rtl::OUString sCatalog,sSchema,sTable;
|
|
|
|
::dbtools::qualifiedNameComponents(getMetaData(),newName,sCatalog,sSchema,sTable,::dbtools::eInDataManipulation);
|
|
|
|
|
|
|
|
::rtl::OUString sComposedName;
|
2006-07-10 13:19:45 +00:00
|
|
|
sComposedName = ::dbtools::composeTableName(getMetaData(),m_CatalogName,m_SchemaName,m_Name,sal_True,::dbtools::eInDataManipulation);
|
2002-10-25 08:01:47 +00:00
|
|
|
sSql += sComposedName
|
|
|
|
+ ::rtl::OUString::createFromAscii(" TO ");
|
2006-07-10 13:19:45 +00:00
|
|
|
sComposedName = ::dbtools::composeTableName(getMetaData(),sCatalog,sSchema,sTable,sal_True,::dbtools::eInDataManipulation);
|
2002-10-25 08:01:47 +00:00
|
|
|
sSql += sComposedName;
|
|
|
|
|
|
|
|
Reference< XStatement > xStmt = m_xConnection->createStatement( );
|
|
|
|
if ( xStmt.is() )
|
|
|
|
{
|
|
|
|
xStmt->execute(sSql);
|
|
|
|
::comphelper::disposeComponent(xStmt);
|
|
|
|
}
|
2004-08-02 15:52:38 +00:00
|
|
|
|
2002-10-25 08:01:47 +00:00
|
|
|
OTable_TYPEDEF::rename(newName);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
::dbtools::qualifiedNameComponents(getMetaData(),newName,m_CatalogName,m_SchemaName,m_Name,::dbtools::eInTableDefinitions);
|
|
|
|
}
|
2004-08-02 15:52:38 +00:00
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
Reference< XDatabaseMetaData> OTableHelper::getMetaData() const
|
|
|
|
{
|
|
|
|
return m_xMetaData;
|
|
|
|
}
|
2002-10-25 08:01:47 +00:00
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void SAL_CALL OTableHelper::alterColumnByIndex( sal_Int32 index, const Reference< XPropertySet >& descriptor ) throw(SQLException, ::com::sun::star::lang::IndexOutOfBoundsException, RuntimeException)
|
|
|
|
{
|
|
|
|
::osl::MutexGuard aGuard(m_aMutex);
|
|
|
|
checkDisposed(
|
|
|
|
#ifdef GCC
|
|
|
|
::connectivity::sdbcx::OTableDescriptor_BASE::rBHelper.bDisposed
|
|
|
|
#else
|
|
|
|
rBHelper.bDisposed
|
|
|
|
#endif
|
|
|
|
);
|
|
|
|
|
|
|
|
Reference< XPropertySet > xOld;
|
|
|
|
if(::cppu::extractInterface(xOld,m_pColumns->getByIndex(index)) && xOld.is())
|
|
|
|
alterColumnByName(getString(xOld->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))),descriptor);
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
::rtl::OUString SAL_CALL OTableHelper::getName() throw(RuntimeException)
|
|
|
|
{
|
|
|
|
::rtl::OUString sComposedName;
|
2006-07-10 13:19:45 +00:00
|
|
|
sComposedName = ::dbtools::composeTableName(getMetaData(),m_CatalogName,m_SchemaName,m_Name,sal_False,::dbtools::eInDataManipulation);
|
2002-10-25 08:01:47 +00:00
|
|
|
return sComposedName;
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void SAL_CALL OTableHelper::acquire() throw()
|
|
|
|
{
|
|
|
|
OTable_TYPEDEF::acquire();
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void SAL_CALL OTableHelper::release() throw()
|
|
|
|
{
|
|
|
|
OTable_TYPEDEF::release();
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
|