2010-10-12 15:59:03 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2001-03-16 15:22:20 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-10 15:07:50 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2001-03-16 15:22:20 +00:00
|
|
|
*
|
2010-02-12 15:01:35 +01:00
|
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
2001-03-16 15:22:20 +00:00
|
|
|
*
|
2008-04-10 15:07:50 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2001-03-16 15:22:20 +00:00
|
|
|
*
|
2008-04-10 15:07:50 +00:00
|
|
|
* This file is part of OpenOffice.org.
|
2001-03-16 15:22:20 +00:00
|
|
|
*
|
2008-04-10 15:07:50 +00:00
|
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
|
|
* only, as published by the Free Software Foundation.
|
2001-03-16 15:22:20 +00:00
|
|
|
*
|
2008-04-10 15:07:50 +00:00
|
|
|
* OpenOffice.org 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 version 3 for more details
|
|
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
2001-03-16 15:22:20 +00:00
|
|
|
*
|
2008-04-10 15:07:50 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
* for a copy of the LGPLv3 License.
|
2001-03-16 15:22:20 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-09-17 06:17:30 +00:00
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
#include "precompiled_dbaccess.hxx"
|
|
|
|
|
2001-03-16 15:22:20 +00:00
|
|
|
#include "indexcollection.hxx"
|
2008-05-05 15:01:54 +00:00
|
|
|
#include <tools/diagnose_ex.h>
|
2001-03-16 15:22:20 +00:00
|
|
|
#include <com/sun/star/sdbcx/XAppend.hpp>
|
|
|
|
#include <com/sun/star/beans/XPropertySet.hpp>
|
|
|
|
#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
|
|
|
|
#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
|
|
|
|
#include <comphelper/extract.hxx>
|
|
|
|
#include <com/sun/star/sdbcx/XDrop.hpp>
|
|
|
|
#include <com/sun/star/container/XNameContainer.hpp>
|
|
|
|
|
|
|
|
//......................................................................
|
|
|
|
namespace dbaui
|
|
|
|
{
|
|
|
|
//......................................................................
|
|
|
|
|
|
|
|
using namespace ::com::sun::star::uno;
|
|
|
|
using namespace ::com::sun::star::container;
|
|
|
|
using namespace ::com::sun::star::beans;
|
|
|
|
using namespace ::com::sun::star::sdbcx;
|
|
|
|
using namespace ::com::sun::star::sdbc;
|
|
|
|
|
|
|
|
//==================================================================
|
|
|
|
//= OIndexCollection
|
|
|
|
//==================================================================
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
OIndexCollection::OIndexCollection()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
OIndexCollection::OIndexCollection(const OIndexCollection& _rSource)
|
|
|
|
{
|
|
|
|
*this = _rSource;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
const OIndexCollection& OIndexCollection::operator=(const OIndexCollection& _rSource)
|
|
|
|
{
|
|
|
|
detach();
|
|
|
|
m_xIndexes = _rSource.m_xIndexes;
|
|
|
|
m_aIndexes = _rSource.m_aIndexes;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
void OIndexCollection::attach(const Reference< XNameAccess >& _rxIndexes)
|
|
|
|
{
|
|
|
|
implConstructFrom(_rxIndexes);
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
void OIndexCollection::detach()
|
|
|
|
{
|
|
|
|
m_xIndexes.clear();
|
|
|
|
m_aIndexes.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::const_iterator OIndexCollection::find(const String& _rName) const
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
::rtl::OUString sNameCompare(_rName);
|
|
|
|
|
|
|
|
// loop'n'compare
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::const_iterator aSearch = m_aIndexes.begin();
|
2009-07-03 12:24:35 +00:00
|
|
|
Indexes::const_iterator aEnd = m_aIndexes.end();
|
|
|
|
for (; aSearch != aEnd; ++aSearch)
|
2001-03-16 15:22:20 +00:00
|
|
|
if (aSearch->sName == sNameCompare)
|
|
|
|
break;
|
|
|
|
|
|
|
|
return aSearch;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::iterator OIndexCollection::find(const String& _rName)
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
::rtl::OUString sNameCompare(_rName);
|
|
|
|
|
|
|
|
// loop'n'compare
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::iterator aSearch = m_aIndexes.begin();
|
2009-07-03 12:24:35 +00:00
|
|
|
Indexes::iterator aEnd = m_aIndexes.end();
|
|
|
|
for (; aSearch != aEnd; ++aSearch)
|
2001-03-16 15:22:20 +00:00
|
|
|
if (aSearch->sName == sNameCompare)
|
|
|
|
break;
|
|
|
|
|
|
|
|
return aSearch;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::const_iterator OIndexCollection::findOriginal(const String& _rName) const
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
::rtl::OUString sNameCompare(_rName);
|
|
|
|
|
|
|
|
// loop'n'compare
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::const_iterator aSearch = m_aIndexes.begin();
|
2009-07-03 12:24:35 +00:00
|
|
|
Indexes::const_iterator aEnd = m_aIndexes.end();
|
|
|
|
for (; aSearch != aEnd; ++aSearch)
|
2001-03-16 15:22:20 +00:00
|
|
|
if (aSearch->getOriginalName() == sNameCompare)
|
|
|
|
break;
|
|
|
|
|
|
|
|
return aSearch;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::iterator OIndexCollection::findOriginal(const String& _rName)
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
::rtl::OUString sNameCompare(_rName);
|
|
|
|
|
|
|
|
// loop'n'compare
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::iterator aSearch = m_aIndexes.begin();
|
2009-07-03 12:24:35 +00:00
|
|
|
Indexes::iterator aEnd = m_aIndexes.end();
|
|
|
|
for (; aSearch != aEnd; ++aSearch)
|
2001-03-16 15:22:20 +00:00
|
|
|
if (aSearch->getOriginalName() == sNameCompare)
|
|
|
|
break;
|
|
|
|
|
|
|
|
return aSearch;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
void OIndexCollection::commitNewIndex(const Indexes::iterator& _rPos) SAL_THROW((SQLException))
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
OSL_ENSURE(_rPos->isNew(), "OIndexCollection::commitNewIndex: index must be new!");
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
Reference< XDataDescriptorFactory > xIndexFactory(m_xIndexes, UNO_QUERY);
|
|
|
|
Reference< XAppend > xAppendIndex(xIndexFactory, UNO_QUERY);
|
|
|
|
if (!xAppendIndex.is())
|
|
|
|
{
|
|
|
|
OSL_ENSURE(sal_False, "OIndexCollection::commitNewIndex: missing an interface of the index container!");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Reference< XPropertySet > xIndexDescriptor = xIndexFactory->createDataDescriptor();
|
|
|
|
Reference< XColumnsSupplier > xColsSupp(xIndexDescriptor, UNO_QUERY);
|
|
|
|
Reference< XNameAccess > xCols;
|
|
|
|
if (xColsSupp.is())
|
|
|
|
xCols = xColsSupp->getColumns();
|
|
|
|
|
|
|
|
Reference< XDataDescriptorFactory > xColumnFactory(xCols, UNO_QUERY);
|
|
|
|
Reference< XAppend > xAppendCols(xColumnFactory, UNO_QUERY);
|
|
|
|
if (!xAppendCols.is())
|
|
|
|
{
|
|
|
|
OSL_ENSURE(sal_False, "OIndexCollection::commitNewIndex: invalid index descriptor returned!");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// set the properties
|
2010-11-11 17:20:24 -03:00
|
|
|
static const ::rtl::OUString s_sUniquePropertyName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsUnique"));
|
|
|
|
static const ::rtl::OUString s_sSortPropertyName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsAscending"));
|
|
|
|
static const ::rtl::OUString s_sNamePropertyName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name"));
|
2001-03-16 15:22:20 +00:00
|
|
|
// the index' own props
|
|
|
|
xIndexDescriptor->setPropertyValue(s_sUniquePropertyName, ::cppu::bool2any(_rPos->bUnique));
|
|
|
|
xIndexDescriptor->setPropertyValue(s_sNamePropertyName, makeAny(_rPos->sName));
|
|
|
|
|
|
|
|
// the fields
|
|
|
|
for ( ConstIndexFieldsIterator aFieldLoop = _rPos->aFields.begin();
|
|
|
|
aFieldLoop != _rPos->aFields.end();
|
|
|
|
++aFieldLoop
|
|
|
|
)
|
|
|
|
{
|
2001-03-19 05:03:23 +00:00
|
|
|
OSL_ENSURE(!xCols->hasByName(aFieldLoop->sFieldName), "OIndexCollection::commitNewIndex: double column name (need to prevent this outside)!");
|
|
|
|
|
2001-03-16 15:22:20 +00:00
|
|
|
Reference< XPropertySet > xColDescriptor = xColumnFactory->createDataDescriptor();
|
|
|
|
OSL_ENSURE(xColDescriptor.is(), "OIndexCollection::commitNewIndex: invalid column descriptor!");
|
|
|
|
if (xColDescriptor.is())
|
|
|
|
{
|
|
|
|
xColDescriptor->setPropertyValue(s_sSortPropertyName, ::cppu::bool2any(aFieldLoop->bSortAscending));
|
|
|
|
xColDescriptor->setPropertyValue(s_sNamePropertyName, makeAny(::rtl::OUString(aFieldLoop->sFieldName)));
|
|
|
|
xAppendCols->appendByDescriptor(xColDescriptor);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
xAppendIndex->appendByDescriptor(xIndexDescriptor);
|
|
|
|
|
|
|
|
_rPos->flagAsCommitted(GrantIndexAccess());
|
|
|
|
_rPos->clearModified();
|
|
|
|
}
|
|
|
|
catch(SQLException&)
|
|
|
|
{ // allowed to pass
|
|
|
|
throw;
|
|
|
|
}
|
2008-05-05 15:01:54 +00:00
|
|
|
catch( const Exception& )
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
2008-05-05 15:01:54 +00:00
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
2001-03-16 15:22:20 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
sal_Bool OIndexCollection::dropNoRemove(const Indexes::iterator& _rPos) SAL_THROW((SQLException))
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
OSL_ENSURE(m_xIndexes->hasByName(_rPos->getOriginalName()), "OIndexCollection::drop: invalid name!");
|
|
|
|
|
|
|
|
Reference< XDrop > xDropIndex(m_xIndexes, UNO_QUERY);
|
|
|
|
if (!xDropIndex.is())
|
|
|
|
{
|
|
|
|
OSL_ENSURE(sal_False, "OIndexCollection::drop: no XDrop interface!");
|
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
|
|
|
|
xDropIndex->dropByName(_rPos->getOriginalName());
|
|
|
|
}
|
|
|
|
catch(SQLException&)
|
|
|
|
{ // allowed to pass
|
|
|
|
throw;
|
|
|
|
}
|
2008-05-05 15:01:54 +00:00
|
|
|
catch( const Exception& )
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
2008-05-05 15:01:54 +00:00
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
2001-03-16 15:22:20 +00:00
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
|
|
|
|
// adjust the OIndex structure
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::iterator aDropped = findOriginal(_rPos->getOriginalName());
|
2001-03-16 15:22:20 +00:00
|
|
|
OSL_ENSURE(aDropped != m_aIndexes.end(), "OIndexCollection::drop: invalid original name, but successfull commit?!");
|
|
|
|
aDropped->flagAsNew(GrantIndexAccess());
|
|
|
|
|
|
|
|
return sal_True;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
sal_Bool OIndexCollection::drop(const Indexes::iterator& _rPos) SAL_THROW((SQLException))
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
OSL_ENSURE((_rPos >= m_aIndexes.begin()) && (_rPos < m_aIndexes.end()),
|
|
|
|
"OIndexCollection::drop: invalid position (fasten your seatbelt .... this will crash)!");
|
|
|
|
|
|
|
|
if (!_rPos->isNew())
|
|
|
|
if (!dropNoRemove(_rPos))
|
|
|
|
return sal_False;
|
|
|
|
|
|
|
|
// adjust the index array
|
|
|
|
m_aIndexes.erase(_rPos);
|
|
|
|
return sal_True;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
void OIndexCollection::implFillIndexInfo(OIndex& _rIndex) SAL_THROW((Exception))
|
|
|
|
{
|
|
|
|
// get the UNO descriptor for the index
|
|
|
|
Reference< XPropertySet > xIndex;
|
|
|
|
m_xIndexes->getByName(_rIndex.getOriginalName()) >>= xIndex;
|
|
|
|
if (!xIndex.is())
|
|
|
|
{
|
|
|
|
OSL_ENSURE(sal_False, "OIndexCollection::implFillIndexInfo: got an invalid index object!");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
implFillIndexInfo(_rIndex, xIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
void OIndexCollection::implFillIndexInfo(OIndex& _rIndex, Reference< XPropertySet > _rxDescriptor) SAL_THROW((Exception))
|
|
|
|
{
|
2010-11-11 17:20:24 -03:00
|
|
|
static const ::rtl::OUString s_sPrimaryIndexPropertyName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsPrimaryKeyIndex"));
|
|
|
|
static const ::rtl::OUString s_sUniquePropertyName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsUnique"));
|
|
|
|
static const ::rtl::OUString s_sSortPropertyName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsAscending"));
|
|
|
|
static const ::rtl::OUString s_sCatalogPropertyName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Catalog"));
|
2001-03-16 15:22:20 +00:00
|
|
|
|
|
|
|
_rIndex.bPrimaryKey = ::cppu::any2bool(_rxDescriptor->getPropertyValue(s_sPrimaryIndexPropertyName));
|
|
|
|
_rIndex.bUnique = ::cppu::any2bool(_rxDescriptor->getPropertyValue(s_sUniquePropertyName));
|
|
|
|
_rxDescriptor->getPropertyValue(s_sCatalogPropertyName) >>= _rIndex.sDescription;
|
|
|
|
|
|
|
|
// the columns
|
|
|
|
Reference< XColumnsSupplier > xSuppCols(_rxDescriptor, UNO_QUERY);
|
|
|
|
Reference< XNameAccess > xCols;
|
|
|
|
if (xSuppCols.is())
|
|
|
|
xCols = xSuppCols->getColumns();
|
|
|
|
OSL_ENSURE(xCols.is(), "OIndexCollection::implFillIndexInfo: the index does not have columns!");
|
|
|
|
if (xCols.is())
|
|
|
|
{
|
|
|
|
Sequence< ::rtl::OUString > aFieldNames = xCols->getElementNames();
|
|
|
|
_rIndex.aFields.resize(aFieldNames.getLength());
|
|
|
|
|
|
|
|
const ::rtl::OUString* pFieldNames = aFieldNames.getConstArray();
|
|
|
|
const ::rtl::OUString* pFieldNamesEnd = pFieldNames + aFieldNames.getLength();
|
2005-09-05 08:00:04 +00:00
|
|
|
IndexFields::iterator aCopyTo = _rIndex.aFields.begin();
|
2001-03-16 15:22:20 +00:00
|
|
|
|
|
|
|
Reference< XPropertySet > xIndexColumn;
|
2005-09-05 08:00:04 +00:00
|
|
|
for (;pFieldNames < pFieldNamesEnd; ++pFieldNames, ++aCopyTo)
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
// extract the column
|
|
|
|
xIndexColumn.clear();
|
|
|
|
xCols->getByName(*pFieldNames) >>= xIndexColumn;
|
|
|
|
if (!xIndexColumn.is())
|
|
|
|
{
|
|
|
|
OSL_ENSURE(sal_False, "OIndexCollection::implFillIndexInfo: invalid index column!");
|
2005-09-05 08:00:04 +00:00
|
|
|
--aCopyTo;
|
2001-03-16 15:22:20 +00:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
// get the relevant properties
|
2005-09-05 08:00:04 +00:00
|
|
|
aCopyTo->sFieldName = *pFieldNames;
|
|
|
|
aCopyTo->bSortAscending = ::cppu::any2bool(xIndexColumn->getPropertyValue(s_sSortPropertyName));
|
2001-03-16 15:22:20 +00:00
|
|
|
}
|
|
|
|
|
2005-09-05 08:00:04 +00:00
|
|
|
_rIndex.aFields.resize(aCopyTo - _rIndex.aFields.begin());
|
2001-03-16 15:22:20 +00:00
|
|
|
// (just in case some fields were invalid ...)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
void OIndexCollection::resetIndex(const Indexes::iterator& _rPos) SAL_THROW((SQLException))
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
OSL_ENSURE(_rPos >= m_aIndexes.begin() && _rPos < m_aIndexes.end(),
|
|
|
|
"OIndexCollection::resetIndex: invalid position!");
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
_rPos->sName = _rPos->getOriginalName();
|
|
|
|
implFillIndexInfo(*_rPos);
|
|
|
|
|
|
|
|
_rPos->clearModified();
|
|
|
|
_rPos->flagAsCommitted(GrantIndexAccess());
|
|
|
|
}
|
|
|
|
catch(SQLException&)
|
|
|
|
{ // allowed to pass
|
|
|
|
throw;
|
|
|
|
}
|
2008-05-05 15:01:54 +00:00
|
|
|
catch( const Exception& )
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
2008-05-05 15:01:54 +00:00
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
2001-03-16 15:22:20 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
2005-09-05 08:00:04 +00:00
|
|
|
Indexes::iterator OIndexCollection::insert(const String& _rName)
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
|
|
|
OSL_ENSURE(end() == find(_rName), "OIndexCollection::insert: invalid new name!");
|
2001-03-30 12:56:42 +00:00
|
|
|
String tmpName;
|
|
|
|
OIndex aNewIndex(tmpName); // the empty string indicates the index is a new one
|
2001-03-16 15:22:20 +00:00
|
|
|
aNewIndex.sName = _rName;
|
|
|
|
m_aIndexes.push_back(aNewIndex);
|
|
|
|
return m_aIndexes.end() - 1; // the last element is the new one ...
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
void OIndexCollection::implConstructFrom(const Reference< XNameAccess >& _rxIndexes)
|
|
|
|
{
|
|
|
|
detach();
|
|
|
|
|
|
|
|
m_xIndexes = _rxIndexes;
|
|
|
|
if (m_xIndexes.is())
|
|
|
|
{
|
2001-03-30 13:12:19 +00:00
|
|
|
// loop through all the indexes
|
|
|
|
Sequence< ::rtl::OUString > aNames = m_xIndexes->getElementNames();
|
|
|
|
const ::rtl::OUString* pNames = aNames.getConstArray();
|
|
|
|
const ::rtl::OUString* pEnd = pNames + aNames.getLength();
|
|
|
|
for (; pNames < pEnd; ++pNames)
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
2001-03-30 13:12:19 +00:00
|
|
|
// extract the index object
|
|
|
|
Reference< XPropertySet > xIndex;
|
|
|
|
m_xIndexes->getByName(*pNames) >>= xIndex;
|
|
|
|
if (!xIndex.is())
|
2001-03-16 15:22:20 +00:00
|
|
|
{
|
2001-03-30 13:12:19 +00:00
|
|
|
OSL_ENSURE(sal_False, "OIndexCollection::implConstructFrom: got an invalid index object ... ignoring!");
|
|
|
|
continue;
|
2001-03-16 15:22:20 +00:00
|
|
|
}
|
2001-03-30 13:12:19 +00:00
|
|
|
|
|
|
|
// fill the OIndex structure
|
|
|
|
OIndex aCurrentIndex(*pNames);
|
|
|
|
implFillIndexInfo(aCurrentIndex);
|
|
|
|
m_aIndexes.push_back(aCurrentIndex);
|
2001-03-16 15:22:20 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//......................................................................
|
|
|
|
} // namespace dbaui
|
|
|
|
//......................................................................
|
|
|
|
|
2010-10-12 15:59:03 +02:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|