1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_connectivity.hxx"
32 #include <osl/diagnose.h>
33 #include "NPreparedStatement.hxx"
34 #include <com/sun/star/sdbc/DataType.hpp>
35 #include <cppuhelper/typeprovider.hxx>
36 #include <com/sun/star/lang/DisposedException.hpp>
37 #include "propertyids.hxx"
38 #include <connectivity/dbexception.hxx>
39 #include <connectivity/dbtools.hxx>
40 #include <tools/diagnose_ex.h>
42 #include "resource/common_res.hrc"
44 using namespace connectivity::evoab
;
45 using namespace com::sun::star::uno
;
46 using namespace com::sun::star::lang
;
47 using namespace com::sun::star::beans
;
48 using namespace com::sun::star::sdbc
;
49 using namespace com::sun::star::container
;
50 using namespace com::sun::star::io
;
51 using namespace com::sun::star::util
;
53 IMPLEMENT_SERVICE_INFO(OEvoabPreparedStatement
,"com.sun.star.sdbcx.evoab.PreparedStatement","com.sun.star.sdbc.PreparedStatement");
56 OEvoabPreparedStatement::OEvoabPreparedStatement( OEvoabConnection
* _pConnection
)
57 :OCommonStatement(_pConnection
)
63 // -----------------------------------------------------------------------------
64 void OEvoabPreparedStatement::construct( const ::rtl::OUString
& _sql
)
66 m_sSqlStatement
= _sql
;
68 m_aQueryData
= impl_getEBookQuery_throw( m_sSqlStatement
);
69 ENSURE_OR_THROW( m_aQueryData
.getQuery(), "no EBookQuery" );
70 ENSURE_OR_THROW( m_aQueryData
.xSelectColumns
.isValid(), "no SelectColumn" );
72 // create our meta data
73 OEvoabResultSetMetaData
* pMeta
= new OEvoabResultSetMetaData( m_aQueryData
.sTable
);
75 pMeta
->setEvoabFields( m_aQueryData
.xSelectColumns
);
78 // -----------------------------------------------------------------------------
79 OEvoabPreparedStatement::~OEvoabPreparedStatement()
83 // -----------------------------------------------------------------------------
84 void SAL_CALL
OEvoabPreparedStatement::acquire() throw()
86 OCommonStatement::acquire();
89 // -----------------------------------------------------------------------------
90 void SAL_CALL
OEvoabPreparedStatement::release() throw()
92 OCommonStatement::release();
95 // -----------------------------------------------------------------------------
96 Any SAL_CALL
OEvoabPreparedStatement::queryInterface( const Type
& rType
) throw(RuntimeException
)
98 Any aRet
= OCommonStatement::queryInterface(rType
);
100 aRet
= OPreparedStatement_BASE::queryInterface(rType
);
103 // -------------------------------------------------------------------------
104 Sequence
< Type
> SAL_CALL
OEvoabPreparedStatement::getTypes( ) throw(RuntimeException
)
106 return ::comphelper::concatSequences(OPreparedStatement_BASE::getTypes(),OCommonStatement::getTypes());
108 // -------------------------------------------------------------------------
110 Reference
< XResultSetMetaData
> SAL_CALL
OEvoabPreparedStatement::getMetaData( ) throw(SQLException
, RuntimeException
)
112 ::osl::MutexGuard
aGuard( m_aMutex
);
113 checkDisposed(OCommonStatement_IBase::rBHelper
.bDisposed
);
115 // the meta data should have been created at construction time
116 ENSURE_OR_THROW( m_xMetaData
.is(), "internal error: no meta data" );
119 // -------------------------------------------------------------------------
121 void SAL_CALL
OEvoabPreparedStatement::close( ) throw(SQLException
, RuntimeException
)
123 ::osl::MutexGuard
aGuard( m_aMutex
);
124 checkDisposed(OCommonStatement_IBase::rBHelper
.bDisposed
);
126 free_column_resources();
127 // Reset last warning message
130 OCommonStatement::close();
132 catch (SQLException
&) {
133 // If we get an error, ignore
137 // -------------------------------------------------------------------------
139 sal_Bool SAL_CALL
OEvoabPreparedStatement::execute( ) throw(SQLException
, RuntimeException
)
141 ::osl::MutexGuard
aGuard( m_aMutex
);
142 checkDisposed(OCommonStatement_IBase::rBHelper
.bDisposed
);
144 Reference
< XResultSet
> xRS
= impl_executeQuery_throw( m_aQueryData
);
147 // -------------------------------------------------------------------------
149 sal_Int32 SAL_CALL
OEvoabPreparedStatement::executeUpdate( ) throw(SQLException
, RuntimeException
)
151 ::osl::MutexGuard
aGuard( m_aMutex
);
152 checkDisposed(OCommonStatement_IBase::rBHelper
.bDisposed
);
153 ::dbtools::throwFeatureNotImplementedException( "XStatement::executeUpdate", *this );
156 // -------------------------------------------------------------------------
158 void SAL_CALL
OEvoabPreparedStatement::setString( sal_Int32
/*parameterIndex*/, const ::rtl::OUString
& /*x*/ ) throw(SQLException
, RuntimeException
)
160 ::dbtools::throwFunctionNotSupportedException( "XParameters::setString", *this );
162 // -------------------------------------------------------------------------
164 Reference
< XConnection
> SAL_CALL
OEvoabPreparedStatement::getConnection( ) throw(SQLException
, RuntimeException
)
166 ::osl::MutexGuard
aGuard( m_aMutex
);
167 checkDisposed(OCommonStatement_IBase::rBHelper
.bDisposed
);
169 return impl_getConnection();
171 // -------------------------------------------------------------------------
173 Reference
< XResultSet
> SAL_CALL
OEvoabPreparedStatement::executeQuery( ) throw(SQLException
, RuntimeException
)
175 ::osl::MutexGuard
aGuard( m_aMutex
);
176 checkDisposed(OCommonStatement_IBase::rBHelper
.bDisposed
);
178 return impl_executeQuery_throw( m_aQueryData
);
180 // -------------------------------------------------------------------------
182 void SAL_CALL
OEvoabPreparedStatement::setBoolean( sal_Int32
/*parameterIndex*/, sal_Bool
/*x*/ ) throw(SQLException
, RuntimeException
)
184 ::dbtools::throwFunctionNotSupportedException( "XParameters::setBoolean", *this );
187 // -------------------------------------------------------------------------
188 void SAL_CALL
OEvoabPreparedStatement::setByte( sal_Int32
/*parameterIndex*/, sal_Int8
/*x*/ ) throw(SQLException
, RuntimeException
)
190 ::dbtools::throwFunctionNotSupportedException( "XParameters::setByte", *this );
192 // -------------------------------------------------------------------------
194 void SAL_CALL
OEvoabPreparedStatement::setDate( sal_Int32
/*parameterIndex*/, const Date
& /*aData*/ ) throw(SQLException
, RuntimeException
)
196 ::dbtools::throwFunctionNotSupportedException( "XParameters::setDate", *this );
198 // -------------------------------------------------------------------------
200 void SAL_CALL
OEvoabPreparedStatement::setTime( sal_Int32
/*parameterIndex*/, const Time
& /*aVal*/ ) throw(SQLException
, RuntimeException
)
202 ::dbtools::throwFunctionNotSupportedException( "XParameters::setTime", *this );
204 // -------------------------------------------------------------------------
206 void SAL_CALL
OEvoabPreparedStatement::setTimestamp( sal_Int32
/*parameterIndex*/, const DateTime
& /*aVal*/ ) throw(SQLException
, RuntimeException
)
208 ::dbtools::throwFunctionNotSupportedException( "XParameters::setTimestamp", *this );
210 // -------------------------------------------------------------------------
212 void SAL_CALL
OEvoabPreparedStatement::setDouble( sal_Int32
/*parameterIndex*/, double /*x*/ ) throw(SQLException
, RuntimeException
)
214 ::dbtools::throwFunctionNotSupportedException( "XParameters::setDouble", *this );
217 // -------------------------------------------------------------------------
219 void SAL_CALL
OEvoabPreparedStatement::setFloat( sal_Int32
/*parameterIndex*/, float /*x*/ ) throw(SQLException
, RuntimeException
)
221 ::dbtools::throwFunctionNotSupportedException( "XParameters::setFloat", *this );
223 // -------------------------------------------------------------------------
225 void SAL_CALL
OEvoabPreparedStatement::setInt( sal_Int32
/*parameterIndex*/, sal_Int32
/*x*/ ) throw(SQLException
, RuntimeException
)
227 ::dbtools::throwFunctionNotSupportedException( "XParameters::setInt", *this );
229 // -------------------------------------------------------------------------
231 void SAL_CALL
OEvoabPreparedStatement::setLong( sal_Int32
/*parameterIndex*/, sal_Int64
/*aVal*/ ) throw(SQLException
, RuntimeException
)
233 ::dbtools::throwFunctionNotSupportedException( "XParameters::setLong", *this );
235 // -------------------------------------------------------------------------
237 void SAL_CALL
OEvoabPreparedStatement::setNull( sal_Int32
/*parameterIndex*/, sal_Int32
/*sqlType*/ ) throw(SQLException
, RuntimeException
)
239 ::dbtools::throwFunctionNotSupportedException( "XParameters::setNull", *this );
241 // -------------------------------------------------------------------------
243 void SAL_CALL
OEvoabPreparedStatement::setClob( sal_Int32
/*parameterIndex*/, const Reference
< XClob
>& /*x*/ ) throw(SQLException
, RuntimeException
)
245 ::dbtools::throwFunctionNotSupportedException( "XParameters::setClob", *this );
247 // -------------------------------------------------------------------------
249 void SAL_CALL
OEvoabPreparedStatement::setBlob( sal_Int32
/*parameterIndex*/, const Reference
< XBlob
>& /*x*/ ) throw(SQLException
, RuntimeException
)
251 ::dbtools::throwFunctionNotSupportedException( "XParameters::setBlob", *this );
253 // -------------------------------------------------------------------------
255 void SAL_CALL
OEvoabPreparedStatement::setArray( sal_Int32
/*parameterIndex*/, const Reference
< XArray
>& /*x*/ ) throw(SQLException
, RuntimeException
)
257 ::dbtools::throwFunctionNotSupportedException( "XParameters::setArray", *this );
259 // -------------------------------------------------------------------------
261 void SAL_CALL
OEvoabPreparedStatement::setRef( sal_Int32
/*parameterIndex*/, const Reference
< XRef
>& /*x*/ ) throw(SQLException
, RuntimeException
)
263 ::dbtools::throwFunctionNotSupportedException( "XParameters::setRef", *this );
265 // -------------------------------------------------------------------------
267 void SAL_CALL
OEvoabPreparedStatement::setObjectWithInfo( sal_Int32
/*parameterIndex*/, const Any
& /*x*/, sal_Int32
/*sqlType*/, sal_Int32
/*scale*/ ) throw(SQLException
, RuntimeException
)
269 ::dbtools::throwFunctionNotSupportedException( "XParameters::setObjectWithInfo", *this );
271 // -------------------------------------------------------------------------
273 void SAL_CALL
OEvoabPreparedStatement::setObjectNull( sal_Int32
/*parameterIndex*/, sal_Int32
/*sqlType*/, const ::rtl::OUString
& /*typeName*/ ) throw(SQLException
, RuntimeException
)
275 ::dbtools::throwFunctionNotSupportedException( "XParameters::setObjectNull", *this );
277 // -------------------------------------------------------------------------
279 void SAL_CALL
OEvoabPreparedStatement::setObject( sal_Int32 parameterIndex
, const Any
& x
) throw(SQLException
, RuntimeException
)
281 if(!::dbtools::implSetObject(this,parameterIndex
,x
))
283 const ::rtl::OUString
sError( getOwnConnection()->getResources().getResourceStringWithSubstitution(
284 STR_UNKNOWN_PARA_TYPE
,
285 "$position$", ::rtl::OUString::valueOf(parameterIndex
)
287 ::dbtools::throwGenericSQLException(sError
,*this);
290 // -------------------------------------------------------------------------
292 void SAL_CALL
OEvoabPreparedStatement::setShort( sal_Int32
/*parameterIndex*/, sal_Int16
/*x*/ ) throw(SQLException
, RuntimeException
)
294 ::dbtools::throwFunctionNotSupportedException( "XParameters::setShort", *this );
296 // -------------------------------------------------------------------------
298 void SAL_CALL
OEvoabPreparedStatement::setBytes( sal_Int32
/*parameterIndex*/, const Sequence
< sal_Int8
>& /*x*/ ) throw(SQLException
, RuntimeException
)
300 ::dbtools::throwFunctionNotSupportedException( "XParameters::setBytes", *this );
302 // -------------------------------------------------------------------------
305 void SAL_CALL
OEvoabPreparedStatement::setCharacterStream( sal_Int32
/*parameterIndex*/, const Reference
< XInputStream
>& /*x*/, sal_Int32
/*length*/ ) throw(SQLException
, RuntimeException
)
307 ::dbtools::throwFunctionNotSupportedException( "XParameters::setCharacterStream", *this );
309 // -------------------------------------------------------------------------
311 void SAL_CALL
OEvoabPreparedStatement::setBinaryStream( sal_Int32
/*parameterIndex*/, const Reference
< XInputStream
>& /*x*/, sal_Int32
/*length*/ ) throw(SQLException
, RuntimeException
)
313 ::dbtools::throwFunctionNotSupportedException( "XParameters::setBinaryStream", *this );
315 // -------------------------------------------------------------------------
317 void SAL_CALL
OEvoabPreparedStatement::clearParameters( ) throw(SQLException
, RuntimeException
)
320 // -----------------------------------------------------------------------------
321 Reference
< XResultSet
> SAL_CALL
OEvoabPreparedStatement::getResultSet( ) throw(SQLException
, RuntimeException
)
325 // -----------------------------------------------------------------------------
326 sal_Int32 SAL_CALL
OEvoabPreparedStatement::getUpdateCount( ) throw(SQLException
, RuntimeException
)
330 // -----------------------------------------------------------------------------
331 sal_Bool SAL_CALL
OEvoabPreparedStatement::getMoreResults( ) throw(SQLException
, RuntimeException
)
335 // -----------------------------------------------------------------------------