2000-09-18 15:18:56 +00:00
/*************************************************************************
*
* $ RCSfile : ATable . cxx , v $
*
2001-08-24 05:19:41 +00:00
* $ Revision : 1.20 $
2000-09-18 15:18:56 +00:00
*
2001-08-24 05:19:41 +00:00
* last change : $ Author : oj $ $ Date : 2001 - 08 - 24 06 : 13 : 55 $
2000-09-18 15:18:56 +00:00
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc . , October , 2000
*
* GNU Lesser General Public License Version 2.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* Copyright 2000 by Sun Microsystems , Inc .
* 901 San Antonio Road , Palo Alto , CA 94303 , USA
*
* 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 .
*
* 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 .
*
* 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
*
*
* Sun Industry Standards Source License Version 1.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 ( the " License " ) ; You may not use this file
* except in compliance with the License . You may obtain a copy of the
* License at http : //www.openoffice.org/license.html.
*
* Software provided under this License is provided on an " AS IS " basis ,
* WITHOUT WARRANTY OF ANY KIND , EITHER EXPRESSED OR IMPLIED , INCLUDING ,
* WITHOUT LIMITATION , WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS ,
* MERCHANTABLE , FIT FOR A PARTICULAR PURPOSE , OR NON - INFRINGING .
* See the License for the specific provisions governing your rights and
* obligations concerning the Software .
*
* The Initial Developer of the Original Code is : Sun Microsystems , Inc .
*
* Copyright : 2000 by Sun Microsystems , Inc .
*
* All Rights Reserved .
*
* Contributor ( s ) : _______________________________________
*
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef _CONNECTIVITY_ADO_TABLE_HXX_
# include "ado/ATable.hxx"
# endif
# ifndef _CONNECTIVITY_ADO_INDEXES_HXX_
# include "ado/AIndexes.hxx"
# endif
# ifndef _CONNECTIVITY_ADO_COLUMNS_HXX_
# include "ado/AColumns.hxx"
# endif
# ifndef _CONNECTIVITY_ADO_COLUMN_HXX_
# include "ado/AColumn.hxx"
# endif
# ifndef _CONNECTIVITY_ADO_KEYS_HXX_
# include "ado/AKeys.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 _CONNECTIVITY_ADO_AWRAPADO_HXX_
# include "ado/Awrapado.hxx"
# endif
2000-10-09 10:26:03 +00:00
# ifndef _COMPHELPER_SEQUENCE_HXX_
# include <comphelper/sequence.hxx>
2000-09-18 15:18:56 +00:00
# endif
2001-05-14 10:42:44 +00:00
# ifndef CONNECTIVITY_CONNECTION_HXX
# include "TConnection.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
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 ;
using namespace com : : sun : : star : : container ;
using namespace com : : sun : : star : : lang ;
// -------------------------------------------------------------------------
2001-04-12 11:33:30 +00:00
OAdoTable : : OAdoTable ( sal_Bool _bCase , OCatalog * _pCatalog , _ADOTable * _pTable )
: OTable_TYPEDEF ( _bCase , : : rtl : : OUString ( ) , : : rtl : : OUString ( ) )
, m_pCatalog ( _pCatalog )
2000-09-18 15:18:56 +00:00
{
construct ( ) ;
2001-04-12 11:33:30 +00:00
m_aTable = WpADOTable ( _pTable ) ;
fillPropertyValues ( ) ;
2000-09-18 15:18:56 +00:00
}
2001-04-12 11:33:30 +00:00
// -----------------------------------------------------------------------------
OAdoTable : : OAdoTable ( sal_Bool _bCase , OCatalog * _pCatalog )
: OTable_TYPEDEF ( _bCase )
, m_pCatalog ( _pCatalog )
2000-09-18 15:18:56 +00:00
{
2000-11-03 13:21:22 +00:00
construct ( ) ;
m_aTable . Create ( ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
2000-11-03 13:21:22 +00:00
void OAdoTable : : refreshColumns ( )
2000-09-18 15:18:56 +00:00
{
2001-05-02 11:57:37 +00:00
TStringVector aVector ;
2000-09-18 15:18:56 +00:00
ADOColumns * pColumns = m_aTable . get_Columns ( ) ;
if ( pColumns )
{
pColumns - > Refresh ( ) ;
sal_Int32 nCount = 0 ;
pColumns - > get_Count ( & nCount ) ;
for ( sal_Int32 i = 0 ; i < nCount ; + + i )
{
ADOColumn * pColumn = NULL ;
pColumns - > get_Item ( OLEVariant ( i ) , & pColumn ) ;
if ( pColumn )
{
WpADOColumn aColumn ( pColumn ) ;
aVector . push_back ( aColumn . get_Name ( ) ) ;
}
}
}
2001-06-20 06:16:56 +00:00
if ( m_pColumns )
m_pColumns - > reFill ( aVector ) ;
else
m_pColumns = new OColumns ( * this , m_aMutex , aVector , pColumns , isCaseSensitive ( ) , m_pCatalog - > getConnection ( ) ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
2000-11-03 13:21:22 +00:00
void OAdoTable : : refreshKeys ( )
2000-09-18 15:18:56 +00:00
{
2001-05-02 11:57:37 +00:00
TStringVector aVector ;
2000-09-18 15:18:56 +00:00
ADOKeys * pKeys = m_aTable . get_Keys ( ) ;
if ( pKeys )
{
pKeys - > Refresh ( ) ;
sal_Int32 nCount = 0 ;
pKeys - > get_Count ( & nCount ) ;
for ( sal_Int32 i = 0 ; i < nCount ; + + i )
{
ADOKey * pKey = NULL ;
pKeys - > get_Item ( OLEVariant ( i ) , & pKey ) ;
if ( pKey )
{
WpADOKey aKey ( pKey ) ;
aVector . push_back ( aKey . get_Name ( ) ) ;
}
}
}
2001-06-20 06:16:56 +00:00
if ( m_pKeys )
m_pKeys - > reFill ( aVector ) ;
else
m_pKeys = new OKeys ( * this , m_aMutex , aVector , pKeys , isCaseSensitive ( ) , m_pCatalog - > getConnection ( ) ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
void OAdoTable : : refreshIndexes ( )
{
2001-05-02 11:57:37 +00:00
TStringVector aVector ;
2000-09-18 15:18:56 +00:00
ADOIndexes * pIndexes = m_aTable . get_Indexes ( ) ;
if ( pIndexes )
{
pIndexes - > Refresh ( ) ;
sal_Int32 nCount = 0 ;
pIndexes - > get_Count ( & nCount ) ;
for ( sal_Int32 i = 0 ; i < nCount ; + + i )
{
ADOIndex * pIndex = NULL ;
pIndexes - > get_Item ( OLEVariant ( i ) , & pIndex ) ;
if ( pIndex )
{
WpADOIndex aIndex ( pIndex ) ;
aVector . push_back ( aIndex . get_Name ( ) ) ;
}
}
}
2001-06-20 06:16:56 +00:00
if ( m_pIndexes )
m_pIndexes - > reFill ( aVector ) ;
else
m_pIndexes = new OIndexes ( * this , m_aMutex , aVector , pIndexes , isCaseSensitive ( ) , m_pCatalog - > getConnection ( ) ) ;
2000-09-18 15:18:56 +00:00
}
//--------------------------------------------------------------------------
2000-11-03 13:21:22 +00:00
Sequence < sal_Int8 > OAdoTable : : getUnoTunnelImplementationId ( )
2000-09-18 15:18:56 +00:00
{
static : : cppu : : OImplementationId * pId = 0 ;
if ( ! pId )
{
: : osl : : MutexGuard aGuard ( : : osl : : Mutex : : getGlobalMutex ( ) ) ;
if ( ! pId )
{
static : : cppu : : OImplementationId aId ;
pId = & aId ;
}
}
return pId - > getImplementationId ( ) ;
}
// com::sun::star::lang::XUnoTunnel
//------------------------------------------------------------------
2000-11-03 13:21:22 +00:00
sal_Int64 OAdoTable : : getSomething ( const Sequence < sal_Int8 > & rId ) throw ( RuntimeException )
2000-09-18 15:18:56 +00:00
{
2001-08-24 05:19:41 +00:00
return ( rId . getLength ( ) = = 16 & & 0 = = rtl_compareMemory ( getUnoTunnelImplementationId ( ) . getConstArray ( ) , rId . getConstArray ( ) , 16 ) )
?
( sal_Int64 ) this
:
OTable_TYPEDEF : : getSomething ( rId ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
// XRename
void SAL_CALL OAdoTable : : rename ( const : : rtl : : OUString & newName ) throw ( SQLException , ElementExistException , RuntimeException )
{
: : osl : : MutexGuard aGuard ( m_aMutex ) ;
2001-05-17 06:30:42 +00:00
checkDisposed ( rBHelper . bDisposed ) ;
2000-09-18 15:18:56 +00:00
m_aTable . put_Name ( newName ) ;
}
// -------------------------------------------------------------------------
// XAlterTable
void SAL_CALL OAdoTable : : alterColumnByName ( const : : rtl : : OUString & colName , const Reference < XPropertySet > & descriptor ) throw ( SQLException , NoSuchElementException , RuntimeException )
{
: : osl : : MutexGuard aGuard ( m_aMutex ) ;
2001-05-17 06:30:42 +00:00
checkDisposed ( rBHelper . bDisposed ) ;
2000-09-18 15:18:56 +00:00
2000-11-03 13:21:22 +00:00
Reference < : : com : : sun : : star : : lang : : XUnoTunnel > xTunnel ( descriptor , UNO_QUERY ) ;
2000-09-18 15:18:56 +00:00
if ( xTunnel . is ( ) )
{
2000-11-03 13:21:22 +00:00
OAdoColumn * pColumn = ( OAdoColumn * ) xTunnel - > getSomething ( OAdoColumn : : getUnoTunnelImplementationId ( ) ) ;
2001-04-12 11:33:30 +00:00
if ( pColumn )
{
m_aTable . get_Columns ( ) - > Delete ( OLEVariant ( colName ) ) ;
m_aTable . get_Columns ( ) - > Append ( OLEVariant ( pColumn - > getColumnImpl ( ) ) ) ;
}
else
2001-05-14 10:42:44 +00:00
throw SQLException ( : : rtl : : OUString : : createFromAscii ( " Could not alter column by name! " ) , * this , OMetaConnection : : getPropMap ( ) . getNameByIndex ( PROPERTY_ID_HY0000 ) , 1000 , Any ( ) ) ;
2000-09-18 15:18:56 +00:00
}
2001-05-04 08:58:45 +00:00
m_pColumns - > refresh ( ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
void SAL_CALL OAdoTable : : alterColumnByIndex ( sal_Int32 index , const Reference < XPropertySet > & descriptor ) throw ( SQLException , : : com : : sun : : star : : lang : : IndexOutOfBoundsException , RuntimeException )
{
: : osl : : MutexGuard aGuard ( m_aMutex ) ;
2001-05-17 06:30:42 +00:00
checkDisposed ( rBHelper . bDisposed ) ;
2000-09-18 15:18:56 +00:00
2000-10-30 07:07:33 +00:00
Reference < : : com : : sun : : star : : lang : : XUnoTunnel > xTunnel ( descriptor , UNO_QUERY ) ;
2000-09-18 15:18:56 +00:00
if ( xTunnel . is ( ) )
{
2000-11-03 13:21:22 +00:00
OAdoColumn * pColumn = ( OAdoColumn * ) xTunnel - > getSomething ( OAdoColumn : : getUnoTunnelImplementationId ( ) ) ;
2001-04-12 11:33:30 +00:00
if ( pColumn )
{
m_aTable . get_Columns ( ) - > Delete ( OLEVariant ( index ) ) ;
m_aTable . get_Columns ( ) - > Append ( OLEVariant ( pColumn - > getColumnImpl ( ) ) ) ;
}
else
2001-05-14 10:42:44 +00:00
throw SQLException ( : : rtl : : OUString : : createFromAscii ( " Could not alter column by index! " ) , * this , OMetaConnection : : getPropMap ( ) . getNameByIndex ( PROPERTY_ID_HY0000 ) , 1000 , Any ( ) ) ;
2000-09-18 15:18:56 +00:00
}
2001-05-04 08:58:45 +00:00
m_pColumns - > refresh ( ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
2000-11-03 13:21:22 +00:00
void OAdoTable : : setFastPropertyValue_NoBroadcast ( sal_Int32 nHandle , const Any & rValue ) throw ( Exception )
2000-09-18 15:18:56 +00:00
{
if ( m_aTable . IsValid ( ) )
{
switch ( nHandle )
{
case PROPERTY_ID_NAME :
m_aTable . put_Name ( getString ( rValue ) ) ;
break ;
case PROPERTY_ID_TYPE :
{
ADOProperties * pProps = m_aTable . get_Properties ( ) ;
pProps - > AddRef ( ) ;
ADOProperty * pProp = NULL ;
2001-05-25 12:11:19 +00:00
pProps - > get_Item ( OLEVariant ( OMetaConnection : : getPropMap ( ) . getNameByIndex ( PROPERTY_ID_TYPE ) ) , & pProp ) ;
2000-09-18 15:18:56 +00:00
WpADOProperty aProp ( pProp ) ;
if ( pProp )
aProp . PutValue ( getString ( rValue ) ) ;
pProps - > Release ( ) ;
}
break ;
case PROPERTY_ID_DESCRIPTION :
{
ADOProperties * pProps = m_aTable . get_Properties ( ) ;
pProps - > AddRef ( ) ;
ADOProperty * pProp = NULL ;
pProps - > get_Item ( OLEVariant ( : : rtl : : OUString : : createFromAscii ( " Description " ) ) , & pProp ) ;
WpADOProperty aProp ( pProp ) ;
if ( pProp )
aProp . PutValue ( getString ( rValue ) ) ;
pProps - > Release ( ) ;
}
break ;
case PROPERTY_ID_SCHEMANAME :
break ;
default :
throw Exception ( ) ;
}
}
2001-04-12 11:33:30 +00:00
OTable_TYPEDEF : : setFastPropertyValue_NoBroadcast ( nHandle , rValue ) ;
2000-09-18 15:18:56 +00:00
}
// -------------------------------------------------------------------------
2001-04-30 09:16:19 +00:00
void SAL_CALL OAdoTable : : acquire ( ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
OTable_TYPEDEF : : acquire ( ) ;
}
// -----------------------------------------------------------------------------
void SAL_CALL OAdoTable : : release ( ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
OTable_TYPEDEF : : release ( ) ;
}
// -----------------------------------------------------------------------------
2000-11-03 13:21:22 +00:00