1*9b5730f6SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*9b5730f6SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*9b5730f6SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*9b5730f6SAndrew Rist  * distributed with this work for additional information
6*9b5730f6SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*9b5730f6SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*9b5730f6SAndrew Rist  * "License"); you may not use this file except in compliance
9*9b5730f6SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*9b5730f6SAndrew Rist  *
11*9b5730f6SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*9b5730f6SAndrew Rist  *
13*9b5730f6SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*9b5730f6SAndrew Rist  * software distributed under the License is distributed on an
15*9b5730f6SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9b5730f6SAndrew Rist  * KIND, either express or implied.  See the License for the
17*9b5730f6SAndrew Rist  * specific language governing permissions and limitations
18*9b5730f6SAndrew Rist  * under the License.
19*9b5730f6SAndrew Rist  *
20*9b5730f6SAndrew Rist  *************************************************************/
21*9b5730f6SAndrew Rist 
22*9b5730f6SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_connectivity.hxx"
26cdf0e10cSrcweir #include "ado/AKey.hxx"
27cdf0e10cSrcweir #include <com/sun/star/sdbc/XRow.hpp>
28cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSet.hpp>
29cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx>
30cdf0e10cSrcweir #include <comphelper/sequence.hxx>
31cdf0e10cSrcweir #include "ado/AColumns.hxx"
32cdf0e10cSrcweir #include "ado/AConnection.hxx"
33cdf0e10cSrcweir 
34cdf0e10cSrcweir using namespace connectivity::ado;
35cdf0e10cSrcweir using namespace com::sun::star::uno;
36cdf0e10cSrcweir using namespace com::sun::star::lang;
37cdf0e10cSrcweir using namespace com::sun::star::beans;
38cdf0e10cSrcweir using namespace com::sun::star::sdbc;
39cdf0e10cSrcweir using namespace com::sun::star::sdbcx;
40cdf0e10cSrcweir 
41cdf0e10cSrcweir // -------------------------------------------------------------------------
OAdoKey(sal_Bool _bCase,OConnection * _pConnection,ADOKey * _pKey)42cdf0e10cSrcweir OAdoKey::OAdoKey(sal_Bool _bCase,OConnection* _pConnection, ADOKey* _pKey)
43cdf0e10cSrcweir 	: OKey_ADO(_bCase)
44cdf0e10cSrcweir 	,m_pConnection(_pConnection)
45cdf0e10cSrcweir {
46cdf0e10cSrcweir 	construct();
47cdf0e10cSrcweir 	m_aKey = WpADOKey(_pKey);
48cdf0e10cSrcweir 	fillPropertyValues();
49cdf0e10cSrcweir }
50cdf0e10cSrcweir // -------------------------------------------------------------------------
OAdoKey(sal_Bool _bCase,OConnection * _pConnection)51cdf0e10cSrcweir OAdoKey::OAdoKey(sal_Bool _bCase,OConnection* _pConnection)
52cdf0e10cSrcweir 	: OKey_ADO(_bCase)
53cdf0e10cSrcweir 	,m_pConnection(_pConnection)
54cdf0e10cSrcweir {
55cdf0e10cSrcweir 	construct();
56cdf0e10cSrcweir 	m_aKey.Create();
57cdf0e10cSrcweir }
58cdf0e10cSrcweir // -------------------------------------------------------------------------
refreshColumns()59cdf0e10cSrcweir void OAdoKey::refreshColumns()
60cdf0e10cSrcweir {
61cdf0e10cSrcweir 	TStringVector aVector;
62cdf0e10cSrcweir 
63cdf0e10cSrcweir 	WpADOColumns aColumns;
64cdf0e10cSrcweir 	if ( m_aKey.IsValid() )
65cdf0e10cSrcweir 	{
66cdf0e10cSrcweir 		aColumns = m_aKey.get_Columns();
67cdf0e10cSrcweir 		aColumns.fillElementNames(aVector);
68cdf0e10cSrcweir 	}
69cdf0e10cSrcweir 
70cdf0e10cSrcweir 	if(m_pColumns)
71cdf0e10cSrcweir 		m_pColumns->reFill(aVector);
72cdf0e10cSrcweir 	else
73cdf0e10cSrcweir 		m_pColumns = new OColumns(*this,m_aMutex,aVector,aColumns,isCaseSensitive(),m_pConnection);
74cdf0e10cSrcweir }
75cdf0e10cSrcweir // -------------------------------------------------------------------------
getUnoTunnelImplementationId()76cdf0e10cSrcweir Sequence< sal_Int8 > OAdoKey::getUnoTunnelImplementationId()
77cdf0e10cSrcweir {
78cdf0e10cSrcweir 	static ::cppu::OImplementationId * pId = 0;
79cdf0e10cSrcweir 	if (! pId)
80cdf0e10cSrcweir 	{
81cdf0e10cSrcweir 		::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
82cdf0e10cSrcweir 		if (! pId)
83cdf0e10cSrcweir 		{
84cdf0e10cSrcweir 			static ::cppu::OImplementationId aId;
85cdf0e10cSrcweir 			pId = &aId;
86cdf0e10cSrcweir 		}
87cdf0e10cSrcweir 	}
88cdf0e10cSrcweir 	return pId->getImplementationId();
89cdf0e10cSrcweir }
90cdf0e10cSrcweir 
91cdf0e10cSrcweir // com::sun::star::lang::XUnoTunnel
92cdf0e10cSrcweir //------------------------------------------------------------------
getSomething(const Sequence<sal_Int8> & rId)93cdf0e10cSrcweir sal_Int64 OAdoKey::getSomething( const Sequence< sal_Int8 > & rId ) throw (RuntimeException)
94cdf0e10cSrcweir {
95cdf0e10cSrcweir 	return (rId.getLength() == 16 && 0 == rtl_compareMemory(getUnoTunnelImplementationId().getConstArray(),  rId.getConstArray(), 16 ) )
96cdf0e10cSrcweir 				? reinterpret_cast< sal_Int64 >( this )
97cdf0e10cSrcweir 				: OKey_ADO::getSomething(rId);
98cdf0e10cSrcweir }
99cdf0e10cSrcweir // -------------------------------------------------------------------------
setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any & rValue)100cdf0e10cSrcweir void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)throw (Exception)
101cdf0e10cSrcweir {
102cdf0e10cSrcweir 	if(m_aKey.IsValid())
103cdf0e10cSrcweir 	{
104cdf0e10cSrcweir 		switch(nHandle)
105cdf0e10cSrcweir 		{
106cdf0e10cSrcweir 			case PROPERTY_ID_NAME:
107cdf0e10cSrcweir 				{
108cdf0e10cSrcweir 					::rtl::OUString aVal;
109cdf0e10cSrcweir 					rValue >>= aVal;
110cdf0e10cSrcweir 					m_aKey.put_Name(aVal);
111cdf0e10cSrcweir 					ADOS::ThrowException(*m_pConnection->getConnection(),*this);
112cdf0e10cSrcweir 				}
113cdf0e10cSrcweir 				break;
114cdf0e10cSrcweir 			case PROPERTY_ID_TYPE:
115cdf0e10cSrcweir 				{
116cdf0e10cSrcweir 					sal_Int32 nVal=0;
117cdf0e10cSrcweir 					rValue >>= nVal;
118cdf0e10cSrcweir 					m_aKey.put_Type(Map2KeyRule(nVal));
119cdf0e10cSrcweir 					ADOS::ThrowException(*m_pConnection->getConnection(),*this);
120cdf0e10cSrcweir 				}
121cdf0e10cSrcweir 				break;
122cdf0e10cSrcweir 			case PROPERTY_ID_REFERENCEDTABLE:
123cdf0e10cSrcweir 				{
124cdf0e10cSrcweir 					::rtl::OUString aVal;
125cdf0e10cSrcweir 					rValue >>= aVal;
126cdf0e10cSrcweir 					m_aKey.put_RelatedTable(aVal);
127cdf0e10cSrcweir 					ADOS::ThrowException(*m_pConnection->getConnection(),*this);
128cdf0e10cSrcweir 				}
129cdf0e10cSrcweir 				break;
130cdf0e10cSrcweir 			case PROPERTY_ID_UPDATERULE:
131cdf0e10cSrcweir 				{
132cdf0e10cSrcweir 					sal_Int32 nVal=0;
133cdf0e10cSrcweir 					rValue >>= nVal;
134cdf0e10cSrcweir 					m_aKey.put_UpdateRule(Map2Rule(nVal));
135cdf0e10cSrcweir 					ADOS::ThrowException(*m_pConnection->getConnection(),*this);
136cdf0e10cSrcweir 				}
137cdf0e10cSrcweir 				break;
138cdf0e10cSrcweir 			case PROPERTY_ID_DELETERULE:
139cdf0e10cSrcweir 				{
140cdf0e10cSrcweir 					sal_Int32 nVal=0;
141cdf0e10cSrcweir 					rValue >>= nVal;
142cdf0e10cSrcweir 					m_aKey.put_DeleteRule(Map2Rule(nVal));
143cdf0e10cSrcweir 					ADOS::ThrowException(*m_pConnection->getConnection(),*this);
144cdf0e10cSrcweir 				}
145cdf0e10cSrcweir 				break;
146cdf0e10cSrcweir 		}
147cdf0e10cSrcweir 	}
148cdf0e10cSrcweir 	OKey_ADO::setFastPropertyValue_NoBroadcast(nHandle,rValue);
149cdf0e10cSrcweir }
150cdf0e10cSrcweir // -------------------------------------------------------------------------
151cdf0e10cSrcweir // -----------------------------------------------------------------------------
acquire()152cdf0e10cSrcweir void SAL_CALL OAdoKey::acquire() throw()
153cdf0e10cSrcweir {
154cdf0e10cSrcweir 	OKey_ADO::acquire();
155cdf0e10cSrcweir }
156cdf0e10cSrcweir // -----------------------------------------------------------------------------
release()157cdf0e10cSrcweir void SAL_CALL OAdoKey::release() throw()
158cdf0e10cSrcweir {
159cdf0e10cSrcweir 	OKey_ADO::release();
160cdf0e10cSrcweir }
161cdf0e10cSrcweir // -----------------------------------------------------------------------------
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 
164