diff options
Diffstat (limited to 'connectivity/source/drivers/ado/APreparedStatement.cxx')
-rw-r--r-- | connectivity/source/drivers/ado/APreparedStatement.cxx | 566 |
1 files changed, 0 insertions, 566 deletions
diff --git a/connectivity/source/drivers/ado/APreparedStatement.cxx b/connectivity/source/drivers/ado/APreparedStatement.cxx deleted file mode 100644 index eabdef9430..0000000000 --- a/connectivity/source/drivers/ado/APreparedStatement.cxx +++ /dev/null @@ -1,566 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_connectivity.hxx" -#include "connectivity/sqlparse.hxx" -#include "ado/APreparedStatement.hxx" -#include <com/sun/star/sdbc/DataType.hpp> -#include "ado/AResultSetMetaData.hxx" -#include "ado/AResultSet.hxx" -#include "ado/ADriver.hxx" -#include <com/sun/star/lang/DisposedException.hpp> -#include <cppuhelper/typeprovider.hxx> -#include <comphelper/sequence.hxx> -#include "connectivity/dbexception.hxx" -#include "connectivity/dbtools.hxx" -#include "resource/ado_res.hrc" - -#include <limits> - -#define CHECK_RETURN(x) \ - if(!x) \ - ADOS::ThrowException(*m_pConnection->getConnection(),*this); - -#ifdef max -# undef max -#endif - -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ -using namespace connectivity::ado; -using namespace connectivity; -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::sdbc; -using namespace com::sun::star::util; - - -IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbcx.APreparedStatement","com.sun.star.sdbc.PreparedStatement"); - -OPreparedStatement::OPreparedStatement( OConnection* _pConnection,const OTypeInfoMap& _TypeInfo,const ::rtl::OUString& sql) - : OStatement_Base( _pConnection ) - ,m_aTypeInfo(_TypeInfo) -{ - osl_incrementInterlockedCount( &m_refCount ); - - OSQLParser aParser(_pConnection->getDriver()->getORB()); - ::rtl::OUString sErrorMessage; - ::rtl::OUString sNewSql; - OSQLParseNode* pNode = aParser.parseTree(sErrorMessage,sql); - if(pNode) - { // special handling for parameters - /* we recusive replace all occurrences of ? in the statement and replace them with name like "æ¬å" */ - sal_Int32 nParameterCount = 0; - ::rtl::OUString sDefaultName( RTL_CONSTASCII_USTRINGPARAM( "parame" )); - replaceParameterNodeName(pNode,sDefaultName,nParameterCount); - pNode->parseNodeToStr( sNewSql, _pConnection ); - delete pNode; - } - else - sNewSql = sql; - CHECK_RETURN(m_Command.put_CommandText(sNewSql)) - CHECK_RETURN(m_Command.put_Prepared(VARIANT_TRUE)) - m_pParameters = m_Command.get_Parameters(); - m_pParameters->AddRef(); - m_pParameters->Refresh(); - - osl_decrementInterlockedCount( &m_refCount ); -} - -// ------------------------------------------------------------------------- -OPreparedStatement::~OPreparedStatement() -{ - if (m_pParameters) - { - OSL_FAIL( "OPreparedStatement::~OPreparedStatement: not disposed!" ); - m_pParameters->Release(); - m_pParameters = NULL; - } -} - -// ------------------------------------------------------------------------- - -Any SAL_CALL OPreparedStatement::queryInterface( const Type & rType ) throw(RuntimeException) -{ - Any aRet = OStatement_Base::queryInterface(rType); - return aRet.hasValue() ? aRet : ::cppu::queryInterface( rType, - static_cast< XPreparedStatement*>(this), - static_cast< XParameters*>(this), - static_cast< XPreparedBatchExecution*>(this), - static_cast< XResultSetMetaDataSupplier*>(this)); -} -// ------------------------------------------------------------------------- -::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL OPreparedStatement::getTypes( ) throw(::com::sun::star::uno::RuntimeException) -{ - ::cppu::OTypeCollection aTypes( ::getCppuType( (const ::com::sun::star::uno::Reference< XPreparedStatement > *)0 ), - ::getCppuType( (const ::com::sun::star::uno::Reference< XParameters > *)0 ), - ::getCppuType( (const ::com::sun::star::uno::Reference< XResultSetMetaDataSupplier > *)0 ), - ::getCppuType( (const ::com::sun::star::uno::Reference< XPreparedBatchExecution > *)0 )); - - return ::comphelper::concatSequences(aTypes.getTypes(),OStatement_Base::getTypes()); -} -// ------------------------------------------------------------------------- - -Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData( ) throw(SQLException, RuntimeException) -{ - if(!m_xMetaData.is() && m_RecordSet.IsValid()) - m_xMetaData = new OResultSetMetaData(m_RecordSet); - return m_xMetaData; -} -// ------------------------------------------------------------------------- -void OPreparedStatement::disposing() -{ -m_xMetaData.clear(); - if (m_pParameters) - { - m_pParameters->Release(); - m_pParameters = NULL; - } - OStatement_Base::disposing(); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::close( ) throw(SQLException, RuntimeException) -{ - - { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); - - } - dispose(); - -} -// ------------------------------------------------------------------------- - -sal_Bool SAL_CALL OPreparedStatement::execute( ) throw(SQLException, RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); - - - SQLWarning warning; - - // Reset warnings - - clearWarnings (); - - // Reset the statement handle, warning and saved Resultset - - // reset(); - - // Call SQLExecute - - try { - ADORecordset* pSet=NULL; - CHECK_RETURN(m_Command.Execute(m_RecordsAffected,m_Parameters,adCmdUnknown,&pSet)) - m_RecordSet = WpADORecordset(pSet); - } - catch (SQLWarning& ex) - { - - // Save pointer to warning and save with ResultSet - // object once it is created. - - warning = ex; - } - return m_RecordSet.IsValid(); -} -// ------------------------------------------------------------------------- - -sal_Int32 SAL_CALL OPreparedStatement::executeUpdate( ) throw(SQLException, RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); - - - ADORecordset* pSet=NULL; - CHECK_RETURN(m_Command.Execute(m_RecordsAffected,m_Parameters,adCmdUnknown,&pSet)) - if ( VT_ERROR == m_RecordsAffected.getType() ) - { - ADOS::ThrowException(*m_pConnection->getConnection(),*this); - // to be sure that we get the error really thrown - throw SQLException(); - } - m_RecordSet = WpADORecordset(pSet); - return static_cast<sal_Int32>(m_RecordsAffected); -} - -// ------------------------------------------------------------------------- -void OPreparedStatement::setParameter(sal_Int32 parameterIndex, const DataTypeEnum& _eType, - const sal_Int32& _nSize,const OLEVariant& _Val) throw(SQLException, RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); - - - sal_Int32 nCount = 0; - m_pParameters->get_Count(&nCount); - if(nCount < (parameterIndex-1)) - { - ::rtl::OUString sDefaultName( RTL_CONSTASCII_USTRINGPARAM( "parame" )); - sDefaultName += ::rtl::OUString::valueOf(parameterIndex); - ADOParameter* pParam = m_Command.CreateParameter(sDefaultName,_eType,adParamInput,_nSize,_Val); - if(pParam) - { - m_pParameters->Append(pParam); -#if OSL_DEBUG_LEVEL > 0 - ADOParameter* pParam = NULL; - m_pParameters->get_Item(OLEVariant(sal_Int32(parameterIndex-1)),&pParam); - WpADOParameter aParam(pParam); - if(pParam) - { - DataTypeEnum eType = aParam.GetADOType(); - (void)eType; - } -#endif - } - } - else - { - ADOParameter* pParam = NULL; - m_pParameters->get_Item(OLEVariant(sal_Int32(parameterIndex-1)),&pParam); - WpADOParameter aParam(pParam); - if(pParam) - { -#if OSL_DEBUG_LEVEL > 0 - ::rtl::OUString sParam = aParam.GetName(); - -#endif // OSL_DEBUG_LEVEL - - DataTypeEnum eType = aParam.GetADOType(); - if ( _eType != eType && _eType != adDBTimeStamp ) - { - aParam.put_Type(_eType); - eType = _eType; - aParam.put_Size(_nSize); - } - - if ( adVarBinary == eType && aParam.GetAttributes() == adParamLong ) - { - aParam.AppendChunk(_Val); - } - else - CHECK_RETURN(aParam.PutValue(_Val)); - } - } - ADOS::ThrowException(*m_pConnection->getConnection(),*this); -} -// ------------------------------------------------------------------------- -void SAL_CALL OPreparedStatement::setString( sal_Int32 parameterIndex, const ::rtl::OUString& x ) throw(SQLException, RuntimeException) -{ - setParameter( parameterIndex, adLongVarWChar, ::std::numeric_limits< sal_Int32 >::max(), x ); -} -// ------------------------------------------------------------------------- - -Reference< XConnection > SAL_CALL OPreparedStatement::getConnection( ) throw(SQLException, RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); - - - return (Reference< XConnection >)m_pConnection; -} -// ------------------------------------------------------------------------- - -Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery( ) throw(SQLException, RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); - - - // first clear the old things -m_xMetaData.clear(); - disposeResultSet(); - if(m_RecordSet.IsValid()) - m_RecordSet.Close(); - m_RecordSet.clear(); - - - // the create the new onces - m_RecordSet.Create(); - OLEVariant aCmd; - aCmd.setIDispatch(m_Command); - OLEVariant aCon; - aCon.setNoArg(); - CHECK_RETURN(m_RecordSet.put_CacheSize(m_nFetchSize)) - CHECK_RETURN(m_RecordSet.put_MaxRecords(m_nMaxRows)) - CHECK_RETURN(m_RecordSet.Open(aCmd,aCon,m_eCursorType,m_eLockType,adOpenUnspecified)) - CHECK_RETURN(m_RecordSet.get_CacheSize(m_nFetchSize)) - CHECK_RETURN(m_RecordSet.get_MaxRecords(m_nMaxRows)) - CHECK_RETURN(m_RecordSet.get_CursorType(m_eCursorType)) - CHECK_RETURN(m_RecordSet.get_LockType(m_eLockType)) - - OResultSet* pSet = new OResultSet(m_RecordSet,this); - Reference< XResultSet > xRs = pSet; - pSet->construct(); - pSet->setMetaData(getMetaData()); - m_xResultSet = WeakReference<XResultSet>(xRs); - - return xRs; -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setBoolean( sal_Int32 parameterIndex, sal_Bool x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adBoolean,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setByte( sal_Int32 parameterIndex, sal_Int8 x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adTinyInt,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setDate( sal_Int32 parameterIndex, const Date& x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adDBDate,sizeof(x),x); -} -// ------------------------------------------------------------------------- - - -void SAL_CALL OPreparedStatement::setTime( sal_Int32 parameterIndex, const Time& x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adDBTime,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setTimestamp( sal_Int32 parameterIndex, const DateTime& x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adDBTimeStamp,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setDouble( sal_Int32 parameterIndex, double x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adDouble,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setFloat( sal_Int32 parameterIndex, float x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adSingle,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setInt( sal_Int32 parameterIndex, sal_Int32 x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adInteger,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setLong( sal_Int32 parameterIndex, sal_Int64 x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adBigInt,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setNull( sal_Int32 parameterIndex, sal_Int32 /*sqlType*/ ) throw(SQLException, RuntimeException) -{ - OLEVariant aVal; - aVal.setNull(); - setParameter(parameterIndex,adEmpty,0,aVal); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setClob( sal_Int32 /*parameterIndex*/, const Reference< XClob >& /*x*/ ) throw(SQLException, RuntimeException) -{ - ::dbtools::throwFeatureNotImplementedException( "XRowUpdate::setClob", *this ); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setBlob( sal_Int32 /*parameterIndex*/, const Reference< XBlob >& /*x*/ ) throw(SQLException, RuntimeException) -{ - ::dbtools::throwFeatureNotImplementedException( "XRowUpdate::setBlob", *this ); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setArray( sal_Int32 /*parameterIndex*/, const Reference< XArray >& /*x*/ ) throw(SQLException, RuntimeException) -{ - ::dbtools::throwFeatureNotImplementedException( "XRowUpdate::setArray", *this ); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setRef( sal_Int32 /*parameterIndex*/, const Reference< XRef >& /*x*/ ) throw(SQLException, RuntimeException) -{ - ::dbtools::throwFeatureNotImplementedException( "XRowUpdate::setRef", *this ); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, const Any& x, sal_Int32 sqlType, sal_Int32 scale ) throw(SQLException, RuntimeException) -{ - switch(sqlType) - { - case DataType::DECIMAL: - case DataType::NUMERIC: - setString(parameterIndex,::comphelper::getString(x)); - break; - default: - ::dbtools::setObjectWithInfo(this,parameterIndex,x,sqlType,scale); - break; - } -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& /*typeName*/ ) throw(SQLException, RuntimeException) -{ - setNull(parameterIndex,sqlType); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setObject( sal_Int32 parameterIndex, const Any& x ) throw(SQLException, RuntimeException) -{ - if(!::dbtools::implSetObject(this,parameterIndex,x)) - { - const ::rtl::OUString sError( m_pConnection->getResources().getResourceStringWithSubstitution( - STR_UNKNOWN_PARA_TYPE, - "$position$", ::rtl::OUString::valueOf(parameterIndex) - ) ); - ::dbtools::throwGenericSQLException(sError,*this); - } - // setObject (parameterIndex, x, sqlType, 0); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setShort( sal_Int32 parameterIndex, sal_Int16 x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adSmallInt,sizeof(x),x); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setBytes( sal_Int32 parameterIndex, const Sequence< sal_Int8 >& x ) throw(SQLException, RuntimeException) -{ - setParameter(parameterIndex,adVarBinary,sizeof(sal_Int8)*x.getLength(),x); -} - -// ------------------------------------------------------------------------- - - -void SAL_CALL OPreparedStatement::setCharacterStream( sal_Int32 /*parameterIndex*/, const Reference< ::com::sun::star::io::XInputStream >& /*x*/, sal_Int32 /*length*/ ) throw(SQLException, RuntimeException) -{ - ::dbtools::throwFeatureNotImplementedException( "XParameters::setCharacterStream", *this ); -} - -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setBinaryStream( sal_Int32 parameterIndex, const Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(SQLException, RuntimeException) -{ - if(x.is()) - { - Sequence< sal_Int8 > aData; - x->readBytes(aData,length); - setBytes(parameterIndex,aData); - } -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::clearParameters( ) throw(SQLException, RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); - - - if(m_pParameters) - { - sal_Int32 nCount = 0; - m_pParameters->get_Count(&nCount); - OLEVariant aVal; - aVal.setEmpty(); - for(sal_Int32 i=0;i<nCount;++i) - { - ADOParameter* pParam = NULL; - m_pParameters->get_Item(OLEVariant(i),&pParam); - WpADOParameter aParam(pParam); - if(pParam) - { - ::rtl::OUString sParam = aParam.GetName(); - CHECK_RETURN(aParam.PutValue(aVal)); - } - } - // m_pParameters->Delete(OLEVariant(i)); - - } -} -// ------------------------------------------------------------------------- -void SAL_CALL OPreparedStatement::clearBatch( ) throw(SQLException, RuntimeException) -{ - // clearParameters( ); - // m_aBatchList.erase(); -} -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::addBatch( ) throw(SQLException, RuntimeException) -{ -} -// ------------------------------------------------------------------------- - -Sequence< sal_Int32 > SAL_CALL OPreparedStatement::executeBatch( ) throw(SQLException, RuntimeException) -{ - return Sequence< sal_Int32 > (); -} -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -void SAL_CALL OPreparedStatement::acquire() throw() -{ - OStatement_Base::acquire(); -} -// ----------------------------------------------------------------------------- -void SAL_CALL OPreparedStatement::release() throw() -{ - OStatement_Base::release(); -} -// ----------------------------------------------------------------------------- -void OPreparedStatement::replaceParameterNodeName(OSQLParseNode* _pNode, - const ::rtl::OUString& _sDefaultName, - sal_Int32& _rParameterCount) -{ - sal_Int32 nCount = _pNode->count(); - for(sal_Int32 i=0;i < nCount;++i) - { - OSQLParseNode* pChildNode = _pNode->getChild(i); - if(SQL_ISRULE(pChildNode,parameter) && pChildNode->count() == 1) - { - OSQLParseNode* pNewNode = new OSQLParseNode(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(":")) ,SQL_NODE_PUNCTUATION,0); - delete pChildNode->replace(pChildNode->getChild(0),pNewNode); - ::rtl::OUString sParameterName = _sDefaultName; - sParameterName += ::rtl::OUString::valueOf(++_rParameterCount); - pChildNode->append(new OSQLParseNode( sParameterName,SQL_NODE_NAME,0)); - } - else - replaceParameterNodeName(pChildNode,_sDefaultName,_rParameterCount); - - } -} -// ----------------------------------------------------------------------------- - - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |