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 // ------------------------------------------------------------------------- 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 // ------------------------------------------------------------------------- 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 // ------------------------------------------------------------------------- 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 // ------------------------------------------------------------------------- 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 //------------------------------------------------------------------ 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 // ------------------------------------------------------------------------- 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 // ----------------------------------------------------------------------------- 152 void SAL_CALL OAdoKey::acquire() throw() 153 { 154 OKey_ADO::acquire(); 155 } 156 // ----------------------------------------------------------------------------- 157 void SAL_CALL OAdoKey::release() throw() 158 { 159 OKey_ADO::release(); 160 } 161 // ----------------------------------------------------------------------------- 162 163 164