2000-09-18 23:16:46 +00:00
/*************************************************************************
*
2005-09-08 09:01:01 +00:00
* OpenOffice . org - a multi - platform office productivity suite
2000-09-18 23:16:46 +00:00
*
2005-09-08 09:01:01 +00:00
* $ RCSfile : RowSetBase . cxx , v $
2000-09-18 23:16:46 +00:00
*
2005-09-23 11:03:10 +00:00
* $ Revision : 1.78 $
2000-09-18 23:16:46 +00:00
*
2005-09-23 11:03:10 +00:00
* last change : $ Author : hr $ $ Date : 2005 - 09 - 23 12 : 03 : 10 $
2000-09-18 23:16:46 +00:00
*
2005-09-08 09:01:01 +00:00
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1 .
2000-09-18 23:16:46 +00:00
*
*
2005-09-08 09:01:01 +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
2000-09-18 23:16:46 +00:00
*
2005-09-08 09:01:01 +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 .
2000-09-18 23:16:46 +00:00
*
2005-09-08 09:01:01 +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 .
2000-09-18 23:16:46 +00:00
*
2005-09-08 09:01:01 +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
2000-09-18 23:16:46 +00:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2000-10-25 06:32:52 +00:00
# ifndef DBACCESS_CORE_API_ROWSETBASE_HXX
2000-09-18 23:16:46 +00:00
# include "RowSetBase.hxx"
2000-10-25 06:32:52 +00:00
# endif
2000-09-18 23:16:46 +00:00
# ifndef DBACCESS_CORE_API_CROWSETDATACOLUMN_HXX
# include "CRowSetDataColumn.hxx"
# endif
# ifndef _CONNECTIVITY_SDBCX_COLLECTION_HXX_
# include <connectivity/sdbcx/VCollection.hxx>
# endif
# ifndef DBACCESS_CORE_API_ROWSETCACHE_HXX
# include "RowSetCache.hxx"
# endif
2000-10-25 06:32:52 +00:00
# ifndef DBACCESS_SHARED_DBASTRINGS_HRC
# include "dbastrings.hrc"
2000-09-18 23:16:46 +00:00
# endif
# ifndef _COM_SUN_STAR_LANG_DISPOSEDEXCEPTION_HPP_
# include <com/sun/star/lang/DisposedException.hpp>
# endif
2000-10-25 06:32:52 +00:00
# ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
# include <com/sun/star/beans/PropertyAttribute.hpp>
# endif
2001-01-22 06:38:24 +00:00
# ifndef _COM_SUN_STAR_SDBCX_COMPAREBOOKMARK_HPP_
# include <com/sun/star/sdbcx/CompareBookmark.hpp>
# endif
2001-04-05 06:51:27 +00:00
# ifndef _COM_SUN_STAR_SDBC_RESULTSETCONCURRENCY_HPP_
# include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
# endif
2000-11-22 13:58:32 +00:00
# ifndef _COM_SUN_STAR_LANG_LOCALE_HPP_
# include <com/sun/star/lang/Locale.hpp>
# endif
# ifndef _COM_SUN_STAR_UTIL_NUMBERFORMAT_HPP_
# include <com/sun/star/util/NumberFormat.hpp>
# endif
2000-10-11 10:21:40 +00:00
# ifndef _COMPHELPER_SEQUENCE_HXX_
# include <comphelper/sequence.hxx>
2000-09-18 23:16:46 +00:00
# endif
2001-03-15 07:29:16 +00:00
# ifndef _COMPHELPER_EXTRACT_HXX_
# include <comphelper/extract.hxx>
2000-09-18 23:16:46 +00:00
# endif
2000-10-11 10:21:40 +00:00
# ifndef _COMPHELPER_SEQSTREAM_HXX
# include <comphelper/seqstream.hxx>
2000-09-29 14:23:36 +00:00
# endif
2000-10-25 06:32:52 +00:00
# ifndef _DBHELPER_DBEXCEPTION_HXX_
# include <connectivity/dbexception.hxx>
2000-10-24 12:17:01 +00:00
# endif
2001-01-24 10:02:14 +00:00
# ifndef _CONNECTIVITY_EMPTYMETADATA_HXX_
# include <connectivity/emptymetadata.hxx>
# endif
2000-10-24 12:17:01 +00:00
2004-08-02 14:00:45 +00:00
# ifndef _TOOLS_DEBUG_HXX
# include <tools/debug.hxx>
# endif
2000-09-18 23:16:46 +00:00
using namespace dbaccess ;
using namespace connectivity ;
2000-11-29 09:23:32 +00:00
using namespace connectivity : : sdbcx ;
2000-10-05 08:37:27 +00:00
using namespace comphelper ;
2000-10-25 06:32:52 +00:00
using namespace dbtools ;
2000-09-18 23:16:46 +00:00
using namespace : : com : : sun : : star : : uno ;
using namespace : : com : : sun : : star : : beans ;
using namespace : : com : : sun : : star : : sdbc ;
using namespace : : com : : sun : : star : : sdb ;
using namespace : : com : : sun : : star : : sdbcx ;
using namespace : : com : : sun : : star : : container ;
using namespace : : com : : sun : : star : : lang ;
2000-11-22 13:58:32 +00:00
using namespace : : com : : sun : : star : : util ;
2000-09-18 23:16:46 +00:00
using namespace : : cppu ;
using namespace : : osl ;
2001-01-24 10:02:14 +00:00
namespace dbaccess
{
// =========================================================================
// = OEmptyCollection
// =========================================================================
2000-09-18 23:16:46 +00:00
// -------------------------------------------------------------------------
class OEmptyCollection : public sdbcx : : OCollection
{
protected :
2001-10-12 11:02:56 +00:00
virtual void impl_refresh ( ) throw ( RuntimeException ) ;
2005-03-10 15:31:23 +00:00
virtual connectivity : : sdbcx : : ObjectType createObject ( const : : rtl : : OUString & _rName ) ;
2000-09-18 23:16:46 +00:00
public :
OEmptyCollection ( : : cppu : : OWeakObject & _rParent , : : osl : : Mutex & _rMutex ) : OCollection ( _rParent , sal_True , _rMutex , : : std : : vector < : : rtl : : OUString > ( ) ) { }
} ;
2001-10-12 11:02:56 +00:00
// -----------------------------------------------------------------------------
void OEmptyCollection : : impl_refresh ( ) throw ( RuntimeException )
{
}
// -----------------------------------------------------------------------------
2005-03-10 15:31:23 +00:00
connectivity : : sdbcx : : ObjectType OEmptyCollection : : createObject ( const : : rtl : : OUString & _rName )
2001-10-12 11:02:56 +00:00
{
2005-03-10 15:31:23 +00:00
return connectivity : : sdbcx : : ObjectType ( ) ;
2001-10-12 11:02:56 +00:00
}
// -----------------------------------------------------------------------------
2001-01-24 10:02:14 +00:00
// =========================================================================
// = ORowSetBase
// =========================================================================
2005-09-23 11:03:10 +00:00
DBG_NAME ( ORowSetBase )
2000-09-18 23:16:46 +00:00
// -------------------------------------------------------------------------
2001-11-15 09:42:42 +00:00
ORowSetBase : : ORowSetBase ( : : cppu : : OBroadcastHelper & _rBHelper , : : osl : : Mutex * _pMutex )
2004-08-02 14:00:45 +00:00
: OPropertyStateContainer ( _rBHelper )
2001-11-15 09:42:42 +00:00
, m_pMutex ( _pMutex )
2000-09-18 23:16:46 +00:00
, m_rBHelper ( _rBHelper )
, m_pCache ( NULL )
, m_pColumns ( NULL )
, m_nRowCount ( 0 )
2000-09-29 14:23:36 +00:00
, m_bBeforeFirst ( sal_True ) // changed from sal_False
2000-09-18 23:16:46 +00:00
, m_bAfterLast ( sal_False )
, m_bRowCountFinal ( sal_False )
, m_bClone ( sal_False )
2000-12-06 08:55:44 +00:00
, m_nPosition ( - 1 )
2001-02-23 14:22:32 +00:00
, m_bIgnoreResult ( sal_False )
2001-08-01 12:12:44 +00:00
, m_nLastColumnIndex ( - 1 )
2002-01-18 17:24:07 +00:00
, m_pEmptyCollection ( NULL )
2000-09-18 23:16:46 +00:00
{
2005-09-23 11:03:10 +00:00
DBG_CTOR ( ORowSetBase , NULL ) ;
2000-09-18 23:16:46 +00:00
sal_Int32 nRBT = PropertyAttribute : : READONLY | PropertyAttribute : : BOUND | PropertyAttribute : : TRANSIENT ;
registerProperty ( PROPERTY_ROWCOUNT , PROPERTY_ID_ROWCOUNT , nRBT , & m_nRowCount , : : getCppuType ( reinterpret_cast < sal_Int32 * > ( NULL ) ) ) ;
registerProperty ( PROPERTY_ISROWCOUNTFINAL , PROPERTY_ID_ISROWCOUNTFINAL , nRBT , & m_bRowCountFinal , : : getBooleanCppuType ( ) ) ;
}
2001-04-20 10:44:05 +00:00
// -----------------------------------------------------------------------------
ORowSetBase : : ~ ORowSetBase ( )
{
if ( m_pColumns )
{
2001-08-13 07:45:02 +00:00
TDataColumns ( ) . swap ( m_aDataColumns ) ;
2004-08-02 14:00:45 +00:00
m_pColumns - > acquire ( ) ;
m_pColumns - > disposing ( ) ;
2001-04-20 10:44:05 +00:00
delete m_pColumns ;
m_pColumns = NULL ;
}
2002-01-18 17:24:07 +00:00
if ( m_pEmptyCollection )
delete m_pEmptyCollection ;
2005-09-23 11:03:10 +00:00
DBG_DTOR ( ORowSetBase , NULL ) ;
2001-04-20 10:44:05 +00:00
}
2000-09-18 23:16:46 +00:00
// com::sun::star::lang::XTypeProvider
//--------------------------------------------------------------------------
Sequence < Type > ORowSetBase : : getTypes ( ) throw ( RuntimeException )
{
2004-08-02 14:00:45 +00:00
return : : comphelper : : concatSequences ( ORowSetBase_BASE : : getTypes ( ) , OPropertyStateContainer : : getTypes ( ) ) ;
2000-09-18 23:16:46 +00:00
}
// com::sun::star::uno::XInterface
//--------------------------------------------------------------------------
Any ORowSetBase : : queryInterface ( const Type & rType ) throw ( RuntimeException )
{
2001-08-24 05:40:35 +00:00
Any aRet = ORowSetBase_BASE : : queryInterface ( rType ) ;
2000-09-18 23:16:46 +00:00
if ( ! aRet . hasValue ( ) )
2004-08-02 14:00:45 +00:00
aRet = OPropertyStateContainer : : queryInterface ( rType ) ;
2000-09-18 23:16:46 +00:00
return aRet ;
}
// -------------------------------------------------------------------------
void SAL_CALL ORowSetBase : : getFastPropertyValue ( Any & rValue , sal_Int32 nHandle ) const
{
if ( m_pCache )
{
switch ( nHandle )
{
case PROPERTY_ID_ROWCOUNT :
rValue < < = m_pCache - > m_nRowCount ;
break ;
case PROPERTY_ID_ISROWCOUNTFINAL :
rValue . setValue ( & m_pCache - > m_bRowCountFinal , : : getCppuBooleanType ( ) ) ;
break ;
default :
2004-08-02 14:00:45 +00:00
OPropertyStateContainer : : getFastPropertyValue ( rValue , nHandle ) ;
2000-09-18 23:16:46 +00:00
} ;
}
else
2004-08-02 14:00:45 +00:00
OPropertyStateContainer : : getFastPropertyValue ( rValue , nHandle ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
// OComponentHelper
void SAL_CALL ORowSetBase : : disposing ( void )
{
2001-11-15 09:42:42 +00:00
MutexGuard aGuard ( * m_pMutex ) ;
2000-09-18 23:16:46 +00:00
2003-03-19 16:57:12 +00:00
if ( m_pColumns )
2001-08-13 07:45:02 +00:00
{
TDataColumns ( ) . swap ( m_aDataColumns ) ;
2000-09-18 23:16:46 +00:00
m_pColumns - > disposing ( ) ;
2001-08-13 07:45:02 +00:00
}
2003-03-19 16:57:12 +00:00
if ( m_pCache )
m_pCache - > deregisterOldRow ( m_aOldRow ) ;
m_pCache = NULL ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
2000-10-11 10:21:40 +00:00
// comphelper::OPropertyArrayUsageHelper
2000-09-18 23:16:46 +00:00
: : cppu : : IPropertyArrayHelper * ORowSetBase : : createArrayHelper ( ) const
{
Sequence < Property > aProps ;
describeProperties ( aProps ) ;
return new : : cppu : : OPropertyArrayHelper ( aProps ) ;
}
// -------------------------------------------------------------------------
// cppu::OPropertySetHelper
: : cppu : : IPropertyArrayHelper & SAL_CALL ORowSetBase : : getInfoHelper ( )
{
return * const_cast < ORowSetBase * > ( this ) - > getArrayHelper ( ) ;
}
// -------------------------------------------------------------------------
// XRow
sal_Bool SAL_CALL ORowSetBase : : wasNull ( ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-29 14:23:36 +00:00
2005-09-05 07:57:38 +00:00
return ( ( m_nLastColumnIndex ! = - 1 ) & & ! m_aCurrentRow . isNull ( ) & & m_aCurrentRow ! = m_pCache - > getEnd ( ) & & m_aCurrentRow - > isValid ( ) ) ? ( * ( * m_aCurrentRow ) ) [ m_nLastColumnIndex ] . isNull ( ) : sal_True ;
2000-09-18 23:16:46 +00:00
}
2001-06-26 09:12:41 +00:00
// -----------------------------------------------------------------------------
2001-07-30 07:53:02 +00:00
const ORowSetValue & ORowSetBase : : getValue ( sal_Int32 columnIndex )
2000-09-18 23:16:46 +00:00
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2003-03-19 16:57:12 +00:00
OSL_ENSURE ( ! ( m_bBeforeFirst | | m_bAfterLast ) , " ORowSetBase::getValue: Illegal call here (we're before first or after last)! " ) ;
2000-09-18 23:16:46 +00:00
2005-09-05 07:57:38 +00:00
if ( ! m_aCurrentRow . isNull ( ) & & m_aCurrentRow ! = m_pCache - > getEnd ( ) & & m_aCurrentRow - > isValid ( ) )
2002-11-13 05:56:59 +00:00
{
2003-04-15 15:02:32 +00:00
# if OSL_DEBUG_LEVEL > 0
2002-12-05 08:53:00 +00:00
ORowSetMatrix : : iterator aCacheEnd = m_pCache - > getEnd ( ) ;
ORowSetMatrix : : iterator aCurrentRow = m_aCurrentRow ;
# endif
2005-09-05 07:57:38 +00:00
OSL_ENSURE ( ! m_aCurrentRow . isNull ( ) & & m_aCurrentRow < = m_pCache - > getEnd ( ) , " Invalid iterator set for currentrow! " ) ;
2001-07-30 07:53:02 +00:00
return ( * ( * m_aCurrentRow ) ) [ m_nLastColumnIndex = columnIndex ] ;
2002-11-13 05:56:59 +00:00
}
2001-06-26 09:12:41 +00:00
else
2001-08-24 05:40:35 +00:00
{ // currentrow is null when the clone move the window
2005-09-05 07:57:38 +00:00
if ( m_aCurrentRow . isNull ( ) )
2001-07-12 06:56:32 +00:00
{
positionCache ( ) ;
m_aCurrentRow = m_pCache - > m_aMatrixIter ;
2005-09-05 07:57:38 +00:00
OSL_ENSURE ( ! m_aCurrentRow . isNull ( ) , " ORowSetBase::getValue: we don't stand on a valid row! Row is null. " ) ;
2001-07-12 06:56:32 +00:00
return getValue ( columnIndex ) ;
}
2005-09-05 07:57:38 +00:00
OSL_ENSURE ( ! m_aCurrentRow . isNull ( ) & & ( m_bBeforeFirst | | m_bAfterLast ) , " ORowSetBase::getValue: we don't stand on a valid row! Row is equal to end of matrix " ) ;
2001-06-26 09:12:41 +00:00
}
2001-07-30 07:53:02 +00:00
// we should normally never reach this here
return m_aEmptyValue ;
2001-06-26 09:12:41 +00:00
}
// -------------------------------------------------------------------------
: : rtl : : OUString SAL_CALL ORowSetBase : : getString ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : getBoolean ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Int8 SAL_CALL ORowSetBase : : getByte ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Int16 SAL_CALL ORowSetBase : : getShort ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Int32 SAL_CALL ORowSetBase : : getInt ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Int64 SAL_CALL ORowSetBase : : getLong ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
float SAL_CALL ORowSetBase : : getFloat ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
double SAL_CALL ORowSetBase : : getDouble ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
Sequence < sal_Int8 > SAL_CALL ORowSetBase : : getBytes ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
: : com : : sun : : star : : util : : Date SAL_CALL ORowSetBase : : getDate ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
: : com : : sun : : star : : util : : Time SAL_CALL ORowSetBase : : getTime ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
: : com : : sun : : star : : util : : DateTime SAL_CALL ORowSetBase : : getTimestamp ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getValue ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
Reference < : : com : : sun : : star : : io : : XInputStream > SAL_CALL ORowSetBase : : getBinaryStream ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-29 14:23:36 +00:00
2005-09-05 07:57:38 +00:00
if ( ! m_aCurrentRow . isNull ( ) & & m_aCurrentRow ! = m_pCache - > getEnd ( ) )
2000-10-18 15:32:08 +00:00
return new : : comphelper : : SequenceInputStream ( ( * ( * m_aCurrentRow ) ) [ m_nLastColumnIndex = columnIndex ] . getSequence ( ) ) ;
2001-07-12 06:56:32 +00:00
else
{
2005-09-05 07:57:38 +00:00
if ( ! m_aCurrentRow . isNull ( ) )
2001-07-12 11:14:47 +00:00
OSL_ENSURE ( ( m_bBeforeFirst | | m_bAfterLast ) , " ORowSetBase::getValue: we don't stand on a valid row! Row is equal to end of matrix " ) ;
2001-07-12 06:56:32 +00:00
else
2001-07-12 11:14:47 +00:00
{
positionCache ( ) ;
m_aCurrentRow = m_pCache - > m_aMatrixIter ;
2005-09-05 07:57:38 +00:00
OSL_ENSURE ( ! m_aCurrentRow . isNull ( ) , " ORowSetBase::getValue: we don't stand on a valid row! Row is null. " ) ;
2001-07-12 11:14:47 +00:00
return getBinaryStream ( columnIndex ) ;
}
2001-07-12 06:56:32 +00:00
}
2000-09-29 14:23:36 +00:00
return Reference < : : com : : sun : : star : : io : : XInputStream > ( ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
Reference < : : com : : sun : : star : : io : : XInputStream > SAL_CALL ORowSetBase : : getCharacterStream ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
return getBinaryStream ( columnIndex ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
Any SAL_CALL ORowSetBase : : getObject ( sal_Int32 columnIndex , const Reference < XNameAccess > & typeMap ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
2000-09-29 14:23:36 +00:00
return Any ( ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
Reference < XRef > SAL_CALL ORowSetBase : : getRef ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
2000-09-29 14:23:36 +00:00
return Reference < XRef > ( ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
Reference < XBlob > SAL_CALL ORowSetBase : : getBlob ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
2000-09-29 14:23:36 +00:00
return Reference < XBlob > ( ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
Reference < XClob > SAL_CALL ORowSetBase : : getClob ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-29 14:23:36 +00:00
return Reference < XClob > ( ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
Reference < XArray > SAL_CALL ORowSetBase : : getArray ( sal_Int32 columnIndex ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-29 14:23:36 +00:00
return Reference < XArray > ( ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
// ::com::sun::star::sdbcx::XRowLocate
Any SAL_CALL ORowSetBase : : getBookmark ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::getBookmark() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
2000-12-06 08:55:44 +00:00
if ( ! m_pCache | | m_bBeforeFirst | | m_bAfterLast )
2001-07-12 06:56:32 +00:00
{
OSL_ENSURE ( 0 , " Ask for bookmark but we stand on invalid row. " ) ;
2001-04-19 06:14:49 +00:00
throwFunctionSequenceException ( * m_pMySelf ) ;
2001-07-12 06:56:32 +00:00
}
2000-09-18 23:16:46 +00:00
2001-01-24 08:52:19 +00:00
OSL_ENSURE ( m_aBookmark . hasValue ( ) , " Bookmark has no value! " ) ;
2000-09-29 14:23:36 +00:00
return m_aBookmark ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : moveToBookmark ( const Any & bookmark ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::moveToBookmark(Any) Clone = %i \n " , m_bClone ) ;
2001-01-22 06:38:24 +00:00
OSL_ENSURE ( bookmark . hasValue ( ) , " ORowSetBase::moveToBookmark bookmark has no value! " ) ;
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
2001-04-05 06:51:27 +00:00
if ( ! bookmark . hasValue ( ) | | m_nResultSetType = = ResultSetType : : FORWARD_ONLY )
2001-07-12 06:56:32 +00:00
{
if ( bookmark . hasValue ( ) )
OSL_ENSURE ( 0 , " MoveToBookmark is not possible when we are only forward " ) ;
else
OSL_ENSURE ( 0 , " Bookmark is not valid " ) ;
2001-04-19 06:14:49 +00:00
throwFunctionSequenceException ( * m_pMySelf ) ;
2001-07-12 06:56:32 +00:00
}
2000-09-18 23:16:46 +00:00
2000-09-29 14:23:36 +00:00
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-29 14:23:36 +00:00
2001-04-06 09:19:13 +00:00
sal_Bool bRet ;
2002-08-13 10:13:00 +00:00
if ( bRet = notifyAllListenersCursorBeforeMove ( aGuard ) )
2001-04-06 09:19:13 +00:00
{
// check if we are inserting a row
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2000-09-29 14:23:36 +00:00
2003-03-19 16:57:12 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2000-09-18 23:16:46 +00:00
2001-04-06 09:19:13 +00:00
bRet = m_pCache - > moveToBookmark ( bookmark ) ;
if ( bRet )
{
2002-12-05 08:53:00 +00:00
// notification order
// - column values
// - cursorMoved
2002-08-13 10:13:00 +00:00
setCurrentRow ( sal_True , aOldValues , aGuard ) ;
2001-07-12 06:56:32 +00:00
}
else
{
movementFailed ( ) ;
2001-04-06 09:19:13 +00:00
}
2002-12-05 08:53:00 +00:00
// - IsModified
// - IsNew
aNotifier . fire ( ) ;
2000-09-29 14:23:36 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::moveToBookmark(Any) = %i Clone = %i \n " , bRet , m_bClone ) ;
2000-09-18 23:16:46 +00:00
return bRet ;
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : moveRelativeToBookmark ( const Any & bookmark , sal_Int32 rows ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::moveRelativeToBookmark(Any,%i) Clone = %i \n " , rows , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2000-09-29 14:23:36 +00:00
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2000-09-29 14:23:36 +00:00
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2000-09-29 14:23:36 +00:00
2001-04-06 09:19:13 +00:00
sal_Bool bRet ;
2002-08-13 10:13:00 +00:00
if ( bRet = notifyAllListenersCursorBeforeMove ( aGuard ) )
2001-04-06 09:19:13 +00:00
{
// check if we are inserting a row
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2000-09-29 14:23:36 +00:00
2003-03-19 16:57:12 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2000-09-18 23:16:46 +00:00
2001-04-06 09:19:13 +00:00
bRet = m_pCache - > moveRelativeToBookmark ( bookmark , rows ) ;
if ( bRet )
2001-01-24 08:52:19 +00:00
{
2002-12-05 08:53:00 +00:00
// notification order
// - column values
// - cursorMoved
2002-08-13 10:13:00 +00:00
setCurrentRow ( sal_True , aOldValues , aGuard ) ;
2001-01-24 08:52:19 +00:00
}
2001-07-12 06:56:32 +00:00
else
movementFailed ( ) ;
2002-12-05 08:53:00 +00:00
// - IsModified
// - IsNew
aNotifier . fire ( ) ;
// RowCount/IsRowCountFinal
fireRowcount ( ) ;
2000-09-29 14:23:36 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE3 ( " DBACCESS ORowSetBase::moveRelativeToBookmark(Any,%i) = %i Clone = %i \n " , rows , bRet , m_bClone ) ;
2000-09-18 23:16:46 +00:00
return bRet ;
}
// -------------------------------------------------------------------------
sal_Int32 SAL_CALL ORowSetBase : : compareBookmarks ( const Any & first , const Any & second ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
return m_pCache - > compareBookmarks ( first , second ) ;
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : hasOrderedBookmarks ( ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
return m_pCache - > hasOrderedBookmarks ( ) ;
}
// -------------------------------------------------------------------------
sal_Int32 SAL_CALL ORowSetBase : : hashBookmark ( const Any & bookmark ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
return m_pCache - > hashBookmark ( bookmark ) ;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// XResultSetMetaDataSupplier
Reference < XResultSetMetaData > SAL_CALL ORowSetBase : : getMetaData ( ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2000-09-18 23:16:46 +00:00
2001-07-18 09:39:14 +00:00
Reference < XResultSetMetaData > xMeta ;
if ( m_pCache )
xMeta = m_pCache - > getMetaData ( ) ;
else
xMeta = new OEmptyMetaData ( ) ;
return xMeta ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
// XColumnLocate
sal_Int32 SAL_CALL ORowSetBase : : findColumn ( const : : rtl : : OUString & columnName ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2000-09-18 23:16:46 +00:00
: : osl : : MutexGuard aGuard ( m_aColumnsMutex ) ;
// it is possible to save some time her when we remember the names - position relation in a map
2001-03-27 05:42:16 +00:00
return m_pColumns ? m_pColumns - > findColumn ( columnName ) : sal_Int32 ( 0 ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
// ::com::sun::star::sdbcx::XColumnsSupplier
Reference < XNameAccess > SAL_CALL ORowSetBase : : getColumns ( ) throw ( RuntimeException )
{
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2000-09-18 23:16:46 +00:00
2001-06-26 09:12:41 +00:00
: : osl : : MutexGuard aGuard ( m_aColumnsMutex ) ;
2000-10-17 09:19:03 +00:00
if ( ! m_pColumns )
2001-05-28 12:03:37 +00:00
{
2002-01-18 17:24:07 +00:00
if ( ! m_pEmptyCollection )
m_pEmptyCollection = new OEmptyCollection ( * m_pMySelf , m_aColumnsMutex ) ;
return m_pEmptyCollection ;
2001-05-28 12:03:37 +00:00
}
2000-09-18 23:16:46 +00:00
return m_pColumns ;
}
// -------------------------------------------------------------------------
// XResultSet
sal_Bool SAL_CALL ORowSetBase : : next ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::next() Clone = %i \n " , m_bClone ) ;
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
2001-04-06 09:19:13 +00:00
sal_Bool bRet ;
2002-08-13 10:13:00 +00:00
if ( bRet = notifyAllListenersCursorBeforeMove ( aGuard ) )
2000-11-14 12:28:20 +00:00
{
2001-04-06 09:19:13 +00:00
// check if we are inserting a row
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2001-04-06 09:19:13 +00:00
2003-03-19 16:57:12 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2001-12-19 14:16:17 +00:00
2002-10-25 07:31:32 +00:00
if ( m_aBookmark . hasValue ( ) ) // #104474# OJ
positionCache ( ) ;
2005-03-18 09:05:00 +00:00
sal_Bool bAfterLast = m_pCache - > isAfterLast ( ) ;
2001-04-06 09:19:13 +00:00
bRet = m_pCache - > next ( ) ;
2002-12-05 08:53:00 +00:00
2005-03-18 09:05:00 +00:00
if ( bRet | | bAfterLast ! = m_pCache - > isAfterLast ( ) )
2001-04-06 09:19:13 +00:00
{
2002-12-05 08:53:00 +00:00
// notification order
// - column values
// - cursorMoved
2002-08-13 10:13:00 +00:00
setCurrentRow ( sal_True , aOldValues , aGuard ) ;
2001-07-12 06:56:32 +00:00
OSL_ENSURE ( ! m_bBeforeFirst , " BeforeFirst is true. I don't know why? " ) ;
2001-04-06 09:19:13 +00:00
}
else
{
2001-07-12 06:56:32 +00:00
// moved after the last row
movementFailed ( ) ;
OSL_ENSURE ( m_bAfterLast , " AfterLast is false. I don't know why? " ) ;
2001-04-06 09:19:13 +00:00
}
2002-12-05 08:53:00 +00:00
// - IsModified
// - IsNew
aNotifier . fire ( ) ;
// - RowCount/IsRowCountFinal
2001-04-06 09:19:13 +00:00
fireRowcount ( ) ;
2000-11-10 15:05:41 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::next() = %i Clone = %i \n " , bRet , m_bClone ) ;
2000-09-18 23:16:46 +00:00
return bRet ;
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : isBeforeFirst ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::isBeforeFirst() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::isBeforeFirst() = %i Clone = %i \n " , m_bBeforeFirst , m_bClone ) ;
2000-09-18 23:16:46 +00:00
return m_bBeforeFirst ;
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : isAfterLast ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::isAfterLast() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::isAfterLast() = %i Clone = %i \n " , m_bAfterLast , m_bClone ) ;
2000-09-18 23:16:46 +00:00
2001-01-24 08:52:19 +00:00
return m_bAfterLast ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
2002-12-05 13:10:11 +00:00
sal_Bool ORowSetBase : : isOnFirst ( )
{
return isFirst ( ) ;
}
// -------------------------------------------------------------------------
2000-09-18 23:16:46 +00:00
sal_Bool SAL_CALL ORowSetBase : : isFirst ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::isFirst() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2000-09-18 23:16:46 +00:00
2001-07-12 06:56:32 +00:00
sal_Bool bIsFirst = ! ( m_bBeforeFirst | | m_bAfterLast ) ;
if ( bIsFirst )
{
positionCache ( ) ;
bIsFirst = m_pCache - > isFirst ( ) ;
}
2000-09-18 23:16:46 +00:00
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::isFirst() = %i Clone = %i \n " , bIsFirst , m_bClone ) ;
2001-07-12 06:56:32 +00:00
return bIsFirst ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
2002-12-05 13:10:11 +00:00
sal_Bool ORowSetBase : : isOnLast ( )
{
return isLast ( ) ;
}
// -----------------------------------------------------------------------------
2000-09-18 23:16:46 +00:00
sal_Bool SAL_CALL ORowSetBase : : isLast ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::isLast() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2000-09-18 23:16:46 +00:00
2001-07-12 06:56:32 +00:00
sal_Bool bIsLast = ! ( m_bBeforeFirst | | m_bAfterLast ) ;
if ( bIsLast ) // so we can't be on the last
{
positionCache ( ) ;
bIsLast = m_pCache - > isLast ( ) ;
}
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::isLast() = %i Clone = %i \n " , bIsLast , m_bClone ) ;
2001-07-12 06:56:32 +00:00
return bIsLast ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
void SAL_CALL ORowSetBase : : beforeFirst ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::beforeFirst() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2000-09-29 14:23:36 +00:00
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2001-12-19 14:16:17 +00:00
// check if we are inserting a row
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-08-13 10:13:00 +00:00
if ( ( bWasNew | | ! m_bBeforeFirst ) & & notifyAllListenersCursorBeforeMove ( aGuard ) )
2000-09-18 23:16:46 +00:00
{
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2001-04-06 09:19:13 +00:00
2005-03-18 09:05:00 +00:00
if ( ! m_bBeforeFirst )
2001-12-19 14:16:17 +00:00
{
2005-03-18 09:05:00 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2001-04-06 09:19:13 +00:00
m_pCache - > beforeFirst ( ) ;
2002-12-05 08:53:00 +00:00
2003-06-25 10:02:35 +00:00
// notification order
// - column values
// - cursorMoved
setCurrentRow ( sal_True , aOldValues , aGuard ) ;
2002-12-05 08:53:00 +00:00
2005-03-18 09:05:00 +00:00
// - IsModified
// - Isnew
aNotifier . fire ( ) ;
// - RowCount/IsRowCountFinal
fireRowcount ( ) ;
}
2002-12-05 08:53:00 +00:00
// to be done _after_ the notifications!
2003-03-19 16:57:12 +00:00
m_aOldRow - > clearRow ( ) ;
2000-09-18 23:16:46 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::beforeFirst() Clone = %i \n " , m_bClone ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
void SAL_CALL ORowSetBase : : afterLast ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::afterLast() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2000-09-18 23:16:46 +00:00
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2001-12-19 14:16:17 +00:00
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-08-13 10:13:00 +00:00
if ( ( bWasNew | | ! m_bAfterLast ) & & notifyAllListenersCursorBeforeMove ( aGuard ) )
2000-09-18 23:16:46 +00:00
{
2001-04-06 09:19:13 +00:00
// check if we are inserting a row
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2001-04-06 09:19:13 +00:00
if ( ! m_bAfterLast )
{
2003-03-19 16:57:12 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2002-12-05 08:53:00 +00:00
2001-04-06 09:19:13 +00:00
m_pCache - > afterLast ( ) ;
2002-12-05 08:53:00 +00:00
// notification order
// - column values
// - cursorMoved
2002-08-13 10:13:00 +00:00
setCurrentRow ( sal_True , aOldValues , aGuard ) ;
2002-12-05 08:53:00 +00:00
// - IsModified
// - Isnew
aNotifier . fire ( ) ;
// - RowCount/IsRowCountFinal
fireRowcount ( ) ;
2001-04-06 09:19:13 +00:00
}
2000-09-18 23:16:46 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::afterLast() Clone = %i \n " , m_bClone ) ;
2000-09-18 23:16:46 +00:00
}
2002-12-05 13:10:11 +00:00
// -----------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : move ( : : std : : mem_fun_t < sal_Bool , ORowSetBase > & _aCheckFunctor ,
: : std : : mem_fun_t < sal_Bool , ORowSetCache > & _aMovementFunctor )
2000-09-18 23:16:46 +00:00
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::move() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2000-09-29 14:23:36 +00:00
2001-04-06 09:19:13 +00:00
sal_Bool bRet ;
2002-08-13 10:13:00 +00:00
if ( bRet = notifyAllListenersCursorBeforeMove ( aGuard ) )
2001-04-06 09:19:13 +00:00
{
// check if we are inserting a row
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2000-09-29 14:23:36 +00:00
2003-03-19 16:57:12 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2000-09-18 23:16:46 +00:00
2002-12-05 13:10:11 +00:00
sal_Bool bMoved = ( bWasNew | | ! _aCheckFunctor ( this ) ) ;
2000-09-18 23:16:46 +00:00
2002-12-05 13:10:11 +00:00
bRet = _aMovementFunctor ( m_pCache ) ;
2002-12-05 08:53:00 +00:00
2002-12-05 13:10:11 +00:00
if ( bRet )
2002-12-05 08:53:00 +00:00
{
// notification order
// - column values
// - cursorMoved
2002-08-13 10:13:00 +00:00
setCurrentRow ( bMoved , aOldValues , aGuard ) ;
2002-12-05 08:53:00 +00:00
}
2001-04-06 09:19:13 +00:00
else
2002-12-05 08:53:00 +00:00
{ // first goes wrong so there is no row
2001-07-12 06:56:32 +00:00
movementFailed ( ) ;
2001-04-06 09:19:13 +00:00
}
2002-12-05 08:53:00 +00:00
// - IsModified
// - IsNew
aNotifier . fire ( ) ;
// - RowCount/IsRowCountFinal
2001-04-06 09:19:13 +00:00
fireRowcount ( ) ;
2000-11-14 12:28:20 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::move() = %i Clone = %i \n " , bRet , m_bClone ) ;
2000-09-18 23:16:46 +00:00
return bRet ;
}
// -------------------------------------------------------------------------
2002-12-05 13:10:11 +00:00
sal_Bool SAL_CALL ORowSetBase : : first ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::first() Clone = %i \n " , m_bClone ) ;
2002-12-10 11:38:44 +00:00
: : std : : mem_fun_t < sal_Bool , ORowSetBase > ioF_tmp ( & ORowSetBase : : isOnFirst ) ;
: : std : : mem_fun_t < sal_Bool , ORowSetCache > F_tmp ( & ORowSetCache : : first ) ;
return move ( ioF_tmp , F_tmp ) ;
2002-12-05 13:10:11 +00:00
}
// -------------------------------------------------------------------------
2000-09-18 23:16:46 +00:00
sal_Bool SAL_CALL ORowSetBase : : last ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::last() Clone = %i \n " , m_bClone ) ;
2002-12-10 11:38:44 +00:00
: : std : : mem_fun_t < sal_Bool , ORowSetBase > ioL_tmp ( & ORowSetBase : : isOnLast ) ;
: : std : : mem_fun_t < sal_Bool , ORowSetCache > L_tmp ( & ORowSetCache : : last ) ;
return move ( ioL_tmp , L_tmp ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Int32 SAL_CALL ORowSetBase : : getRow ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::getRow() Clone = %i \n " , m_bClone ) ;
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-29 14:23:36 +00:00
2001-06-26 09:12:41 +00:00
sal_Int32 nPos = 0 ;
if ( ! ( m_bAfterLast | | m_bBeforeFirst ) ) // we are on no valid row
{
// check if we are inserting a row
if ( ! ( ! m_bClone & & m_pCache - > m_bInserted ) )
{
if ( ! m_aBookmark . hasValue ( ) ) // check if we are standing on a deleted row
nPos = m_nPosition ;
else
{
if ( m_pCache - > m_bAfterLast | | m_pCache - > m_bBeforeFirst | | m_pCache - > compareBookmarks ( m_aBookmark , m_pCache - > getBookmark ( ) ) ! = CompareBookmark : : EQUAL )
2001-07-12 06:56:32 +00:00
{
# ifdef DBG_UTIL
sal_Bool bRet = m_pCache - > moveToBookmark ( m_aBookmark ) ;
OSL_ENSURE ( bRet , " moveToBookamrk failed so the position isn't valid! " ) ;
# else
2001-06-26 09:12:41 +00:00
m_pCache - > moveToBookmark ( m_aBookmark ) ;
2001-07-12 06:56:32 +00:00
# endif
}
2001-06-26 09:12:41 +00:00
nPos = m_pCache - > getRow ( ) ;
}
}
}
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::getRow() = %i Clone = %i \n " , nPos , m_bClone ) ;
2001-06-26 09:12:41 +00:00
return nPos ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : absolute ( sal_Int32 row ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::absolute(%i) Clone = %i \n " , row , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2000-09-18 23:16:46 +00:00
2001-06-26 09:12:41 +00:00
sal_Bool bRet = ! ( m_bAfterLast & & row > 1 ) ; // m_bAfterLast && row > 1 we are already behind the last row
2000-09-18 23:16:46 +00:00
2002-08-13 10:13:00 +00:00
if ( bRet & & ( bRet = notifyAllListenersCursorBeforeMove ( aGuard ) ) )
2000-09-18 23:16:46 +00:00
{
2001-04-06 09:19:13 +00:00
// check if we are inserting a row
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2001-04-06 09:19:13 +00:00
2003-03-19 16:57:12 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2001-04-06 09:19:13 +00:00
bRet = m_pCache - > absolute ( row ) ;
2002-12-05 08:53:00 +00:00
2001-04-06 09:19:13 +00:00
if ( bRet )
{
2002-12-05 08:53:00 +00:00
// notification order
// - column values
// - cursorMoved
2002-08-13 10:13:00 +00:00
setCurrentRow ( sal_True , aOldValues , aGuard ) ;
2001-04-06 09:19:13 +00:00
}
else
2001-07-12 06:56:32 +00:00
{ // absolute movement goes wrong we stand left or right side of the rows
movementFailed ( ) ;
2001-04-06 09:19:13 +00:00
}
2002-12-05 08:53:00 +00:00
// - IsModified
// - IsNew
aNotifier . fire ( ) ;
// - RowCount/IsRowCountFinal
2001-04-06 09:19:13 +00:00
fireRowcount ( ) ;
2000-09-18 23:16:46 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE3 ( " DBACCESS ORowSetBase::absolute(%i) = %i Clone = %i \n " , row , bRet , m_bClone ) ;
2000-09-18 23:16:46 +00:00
return bRet ;
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : relative ( sal_Int32 rows ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::relative(%i) Clone = %i \n " , rows , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2000-09-18 23:16:46 +00:00
if ( ! rows )
return sal_True ; // in this case do nothing
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2000-09-18 23:16:46 +00:00
2001-06-26 09:12:41 +00:00
sal_Bool bRet = ! ( ( m_bAfterLast & & rows > 1 ) | | ( m_bBeforeFirst & & rows < 0 ) ) ; // we are already behind the last row or before the first
2000-09-18 23:16:46 +00:00
2000-09-29 14:23:36 +00:00
2002-08-13 10:13:00 +00:00
if ( bRet & & ( bRet = notifyAllListenersCursorBeforeMove ( aGuard ) ) )
2000-09-18 23:16:46 +00:00
{
2001-04-06 09:19:13 +00:00
// check if we are inserting a row
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2001-04-06 09:19:13 +00:00
2003-03-19 16:57:12 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2001-04-06 09:19:13 +00:00
2002-10-25 07:31:32 +00:00
if ( m_aBookmark . hasValue ( ) ) // #104474# OJ
positionCache ( ) ;
2001-04-06 09:19:13 +00:00
bRet = m_pCache - > relative ( rows ) ;
2002-12-05 08:53:00 +00:00
2001-04-06 09:19:13 +00:00
if ( bRet )
{
2002-12-05 08:53:00 +00:00
// notification order
// - column values
// - cursorMoved
2002-08-13 10:13:00 +00:00
setCurrentRow ( sal_True , aOldValues , aGuard ) ;
2001-04-06 09:19:13 +00:00
}
else
{
2001-07-12 06:56:32 +00:00
movementFailed ( ) ;
2001-04-06 09:19:13 +00:00
}
2000-09-18 23:16:46 +00:00
2002-12-05 08:53:00 +00:00
// - IsModified
// - IsNew
aNotifier . fire ( ) ;
// - RowCount/IsRowCountFinal
2001-04-06 09:19:13 +00:00
fireRowcount ( ) ;
}
2004-08-02 14:00:45 +00:00
DBG_TRACE3 ( " DBACCESS ORowSetBase::relative(%i) = %i Clone = %i \n " , rows , bRet , m_bClone ) ;
2000-09-18 23:16:46 +00:00
return bRet ;
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : previous ( ) throw ( SQLException , RuntimeException )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::previous() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2002-08-13 10:13:00 +00:00
: : osl : : ResettableMutexGuard aGuard ( * m_pMutex ) ;
2000-09-18 23:16:46 +00:00
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
2000-09-29 14:23:36 +00:00
2001-06-26 09:12:41 +00:00
sal_Bool bRet = ! m_bBeforeFirst ;
2000-09-29 14:23:36 +00:00
2002-08-13 10:13:00 +00:00
if ( bRet & & ( bRet = notifyAllListenersCursorBeforeMove ( aGuard ) ) )
2000-09-18 23:16:46 +00:00
{
2001-04-06 09:19:13 +00:00
// check if we are inserting a row
sal_Bool bWasNew = m_pCache - > m_bInserted | | m_pCache - > m_bDeleted ;
2002-12-05 08:53:00 +00:00
ORowSetNotifier aNotifier ( this ) ;
// this will call cancelRowModification on the cache if necessary
2001-04-06 09:19:13 +00:00
2003-03-19 16:57:12 +00:00
ORowSetRow aOldValues = getOldRow ( bWasNew ) ;
2001-04-06 09:19:13 +00:00
2002-12-05 08:53:00 +00:00
if ( m_aBookmark . hasValue ( ) ) // #104474# OJ
positionCache ( ) ;
2001-04-06 09:19:13 +00:00
bRet = m_pCache - > previous ( ) ;
2002-12-05 08:53:00 +00:00
2001-12-19 14:16:17 +00:00
// if m_bBeforeFirst is false and bRet is false than we stood on the first row
if ( ! m_bBeforeFirst | | bRet )
2002-12-05 08:53:00 +00:00
{
// notification order
// - column values
// - cursorMoved
2002-08-13 10:13:00 +00:00
setCurrentRow ( sal_True , aOldValues , aGuard ) ;
2002-12-05 08:53:00 +00:00
}
2001-04-06 09:19:13 +00:00
else
2002-12-05 08:53:00 +00:00
{
2001-07-12 06:56:32 +00:00
movementFailed ( ) ;
2002-12-05 08:53:00 +00:00
}
// - IsModified
// - IsNew
aNotifier . fire ( ) ;
2000-11-10 15:05:41 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE2 ( " DBACCESS ORowSetBase::previous() = %i Clone = %i \n " , bRet , m_bClone ) ;
2000-09-18 23:16:46 +00:00
return bRet ;
}
2001-06-26 09:12:41 +00:00
// -----------------------------------------------------------------------------
2002-12-05 13:10:11 +00:00
void ORowSetBase : : setCurrentRow ( sal_Bool _bMoved , const ORowSetRow & _rOldValues , : : osl : : ResettableMutexGuard & _rGuard )
2001-06-26 09:12:41 +00:00
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::setCurrentRow() Clone = %i " , m_bClone ) ;
2001-07-12 06:56:32 +00:00
m_bBeforeFirst = m_pCache - > isBeforeFirst ( ) ;
m_bAfterLast = m_pCache - > isAfterLast ( ) ;
if ( ! ( m_bBeforeFirst | | m_bAfterLast ) )
{
m_aBookmark = m_pCache - > getBookmark ( ) ;
2001-08-10 07:11:09 +00:00
OSL_ENSURE ( m_aBookmark . hasValue ( ) , " Bookmark has no value! " ) ;
2001-07-12 06:56:32 +00:00
m_aCurrentRow = m_pCache - > m_aMatrixIter ;
2005-09-05 07:57:38 +00:00
OSL_ENSURE ( ! m_aCurrentRow . isNull ( ) , " CurrentRow is null! " ) ;
2001-07-12 06:56:32 +00:00
m_aCurrentRow . setBookmark ( m_aBookmark ) ;
OSL_ENSURE ( ! m_aCurrentRow . isNull ( ) & & m_aCurrentRow ! = m_pCache - > getEnd ( ) , " Position of matrix iterator isn't valid! " ) ;
OSL_ENSURE ( m_aCurrentRow - > isValid ( ) , " Currentrow isn't valid " ) ;
2001-11-29 15:35:26 +00:00
OSL_ENSURE ( m_aBookmark . hasValue ( ) , " Bookmark has no value! " ) ;
2001-12-19 14:16:17 +00:00
2003-04-28 14:47:43 +00:00
sal_Int32 nOldRow = m_pCache - > getRow ( ) ;
2001-12-19 14:16:17 +00:00
positionCache ( ) ;
2003-04-28 14:47:43 +00:00
sal_Int32 nNewRow = m_pCache - > getRow ( ) ;
2003-06-25 10:02:35 +00:00
OSL_ENSURE ( nOldRow = = nNewRow , " Old position is not equal to new postion " ) ;
2001-12-19 14:16:17 +00:00
m_aCurrentRow = m_pCache - > m_aMatrixIter ;
2005-09-05 07:57:38 +00:00
OSL_ENSURE ( ! m_aCurrentRow . isNull ( ) , " CurrentRow is nul after positionCache! " ) ;
2001-07-12 06:56:32 +00:00
}
else
{
2003-03-19 16:57:12 +00:00
m_aOldRow - > clearRow ( ) ;
2001-07-12 06:56:32 +00:00
m_aCurrentRow = m_pCache - > getEnd ( ) ;
m_aBookmark = Any ( ) ;
m_aCurrentRow . setBookmark ( m_aBookmark ) ;
}
2001-06-26 09:12:41 +00:00
2002-10-11 10:08:33 +00:00
if ( _bMoved )
{
// the cache could repositioned so we need to adjust the cache
// #104144# OJ
if ( m_aCurrentRow . isNull ( ) )
{
positionCache ( ) ;
m_aCurrentRow = m_pCache - > m_aMatrixIter ;
2005-09-05 07:57:38 +00:00
OSL_ENSURE ( ! m_aCurrentRow . isNull ( ) , " CurrentRow is nul after positionCache! " ) ;
2002-10-11 10:08:33 +00:00
}
}
2001-11-08 14:02:00 +00:00
2002-12-05 08:53:00 +00:00
// notification order
// - column values
2001-06-26 09:12:41 +00:00
firePropertyChange ( _rOldValues ) ;
2002-12-05 08:53:00 +00:00
// TODO: can this be done before the notifications?
2004-08-02 14:00:45 +00:00
if ( ! ( m_bBeforeFirst | | m_bAfterLast ) & & ! m_aCurrentRow . isNull ( ) & & m_aCurrentRow - > isValid ( ) & & m_aCurrentRow ! = m_pCache - > getEnd ( ) )
2004-06-01 09:09:07 +00:00
m_aOldRow - > setRow ( new ORowSetValueVector ( m_aCurrentRow - > getBody ( ) ) ) ;
2002-12-05 08:53:00 +00:00
if ( _bMoved )
// - cursorMoved
notifyAllListenersCursorMoved ( _rGuard ) ;
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::setCurrentRow() Clone = %i \n " , m_bClone ) ;
2001-06-26 09:12:41 +00:00
}
// -----------------------------------------------------------------------------
void ORowSetBase : : checkPositioningAllowed ( ) throw ( SQLException , RuntimeException )
{
if ( ! m_pCache | | m_nResultSetType = = ResultSetType : : FORWARD_ONLY )
throwFunctionSequenceException ( * m_pMySelf ) ;
}
2000-09-18 23:16:46 +00:00
//------------------------------------------------------------------------------
Reference < XInterface > ORowSetBase : : getStatement ( void ) throw ( SQLException , RuntimeException )
{
return NULL ;
}
// -------------------------------------------------------------------------
void SAL_CALL ORowSetBase : : refreshRow ( ) throw ( SQLException , RuntimeException )
{
2001-06-26 09:12:41 +00:00
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkPositioningAllowed ( ) ;
if ( ! ( m_bBeforeFirst | | m_bAfterLast ) )
{
positionCache ( ) ;
m_pCache - > refreshRow ( ) ;
}
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : rowUpdated ( ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
return m_pCache - > rowUpdated ( ) ;
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : rowInserted ( ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
return m_pCache - > rowInserted ( ) ;
}
// -------------------------------------------------------------------------
sal_Bool SAL_CALL ORowSetBase : : rowDeleted ( ) throw ( SQLException , RuntimeException )
{
2001-11-15 09:42:42 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
2001-06-26 09:12:41 +00:00
checkCache ( ) ;
2000-09-18 23:16:46 +00:00
return m_pCache - > rowDeleted ( ) ;
}
// -------------------------------------------------------------------------
// XWarningsSupplier
Any SAL_CALL ORowSetBase : : getWarnings ( ) throw ( SQLException , RuntimeException )
{
2004-11-17 13:42:24 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
checkCache ( ) ;
Reference < XWarningsSupplier > xWarnings ( m_pCache - > m_xSet . get ( ) , UNO_QUERY ) ;
if ( xWarnings . is ( ) )
return xWarnings - > getWarnings ( ) ;
2003-04-28 14:47:43 +00:00
return Any ( ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
void SAL_CALL ORowSetBase : : clearWarnings ( ) throw ( SQLException , RuntimeException )
{
2004-11-17 13:42:24 +00:00
: : osl : : MutexGuard aGuard ( * m_pMutex ) ;
checkCache ( ) ;
Reference < XWarningsSupplier > xWarnings ( m_pCache - > m_xSet . get ( ) , UNO_QUERY ) ;
if ( xWarnings . is ( ) )
xWarnings - > clearWarnings ( ) ;
2000-09-18 23:16:46 +00:00
}
// -------------------------------------------------------------------------
2002-12-05 13:10:11 +00:00
void ORowSetBase : : firePropertyChange ( const ORowSetRow & _rOldRow )
2000-09-18 23:16:46 +00:00
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::firePropertyChange() Clone = %i \n " , m_bClone ) ;
2001-07-12 06:56:32 +00:00
OSL_ENSURE ( m_pColumns , " Columns can not be NULL here! " ) ;
2003-04-15 15:02:32 +00:00
# if OSL_DEBUG_LEVEL > 1
2002-10-11 10:08:33 +00:00
sal_Bool bNull = m_aCurrentRow . isNull ( ) ;
ORowSetMatrix : : iterator atest = m_aCurrentRow ;
# endif
2002-10-25 07:31:32 +00:00
// OSL_ENSURE(!m_aCurrentRow.isNull() && m_aCurrentRow != m_pCache->getEnd(),"Position of matrix iterator isn't valid!");
2002-10-11 10:08:33 +00:00
OSL_ENSURE ( m_aCurrentRow - > isValid ( ) , " Currentrow isn't valid " ) ;
2000-10-17 09:19:03 +00:00
sal_Int32 i = 0 ;
try
2000-09-18 23:16:46 +00:00
{
2002-10-16 09:56:55 +00:00
for ( TDataColumns : : iterator aIter = m_aDataColumns . begin ( ) ; aIter ! = m_aDataColumns . end ( ) ; + + aIter , + + i ) // #104278# OJ ++i inserted
2002-12-05 13:10:11 +00:00
( * aIter ) - > fireValueChange ( _rOldRow . isValid ( ) ? ( * _rOldRow ) [ i + 1 ] : : : connectivity : : ORowSetValue ( ) ) ;
2000-09-18 23:16:46 +00:00
}
2000-11-15 14:57:40 +00:00
catch ( Exception & )
2000-10-17 09:19:03 +00:00
{
2001-01-22 06:38:24 +00:00
OSL_ENSURE ( 0 , " firePropertyChange: Exception " ) ;
2000-10-17 09:19:03 +00:00
}
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::firePropertyChange() Clone = %i \n " , m_bClone ) ;
2000-09-18 23:16:46 +00:00
}
2002-12-05 08:53:00 +00:00
// -----------------------------------------------------------------------------
sal_Bool ORowSetBase : : isModification ( )
{
return m_pCache & & m_pCache - > m_bInserted ;
}
// -----------------------------------------------------------------------------
void ORowSetBase : : fireProperty ( sal_Int32 _nProperty , sal_Bool _bNew , sal_Bool _bOld )
{
Any aNew = bool2any ( _bNew ) ;
Any aOld = bool2any ( _bOld ) ;
fire ( & _nProperty , & aNew , & aOld , 1 , sal_False ) ;
}
2000-11-22 13:58:32 +00:00
// -----------------------------------------------------------------------------
2001-06-22 12:08:06 +00:00
void ORowSetBase : : positionCache ( )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::positionCache() Clone = %i \n " , m_bClone ) ;
2001-06-22 12:08:06 +00:00
if ( m_aBookmark . hasValue ( ) )
{
sal_Bool bOK = m_pCache - > moveToBookmark ( m_aBookmark ) ;
OSL_ENSURE ( bOK , " ORowSetBase::positionCache: positioning cache fails! " ) ;
}
else
OSL_ENSURE ( 0 , " ORowSetBase::positionCache: no bookmark set! " ) ;
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::positionCache() Clone = %i \n " , m_bClone ) ;
2001-06-22 12:08:06 +00:00
}
// -----------------------------------------------------------------------------
2001-06-26 09:12:41 +00:00
void ORowSetBase : : checkCache ( )
{
: : connectivity : : checkDisposed ( m_rBHelper . bDisposed ) ;
if ( ! m_pCache )
throwFunctionSequenceException ( * m_pMySelf ) ;
}
// -----------------------------------------------------------------------------
2001-07-12 06:56:32 +00:00
void ORowSetBase : : movementFailed ( )
{
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::movementFailed() Clone = %i \n " , m_bClone ) ;
2003-03-19 16:57:12 +00:00
m_aOldRow - > clearRow ( ) ;
2001-07-12 06:56:32 +00:00
m_aCurrentRow = m_pCache - > getEnd ( ) ;
m_bBeforeFirst = m_pCache - > isBeforeFirst ( ) ;
m_bAfterLast = m_pCache - > isAfterLast ( ) ;
m_aBookmark = Any ( ) ;
m_aCurrentRow . setBookmark ( m_aBookmark ) ;
2001-08-24 05:40:35 +00:00
OSL_ENSURE ( m_bBeforeFirst | | m_bAfterLast , " BeforeFirst or AfterLast is wrong! " ) ;
2004-08-02 14:00:45 +00:00
DBG_TRACE1 ( " DBACCESS ORowSetBase::movementFailed() Clone = %i \n " , m_bClone ) ;
2001-07-12 06:56:32 +00:00
}
// -----------------------------------------------------------------------------
2003-03-19 16:57:12 +00:00
ORowSetRow ORowSetBase : : getOldRow ( sal_Bool _bWasNew )
{
OSL_ENSURE ( m_aOldRow . isValid ( ) , " RowSetRowHElper isn't valid! " ) ;
ORowSetRow aOldValues ;
if ( ! _bWasNew & & m_aOldRow - > getRow ( ) . isValid ( ) )
aOldValues = new ORowSetValueVector ( m_aOldRow - > getRow ( ) . getBody ( ) ) ; // remember the old values
return aOldValues ;
}
2004-08-02 14:00:45 +00:00
// -----------------------------------------------------------------------------
Any ORowSetBase : : getPropertyDefaultByHandle ( sal_Int32 _nHandle ) const
{
return Any ( ) ;
}
2002-12-05 08:53:00 +00:00
// =============================================================================
2005-09-23 11:03:10 +00:00
DBG_NAME ( ORowSetNotifier )
2002-12-05 08:53:00 +00:00
// -----------------------------------------------------------------------------
ORowSetNotifier : : ORowSetNotifier ( ORowSetBase * _pRowSet )
: m_pRowSet ( _pRowSet )
, m_bWasNew ( sal_False )
, m_bWasModified ( sal_False )
# ifdef DBG_UTIL
, m_bNotifyCalled ( sal_False )
# endif
{
2005-09-23 11:03:10 +00:00
DBG_CTOR ( ORowSetNotifier , NULL ) ;
2002-12-05 08:53:00 +00:00
OSL_ENSURE ( m_pRowSet , " ORowSetNotifier::ORowSetNotifier: invalid row set. This wil crash. " ) ;
// remember the "inserted" and "modified" state for later firing
m_bWasNew = m_pRowSet - > isNew ( ORowSetBase : : GrantNotifierAccess ( ) ) ; ;
m_bWasModified = m_pRowSet - > isModified ( ORowSetBase : : GrantNotifierAccess ( ) ) ;
// if the row set is on the insert row, then we need to cancel this
if ( m_pRowSet - > isModification ( ORowSetBase : : GrantNotifierAccess ( ) ) )
m_pRowSet - > doCancelModification ( ORowSetBase : : GrantNotifierAccess ( ) ) ;
}
// -----------------------------------------------------------------------------
ORowSetNotifier : : ~ ORowSetNotifier ( )
{
2005-09-23 11:03:10 +00:00
DBG_DTOR ( ORowSetNotifier , NULL ) ;
2002-12-05 08:53:00 +00:00
}
// -----------------------------------------------------------------------------
void ORowSetNotifier : : fire ( )
{
// we're not interested in firing changes FALSE->TRUE, only TRUE->FALSE.
// (the former would be quite pathological, e.g. after a failed movement)
if ( m_bWasModified
& & ( m_bWasModified ! = m_pRowSet - > isModified ( ORowSetBase : : GrantNotifierAccess ( ) ) )
)
m_pRowSet - > fireProperty ( PROPERTY_ID_ISMODIFIED , sal_False , sal_True , ORowSetBase : : GrantNotifierAccess ( ) ) ;
if ( m_bWasNew
& & ( m_bWasNew ! = m_pRowSet - > isNew ( ORowSetBase : : GrantNotifierAccess ( ) ) )
)
m_pRowSet - > fireProperty ( PROPERTY_ID_ISNEW , sal_False , sal_True , ORowSetBase : : GrantNotifierAccess ( ) ) ;
# ifdef DBG_UTIL
m_bNotifyCalled = sal_True ;
# endif
}
2000-11-22 13:58:32 +00:00
2001-01-24 10:02:14 +00:00
} // namespace dbaccess