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_dbaccess.hxx" 26 #ifndef _DBA_COREAPI_CALLABLESTATEMENT_HXX_ 27 #include <callablestatement.hxx> 28 #endif 29 #ifndef _COM_SUN_STAR_LANG_DISPOSEDEXCEPTION_HPP_ 30 #include <com/sun/star/lang/DisposedException.hpp> 31 #endif 32 #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_ 33 #include <cppuhelper/typeprovider.hxx> 34 #endif 35 #ifndef _COMPHELPER_PROPERTY_HXX_ 36 #include <comphelper/property.hxx> 37 #endif 38 #ifndef _TOOLS_DEBUG_HXX //autogen 39 #include <tools/debug.hxx> 40 #endif 41 #ifndef DBACCESS_SHARED_DBASTRINGS_HRC 42 #include "dbastrings.hrc" 43 #endif 44 #include <rtl/logfile.hxx> 45 46 using namespace dbaccess; 47 using namespace ::com::sun::star::sdbc; 48 using namespace ::com::sun::star::sdbcx; 49 using namespace ::com::sun::star::beans; 50 using namespace ::com::sun::star::uno; 51 using namespace ::com::sun::star::lang; 52 using namespace ::cppu; 53 using namespace ::osl; 54 55 // com::sun::star::lang::XTypeProvider 56 //-------------------------------------------------------------------------- 57 Sequence< Type > OCallableStatement::getTypes() throw (RuntimeException) 58 { 59 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getTypes" ); 60 OTypeCollection aTypes(::getCppuType( (const Reference< XRow > *)0 ), 61 ::getCppuType( (const Reference< XOutParameters > *)0 ), 62 OPreparedStatement::getTypes() ); 63 64 return aTypes.getTypes(); 65 } 66 67 //-------------------------------------------------------------------------- 68 Sequence< sal_Int8 > OCallableStatement::getImplementationId() throw (RuntimeException) 69 { 70 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getImplementationId" ); 71 static OImplementationId * pId = 0; 72 if (! pId) 73 { 74 MutexGuard aGuard( Mutex::getGlobalMutex() ); 75 if (! pId) 76 { 77 static OImplementationId aId; 78 pId = &aId; 79 } 80 } 81 return pId->getImplementationId(); 82 } 83 84 // com::sun::star::uno::XInterface 85 //-------------------------------------------------------------------------- 86 Any OCallableStatement::queryInterface( const Type & rType ) throw (RuntimeException) 87 { 88 //RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::queryInterface" ); 89 Any aIface = OPreparedStatement::queryInterface( rType ); 90 if (!aIface.hasValue()) 91 aIface = ::cppu::queryInterface( 92 rType, 93 static_cast< XRow * >( this ), 94 static_cast< XOutParameters * >( this )); 95 return aIface; 96 } 97 98 //-------------------------------------------------------------------------- 99 void OCallableStatement::acquire() throw () 100 { 101 OPreparedStatement::acquire(); 102 } 103 104 //-------------------------------------------------------------------------- 105 void OCallableStatement::release() throw () 106 { 107 OPreparedStatement::release(); 108 } 109 110 // XServiceInfo 111 //------------------------------------------------------------------------------ 112 rtl::OUString OCallableStatement::getImplementationName( ) throw(RuntimeException) 113 { 114 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getImplementationName" ); 115 return rtl::OUString::createFromAscii("com.sun.star.sdb.OCallableStatement"); 116 } 117 118 //------------------------------------------------------------------------------ 119 Sequence< ::rtl::OUString > OCallableStatement::getSupportedServiceNames( ) throw (RuntimeException) 120 { 121 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getSupportedServiceNames" ); 122 Sequence< ::rtl::OUString > aSNS( 2 ); 123 aSNS.getArray()[0] = SERVICE_SDBC_CALLABLESTATEMENT; 124 aSNS.getArray()[1] = SERVICE_SDB_CALLABLESTATEMENT; 125 return aSNS; 126 } 127 128 // XOutParameters 129 //------------------------------------------------------------------------------ 130 void SAL_CALL OCallableStatement::registerOutParameter( sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName ) throw(SQLException, RuntimeException) 131 { 132 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::registerOutParameter" ); 133 MutexGuard aGuard(m_aMutex); 134 135 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 136 137 138 Reference< XOutParameters >(m_xAggregateAsSet, UNO_QUERY)->registerOutParameter( parameterIndex, sqlType, typeName ); 139 } 140 141 //------------------------------------------------------------------------------ 142 void SAL_CALL OCallableStatement::registerNumericOutParameter( sal_Int32 parameterIndex, sal_Int32 sqlType, sal_Int32 scale ) throw(SQLException, RuntimeException) 143 { 144 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::registerNumericOutParameter" ); 145 MutexGuard aGuard(m_aMutex); 146 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 147 148 Reference< XOutParameters >(m_xAggregateAsSet, UNO_QUERY)->registerNumericOutParameter( parameterIndex, sqlType, scale ); 149 } 150 151 // XRow 152 //------------------------------------------------------------------------------ 153 sal_Bool SAL_CALL OCallableStatement::wasNull( ) throw(SQLException, RuntimeException) 154 { 155 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::wasNull" ); 156 MutexGuard aGuard(m_aMutex); 157 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 158 159 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->wasNull(); 160 } 161 162 //------------------------------------------------------------------------------ 163 ::rtl::OUString SAL_CALL OCallableStatement::getString( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 164 { 165 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getString" ); 166 MutexGuard aGuard(m_aMutex); 167 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 168 169 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getString( columnIndex ); 170 } 171 172 //------------------------------------------------------------------------------ 173 sal_Bool SAL_CALL OCallableStatement::getBoolean( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 174 { 175 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getBoolean" ); 176 MutexGuard aGuard(m_aMutex); 177 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 178 179 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getBoolean( columnIndex ); 180 } 181 182 //------------------------------------------------------------------------------ 183 sal_Int8 SAL_CALL OCallableStatement::getByte( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 184 { 185 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getByte" ); 186 MutexGuard aGuard(m_aMutex); 187 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 188 189 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getByte( columnIndex ); 190 } 191 192 //------------------------------------------------------------------------------ 193 sal_Int16 SAL_CALL OCallableStatement::getShort( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 194 { 195 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getShort" ); 196 MutexGuard aGuard(m_aMutex); 197 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 198 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getShort( columnIndex ); 199 } 200 201 //------------------------------------------------------------------------------ 202 sal_Int32 SAL_CALL OCallableStatement::getInt( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 203 { 204 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getInt" ); 205 MutexGuard aGuard(m_aMutex); 206 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 207 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getInt( columnIndex ); 208 } 209 210 //------------------------------------------------------------------------------ 211 sal_Int64 SAL_CALL OCallableStatement::getLong( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 212 { 213 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getLong" ); 214 MutexGuard aGuard(m_aMutex); 215 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 216 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getLong( columnIndex ); 217 } 218 219 //------------------------------------------------------------------------------ 220 float SAL_CALL OCallableStatement::getFloat( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 221 { 222 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getFloat" ); 223 MutexGuard aGuard(m_aMutex); 224 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 225 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getFloat( columnIndex ); 226 } 227 228 //------------------------------------------------------------------------------ 229 double SAL_CALL OCallableStatement::getDouble( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 230 { 231 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getDouble" ); 232 MutexGuard aGuard(m_aMutex); 233 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 234 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getDouble( columnIndex ); 235 } 236 237 //------------------------------------------------------------------------------ 238 Sequence< sal_Int8 > SAL_CALL OCallableStatement::getBytes( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 239 { 240 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getBytes" ); 241 MutexGuard aGuard(m_aMutex); 242 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 243 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getBytes( columnIndex ); 244 } 245 246 //------------------------------------------------------------------------------ 247 ::com::sun::star::util::Date SAL_CALL OCallableStatement::getDate( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 248 { 249 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getDate" ); 250 MutexGuard aGuard(m_aMutex); 251 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 252 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getDate( columnIndex ); 253 } 254 255 //------------------------------------------------------------------------------ 256 ::com::sun::star::util::Time SAL_CALL OCallableStatement::getTime( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 257 { 258 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getTime" ); 259 MutexGuard aGuard(m_aMutex); 260 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 261 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getTime( columnIndex ); 262 } 263 264 //------------------------------------------------------------------------------ 265 ::com::sun::star::util::DateTime SAL_CALL OCallableStatement::getTimestamp( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 266 { 267 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getTimestamp" ); 268 MutexGuard aGuard(m_aMutex); 269 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 270 271 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getTimestamp( columnIndex ); 272 } 273 274 //------------------------------------------------------------------------------ 275 Reference< ::com::sun::star::io::XInputStream > SAL_CALL OCallableStatement::getBinaryStream( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 276 { 277 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getBinaryStream" ); 278 MutexGuard aGuard(m_aMutex); 279 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 280 281 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getBinaryStream( columnIndex ); 282 } 283 284 //------------------------------------------------------------------------------ 285 Reference< ::com::sun::star::io::XInputStream > SAL_CALL OCallableStatement::getCharacterStream( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 286 { 287 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getCharacterStream" ); 288 MutexGuard aGuard(m_aMutex); 289 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 290 291 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getCharacterStream( columnIndex ); 292 } 293 294 //------------------------------------------------------------------------------ 295 Any SAL_CALL OCallableStatement::getObject( sal_Int32 columnIndex, const Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(SQLException, RuntimeException) 296 { 297 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getObject" ); 298 MutexGuard aGuard(m_aMutex); 299 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 300 301 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getObject( columnIndex, typeMap ); 302 } 303 304 //------------------------------------------------------------------------------ 305 Reference< XRef > SAL_CALL OCallableStatement::getRef( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 306 { 307 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getRef" ); 308 MutexGuard aGuard(m_aMutex); 309 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 310 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getRef( columnIndex ); 311 } 312 313 //------------------------------------------------------------------------------ 314 Reference< XBlob > SAL_CALL OCallableStatement::getBlob( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 315 { 316 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getBlob" ); 317 MutexGuard aGuard(m_aMutex); 318 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 319 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getBlob( columnIndex ); 320 } 321 322 //------------------------------------------------------------------------------ 323 Reference< XClob > SAL_CALL OCallableStatement::getClob( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 324 { 325 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getClob" ); 326 MutexGuard aGuard(m_aMutex); 327 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 328 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getClob( columnIndex ); 329 } 330 331 //------------------------------------------------------------------------------ 332 Reference< XArray > SAL_CALL OCallableStatement::getArray( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 333 { 334 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "Ocke.Janssen@sun.com", "OCallableStatement::getArray" ); 335 MutexGuard aGuard(m_aMutex); 336 ::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed); 337 return Reference< XRow >(m_xAggregateAsSet, UNO_QUERY)->getArray( columnIndex ); 338 } 339 340 341