2000-09-18 15:18:56 +00:00
/*************************************************************************
*
2005-09-08 04:30:11 +00:00
* OpenOffice . org - a multi - platform office productivity suite
2000-09-18 15:18:56 +00:00
*
2005-09-08 04:30:11 +00:00
* $ RCSfile : AKeys . cxx , v $
2000-09-18 15:18:56 +00:00
*
2005-09-08 04:30:11 +00:00
* $ Revision : 1.15 $
2000-09-18 15:18:56 +00:00
*
2005-09-08 04:30:11 +00:00
* last change : $ Author : rt $ $ Date : 2005 - 09 - 08 05 : 30 : 11 $
2000-09-18 15:18:56 +00:00
*
2005-09-08 04:30:11 +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 15:18:56 +00:00
*
*
2005-09-08 04:30:11 +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 15:18:56 +00:00
*
2005-09-08 04:30:11 +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 15:18:56 +00:00
*
2005-09-08 04:30:11 +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 15:18:56 +00:00
*
2005-09-08 04:30:11 +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 15:18:56 +00:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef _CONNECTIVITY_ADO_KEYS_HXX_
# include "ado/AKeys.hxx"
# endif
# ifndef _CONNECTIVITY_ADO_INDEX_HXX_
# include "ado/AKey.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
2001-09-17 13:09:15 +00:00
# ifndef _CONNECTIVITY_ADO_ACONNECTION_HXX_
# include "ado/AConnection.hxx"
2000-09-18 15:18:56 +00:00
# endif
2001-05-18 07:51:34 +00:00
# ifndef _COMPHELPER_TYPES_HXX_
# include <comphelper/types.hxx>
# endif
2001-09-17 13:09:15 +00:00
# ifndef _CONNECTIVITY_ADO_AWRAPADO_HXX_
# include "ado/Awrapado.hxx"
# endif
2001-10-12 11:02:56 +00:00
# ifndef _COMPHELPER_PROPERTY_HXX_
# include <comphelper/property.hxx>
# endif
2001-05-14 10:42:44 +00:00
2001-05-18 07:51:34 +00:00
using namespace : : comphelper ;
2001-05-14 10:42:44 +00:00
using namespace connectivity ;
2000-09-18 15:18:56 +00:00
using namespace connectivity : : ado ;
using namespace com : : sun : : star : : uno ;
using namespace com : : sun : : star : : lang ;
using namespace com : : sun : : star : : beans ;
using namespace com : : sun : : star : : sdbc ;
2001-10-12 11:02:56 +00:00
using namespace com : : sun : : star : : sdbcx ;
2000-09-18 15:18:56 +00:00
using namespace com : : sun : : star : : container ;
2005-03-10 14:23:29 +00:00
sdbcx : : ObjectType OKeys : : createObject ( const : : rtl : : OUString & _rName )
2000-09-18 15:18:56 +00:00
{
2001-11-09 06:05:38 +00:00
return new OAdoKey ( isCaseSensitive ( ) , m_pConnection , m_aCollection . GetItem ( _rName ) ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
void OKeys : : impl_refresh ( ) throw ( RuntimeException )
{
2001-11-09 06:05:38 +00:00
m_aCollection . Refresh ( ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
Reference < XPropertySet > OKeys : : createEmptyObject ( )
{
2001-10-12 11:02:56 +00:00
return new OAdoKey ( isCaseSensitive ( ) , m_pConnection ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
// XAppend
2001-10-12 11:02:56 +00:00
void OKeys : : appendObject ( const Reference < XPropertySet > & descriptor )
2000-09-18 15:18:56 +00:00
{
2001-11-09 06:05:38 +00:00
OAdoKey * pKey = NULL ;
if ( getImplementation ( pKey , descriptor ) & & pKey ! = NULL )
2000-09-18 15:18:56 +00:00
{
2001-11-09 06:05:38 +00:00
// To pass as column parameter to Key's Apppend method
OLEVariant vOptional ;
vOptional . setNoArg ( ) ;
KeyTypeEnum eKey = OAdoKey : : Map2KeyRule ( getINT32 ( descriptor - > getPropertyValue ( OMetaConnection : : getPropMap ( ) . getNameByIndex ( PROPERTY_ID_TYPE ) ) ) ) ;
WpADOKey aKey = pKey - > getImpl ( ) ;
: : rtl : : OUString sName = aKey . get_Name ( ) ;
if ( ! sName . getLength ( ) )
aKey . put_Name ( : : rtl : : OUString : : createFromAscii ( " PrimaryKey " ) ) ;
2000-09-18 15:18:56 +00:00
2001-11-09 06:05:38 +00:00
ADOKeys * pKeys = m_aCollection ;
2002-07-05 08:56:08 +00:00
if ( FAILED ( pKeys - > Append ( OLEVariant ( ( ADOKey * ) aKey ) ,
adKeyPrimary , // must be every time adKeyPrimary
vOptional ) ) )
{
2004-10-22 07:42:58 +00:00
ADOS : : ThrowException ( * m_pConnection - > getConnection ( ) , static_cast < XTypeProvider * > ( this ) ) ;
2002-07-05 08:56:08 +00:00
// just make sure that an SQLExceptionis thrown here
2004-10-22 07:42:58 +00:00
throw SQLException ( : : rtl : : OUString : : createFromAscii ( " Could not append key! " ) , static_cast < XTypeProvider * > ( this ) , OMetaConnection : : getPropMap ( ) . getNameByIndex ( PROPERTY_ID_HY0000 ) , 1000 , Any ( ) ) ;
2002-07-05 08:56:08 +00:00
}
2000-09-18 15:18:56 +00:00
}
2001-11-09 06:05:38 +00:00
else
2004-10-22 07:42:58 +00:00
throw SQLException ( : : rtl : : OUString : : createFromAscii ( " Could not append key! " ) , static_cast < XTypeProvider * > ( this ) , OMetaConnection : : getPropMap ( ) . getNameByIndex ( PROPERTY_ID_HY0000 ) , 1000 , Any ( ) ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
// XDrop
2001-10-12 11:02:56 +00:00
void OKeys : : dropObject ( sal_Int32 _nPos , const : : rtl : : OUString _sElementName )
2000-09-18 15:18:56 +00:00
{
2001-11-09 06:05:38 +00:00
if ( ! m_aCollection . Delete ( OLEVariant ( _sElementName ) ) )
2004-10-22 07:42:58 +00:00
ADOS : : ThrowException ( * m_pConnection - > getConnection ( ) , static_cast < XTypeProvider * > ( this ) ) ;
2000-09-18 15:18:56 +00:00
}
2001-10-12 11:02:56 +00:00
// -----------------------------------------------------------------------------
2005-03-10 14:23:29 +00:00
sdbcx : : ObjectType OKeys : : cloneObject ( const Reference < XPropertySet > & _xDescriptor )
2000-09-18 15:18:56 +00:00
{
2001-11-09 06:05:38 +00:00
OAdoKey * pKey = NULL ;
if ( getImplementation ( pKey , _xDescriptor ) & & pKey ! = NULL )
return new OAdoKey ( isCaseSensitive ( ) , m_pConnection , pKey - > getImpl ( ) ) ;
2005-03-10 14:23:29 +00:00
return sdbcx : : ObjectType ( ) ;
2000-09-18 15:18:56 +00:00
}
2000-11-03 13:21:22 +00:00
// -----------------------------------------------------------------------------
2000-09-18 15:18:56 +00:00
2001-10-12 11:02:56 +00:00