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 27 #include <stdio.h> 28 #include <osl/diagnose.h> 29 #include "NPreparedStatement.hxx" 30 #include <com/sun/star/sdbc/DataType.hpp> 31 #include <cppuhelper/typeprovider.hxx> 32 #include <com/sun/star/lang/DisposedException.hpp> 33 #include "propertyids.hxx" 34 #include <connectivity/dbexception.hxx> 35 #include <connectivity/dbtools.hxx> 36 #include <tools/diagnose_ex.h> 37 38 #include "resource/common_res.hrc" 39 40 using namespace connectivity::evoab; 41 using namespace com::sun::star::uno; 42 using namespace com::sun::star::lang; 43 using namespace com::sun::star::beans; 44 using namespace com::sun::star::sdbc; 45 using namespace com::sun::star::container; 46 using namespace com::sun::star::io; 47 using namespace com::sun::star::util; 48 49 IMPLEMENT_SERVICE_INFO(OEvoabPreparedStatement,"com.sun.star.sdbcx.evoab.PreparedStatement","com.sun.star.sdbc.PreparedStatement"); 50 51 52 OEvoabPreparedStatement::OEvoabPreparedStatement( OEvoabConnection* _pConnection ) 53 :OCommonStatement(_pConnection) 54 ,m_sSqlStatement() 55 ,m_xMetaData() 56 { 57 } 58 59 // ----------------------------------------------------------------------------- 60 void OEvoabPreparedStatement::construct( const ::rtl::OUString& _sql ) 61 { 62 m_sSqlStatement = _sql; 63 64 m_aQueryData = impl_getEBookQuery_throw( m_sSqlStatement ); 65 ENSURE_OR_THROW( m_aQueryData.getQuery(), "no EBookQuery" ); 66 ENSURE_OR_THROW( m_aQueryData.xSelectColumns.isValid(), "no SelectColumn" ); 67 68 // create our meta data 69 OEvoabResultSetMetaData* pMeta = new OEvoabResultSetMetaData( m_aQueryData.sTable ); 70 m_xMetaData = pMeta; 71 pMeta->setEvoabFields( m_aQueryData.xSelectColumns ); 72 } 73 74 // ----------------------------------------------------------------------------- 75 OEvoabPreparedStatement::~OEvoabPreparedStatement() 76 { 77 } 78 79 // ----------------------------------------------------------------------------- 80 void SAL_CALL OEvoabPreparedStatement::acquire() throw() 81 { 82 OCommonStatement::acquire(); 83 } 84 85 // ----------------------------------------------------------------------------- 86 void SAL_CALL OEvoabPreparedStatement::release() throw() 87 { 88 OCommonStatement::release(); 89 } 90 91 // ----------------------------------------------------------------------------- 92 Any SAL_CALL OEvoabPreparedStatement::queryInterface( const Type & rType ) throw(RuntimeException) 93 { 94 Any aRet = OCommonStatement::queryInterface(rType); 95 if(!aRet.hasValue()) 96 aRet = OPreparedStatement_BASE::queryInterface(rType); 97 return aRet; 98 } 99 // ------------------------------------------------------------------------- 100 Sequence< Type > SAL_CALL OEvoabPreparedStatement::getTypes( ) throw(RuntimeException) 101 { 102 return ::comphelper::concatSequences(OPreparedStatement_BASE::getTypes(),OCommonStatement::getTypes()); 103 } 104 // ------------------------------------------------------------------------- 105 106 Reference< XResultSetMetaData > SAL_CALL OEvoabPreparedStatement::getMetaData( ) throw(SQLException, RuntimeException) 107 { 108 ::osl::MutexGuard aGuard( m_aMutex ); 109 checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed); 110 111 // the meta data should have been created at construction time 112 ENSURE_OR_THROW( m_xMetaData.is(), "internal error: no meta data" ); 113 return m_xMetaData; 114 } 115 // ------------------------------------------------------------------------- 116 117 void SAL_CALL OEvoabPreparedStatement::close( ) throw(SQLException, RuntimeException) 118 { 119 ::osl::MutexGuard aGuard( m_aMutex ); 120 checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed); 121 122 free_column_resources(); 123 // Reset last warning message 124 try { 125 clearWarnings (); 126 OCommonStatement::close(); 127 } 128 catch (SQLException &) { 129 // If we get an error, ignore 130 } 131 132 } 133 // ------------------------------------------------------------------------- 134 135 sal_Bool SAL_CALL OEvoabPreparedStatement::execute( ) throw(SQLException, RuntimeException) 136 { 137 ::osl::MutexGuard aGuard( m_aMutex ); 138 checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed); 139 140 Reference< XResultSet> xRS = impl_executeQuery_throw( m_aQueryData ); 141 return xRS.is(); 142 } 143 // ------------------------------------------------------------------------- 144 145 sal_Int32 SAL_CALL OEvoabPreparedStatement::executeUpdate( ) throw(SQLException, RuntimeException) 146 { 147 ::osl::MutexGuard aGuard( m_aMutex ); 148 checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed); 149 ::dbtools::throwFeatureNotImplementedException( "XStatement::executeUpdate", *this ); 150 return 0; 151 } 152 // ------------------------------------------------------------------------- 153 154 void SAL_CALL OEvoabPreparedStatement::setString( sal_Int32 /*parameterIndex*/, const ::rtl::OUString& /*x*/ ) throw(SQLException, RuntimeException) 155 { 156 ::dbtools::throwFunctionNotSupportedException( "XParameters::setString", *this ); 157 } 158 // ------------------------------------------------------------------------- 159 160 Reference< XConnection > SAL_CALL OEvoabPreparedStatement::getConnection( ) throw(SQLException, RuntimeException) 161 { 162 ::osl::MutexGuard aGuard( m_aMutex ); 163 checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed); 164 165 return impl_getConnection(); 166 } 167 // ------------------------------------------------------------------------- 168 169 Reference< XResultSet > SAL_CALL OEvoabPreparedStatement::executeQuery( ) throw(SQLException, RuntimeException) 170 { 171 ::osl::MutexGuard aGuard( m_aMutex ); 172 checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed); 173 174 return impl_executeQuery_throw( m_aQueryData ); 175 } 176 // ------------------------------------------------------------------------- 177 178 void SAL_CALL OEvoabPreparedStatement::setBoolean( sal_Int32 /*parameterIndex*/, sal_Bool /*x*/ ) throw(SQLException, RuntimeException) 179 { 180 ::dbtools::throwFunctionNotSupportedException( "XParameters::setBoolean", *this ); 181 182 } 183 // ------------------------------------------------------------------------- 184 void SAL_CALL OEvoabPreparedStatement::setByte( sal_Int32 /*parameterIndex*/, sal_Int8 /*x*/ ) throw(SQLException, RuntimeException) 185 { 186 ::dbtools::throwFunctionNotSupportedException( "XParameters::setByte", *this ); 187 } 188 // ------------------------------------------------------------------------- 189 190 void SAL_CALL OEvoabPreparedStatement::setDate( sal_Int32 /*parameterIndex*/, const Date& /*aData*/ ) throw(SQLException, RuntimeException) 191 { 192 ::dbtools::throwFunctionNotSupportedException( "XParameters::setDate", *this ); 193 } 194 // ------------------------------------------------------------------------- 195 196 void SAL_CALL OEvoabPreparedStatement::setTime( sal_Int32 /*parameterIndex*/, const Time& /*aVal*/ ) throw(SQLException, RuntimeException) 197 { 198 ::dbtools::throwFunctionNotSupportedException( "XParameters::setTime", *this ); 199 } 200 // ------------------------------------------------------------------------- 201 202 void SAL_CALL OEvoabPreparedStatement::setTimestamp( sal_Int32 /*parameterIndex*/, const DateTime& /*aVal*/ ) throw(SQLException, RuntimeException) 203 { 204 ::dbtools::throwFunctionNotSupportedException( "XParameters::setTimestamp", *this ); 205 } 206 // ------------------------------------------------------------------------- 207 208 void SAL_CALL OEvoabPreparedStatement::setDouble( sal_Int32 /*parameterIndex*/, double /*x*/ ) throw(SQLException, RuntimeException) 209 { 210 ::dbtools::throwFunctionNotSupportedException( "XParameters::setDouble", *this ); 211 } 212 213 // ------------------------------------------------------------------------- 214 215 void SAL_CALL OEvoabPreparedStatement::setFloat( sal_Int32 /*parameterIndex*/, float /*x*/ ) throw(SQLException, RuntimeException) 216 { 217 ::dbtools::throwFunctionNotSupportedException( "XParameters::setFloat", *this ); 218 } 219 // ------------------------------------------------------------------------- 220 221 void SAL_CALL OEvoabPreparedStatement::setInt( sal_Int32 /*parameterIndex*/, sal_Int32 /*x*/ ) throw(SQLException, RuntimeException) 222 { 223 ::dbtools::throwFunctionNotSupportedException( "XParameters::setInt", *this ); 224 } 225 // ------------------------------------------------------------------------- 226 227 void SAL_CALL OEvoabPreparedStatement::setLong( sal_Int32 /*parameterIndex*/, sal_Int64 /*aVal*/ ) throw(SQLException, RuntimeException) 228 { 229 ::dbtools::throwFunctionNotSupportedException( "XParameters::setLong", *this ); 230 } 231 // ------------------------------------------------------------------------- 232 233 void SAL_CALL OEvoabPreparedStatement::setNull( sal_Int32 /*parameterIndex*/, sal_Int32 /*sqlType*/ ) throw(SQLException, RuntimeException) 234 { 235 ::dbtools::throwFunctionNotSupportedException( "XParameters::setNull", *this ); 236 } 237 // ------------------------------------------------------------------------- 238 239 void SAL_CALL OEvoabPreparedStatement::setClob( sal_Int32 /*parameterIndex*/, const Reference< XClob >& /*x*/ ) throw(SQLException, RuntimeException) 240 { 241 ::dbtools::throwFunctionNotSupportedException( "XParameters::setClob", *this ); 242 } 243 // ------------------------------------------------------------------------- 244 245 void SAL_CALL OEvoabPreparedStatement::setBlob( sal_Int32 /*parameterIndex*/, const Reference< XBlob >& /*x*/ ) throw(SQLException, RuntimeException) 246 { 247 ::dbtools::throwFunctionNotSupportedException( "XParameters::setBlob", *this ); 248 } 249 // ------------------------------------------------------------------------- 250 251 void SAL_CALL OEvoabPreparedStatement::setArray( sal_Int32 /*parameterIndex*/, const Reference< XArray >& /*x*/ ) throw(SQLException, RuntimeException) 252 { 253 ::dbtools::throwFunctionNotSupportedException( "XParameters::setArray", *this ); 254 } 255 // ------------------------------------------------------------------------- 256 257 void SAL_CALL OEvoabPreparedStatement::setRef( sal_Int32 /*parameterIndex*/, const Reference< XRef >& /*x*/ ) throw(SQLException, RuntimeException) 258 { 259 ::dbtools::throwFunctionNotSupportedException( "XParameters::setRef", *this ); 260 } 261 // ------------------------------------------------------------------------- 262 263 void SAL_CALL OEvoabPreparedStatement::setObjectWithInfo( sal_Int32 /*parameterIndex*/, const Any& /*x*/, sal_Int32 /*sqlType*/, sal_Int32 /*scale*/ ) throw(SQLException, RuntimeException) 264 { 265 ::dbtools::throwFunctionNotSupportedException( "XParameters::setObjectWithInfo", *this ); 266 } 267 // ------------------------------------------------------------------------- 268 269 void SAL_CALL OEvoabPreparedStatement::setObjectNull( sal_Int32 /*parameterIndex*/, sal_Int32 /*sqlType*/, const ::rtl::OUString& /*typeName*/ ) throw(SQLException, RuntimeException) 270 { 271 ::dbtools::throwFunctionNotSupportedException( "XParameters::setObjectNull", *this ); 272 } 273 // ------------------------------------------------------------------------- 274 275 void SAL_CALL OEvoabPreparedStatement::setObject( sal_Int32 parameterIndex, const Any& x ) throw(SQLException, RuntimeException) 276 { 277 if(!::dbtools::implSetObject(this,parameterIndex,x)) 278 { 279 const ::rtl::OUString sError( getOwnConnection()->getResources().getResourceStringWithSubstitution( 280 STR_UNKNOWN_PARA_TYPE, 281 "$position$", ::rtl::OUString::valueOf(parameterIndex) 282 ) ); 283 ::dbtools::throwGenericSQLException(sError,*this); 284 } 285 } 286 // ------------------------------------------------------------------------- 287 288 void SAL_CALL OEvoabPreparedStatement::setShort( sal_Int32 /*parameterIndex*/, sal_Int16 /*x*/ ) throw(SQLException, RuntimeException) 289 { 290 ::dbtools::throwFunctionNotSupportedException( "XParameters::setShort", *this ); 291 } 292 // ------------------------------------------------------------------------- 293 294 void SAL_CALL OEvoabPreparedStatement::setBytes( sal_Int32 /*parameterIndex*/, const Sequence< sal_Int8 >& /*x*/ ) throw(SQLException, RuntimeException) 295 { 296 ::dbtools::throwFunctionNotSupportedException( "XParameters::setBytes", *this ); 297 } 298 // ------------------------------------------------------------------------- 299 300 301 void SAL_CALL OEvoabPreparedStatement::setCharacterStream( sal_Int32 /*parameterIndex*/, const Reference< XInputStream >& /*x*/, sal_Int32 /*length*/ ) throw(SQLException, RuntimeException) 302 { 303 ::dbtools::throwFunctionNotSupportedException( "XParameters::setCharacterStream", *this ); 304 } 305 // ------------------------------------------------------------------------- 306 307 void SAL_CALL OEvoabPreparedStatement::setBinaryStream( sal_Int32 /*parameterIndex*/, const Reference< XInputStream >& /*x*/, sal_Int32 /*length*/ ) throw(SQLException, RuntimeException) 308 { 309 ::dbtools::throwFunctionNotSupportedException( "XParameters::setBinaryStream", *this ); 310 } 311 // ------------------------------------------------------------------------- 312 313 void SAL_CALL OEvoabPreparedStatement::clearParameters( ) throw(SQLException, RuntimeException) 314 { 315 } 316 // ----------------------------------------------------------------------------- 317 Reference< XResultSet > SAL_CALL OEvoabPreparedStatement::getResultSet( ) throw(SQLException, RuntimeException) 318 { 319 return NULL; 320 } 321 // ----------------------------------------------------------------------------- 322 sal_Int32 SAL_CALL OEvoabPreparedStatement::getUpdateCount( ) throw(SQLException, RuntimeException) 323 { 324 return 0; 325 } 326 // ----------------------------------------------------------------------------- 327 sal_Bool SAL_CALL OEvoabPreparedStatement::getMoreResults( ) throw(SQLException, RuntimeException) 328 { 329 return sal_False; 330 } 331 // ----------------------------------------------------------------------------- 332