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