1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_connectivity.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include <stdio.h>
28*b1cdbd2cSJim Jagielski #include "connectivity/sdbcx/VColumn.hxx"
29*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
30*b1cdbd2cSJim Jagielski #include "file/FPreparedStatement.hxx"
31*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/DataType.hpp>
32*b1cdbd2cSJim Jagielski #include "file/FResultSetMetaData.hxx"
33*b1cdbd2cSJim Jagielski #include <cppuhelper/typeprovider.hxx>
34*b1cdbd2cSJim Jagielski #include <comphelper/sequence.hxx>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/DisposedException.hpp>
36*b1cdbd2cSJim Jagielski #include "connectivity/dbconversion.hxx"
37*b1cdbd2cSJim Jagielski #include "connectivity/dbexception.hxx"
38*b1cdbd2cSJim Jagielski #include "connectivity/dbtools.hxx"
39*b1cdbd2cSJim Jagielski #include "connectivity/PColumn.hxx"
40*b1cdbd2cSJim Jagielski #include "diagnose_ex.h"
41*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/ColumnValue.hpp>
43*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
44*b1cdbd2cSJim Jagielski #include "resource/file_res.hrc"
45*b1cdbd2cSJim Jagielski #include <rtl/logfile.hxx>
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski using namespace connectivity;
48*b1cdbd2cSJim Jagielski using namespace comphelper;
49*b1cdbd2cSJim Jagielski using namespace ::dbtools;
50*b1cdbd2cSJim Jagielski using namespace connectivity::file;
51*b1cdbd2cSJim Jagielski using namespace com::sun::star::uno;
52*b1cdbd2cSJim Jagielski using namespace com::sun::star::lang;
53*b1cdbd2cSJim Jagielski using namespace com::sun::star::beans;
54*b1cdbd2cSJim Jagielski using namespace com::sun::star::sdbc;
55*b1cdbd2cSJim Jagielski using namespace com::sun::star::sdbcx;
56*b1cdbd2cSJim Jagielski using namespace com::sun::star::container;
57*b1cdbd2cSJim Jagielski using namespace com::sun::star::util;
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielski IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbc.driver.file.PreparedStatement","com.sun.star.sdbc.PreparedStatement");
60*b1cdbd2cSJim Jagielski
DBG_NAME(file_OPreparedStatement)61*b1cdbd2cSJim Jagielski DBG_NAME( file_OPreparedStatement )
62*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
63*b1cdbd2cSJim Jagielski OPreparedStatement::OPreparedStatement( OConnection* _pConnection)
64*b1cdbd2cSJim Jagielski : OStatement_BASE2( _pConnection )
65*b1cdbd2cSJim Jagielski ,m_pResultSet(NULL)
66*b1cdbd2cSJim Jagielski {
67*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::OPreparedStatement" );
68*b1cdbd2cSJim Jagielski DBG_CTOR( file_OPreparedStatement, NULL );
69*b1cdbd2cSJim Jagielski }
70*b1cdbd2cSJim Jagielski
71*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
~OPreparedStatement()72*b1cdbd2cSJim Jagielski OPreparedStatement::~OPreparedStatement()
73*b1cdbd2cSJim Jagielski {
74*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::~OPreparedStatement" );
75*b1cdbd2cSJim Jagielski DBG_DTOR( file_OPreparedStatement, NULL );
76*b1cdbd2cSJim Jagielski }
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
disposing()79*b1cdbd2cSJim Jagielski void OPreparedStatement::disposing()
80*b1cdbd2cSJim Jagielski {
81*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::disposing" );
82*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard(m_aMutex);
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski clearMyResultSet();
85*b1cdbd2cSJim Jagielski OStatement_BASE2::disposing();
86*b1cdbd2cSJim Jagielski
87*b1cdbd2cSJim Jagielski if(m_pResultSet)
88*b1cdbd2cSJim Jagielski {
89*b1cdbd2cSJim Jagielski m_pResultSet->release();
90*b1cdbd2cSJim Jagielski m_pResultSet = NULL;
91*b1cdbd2cSJim Jagielski }
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielski m_xParamColumns = NULL;
94*b1cdbd2cSJim Jagielski m_xMetaData.clear();
95*b1cdbd2cSJim Jagielski if(m_aParameterRow.isValid())
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski m_aParameterRow->get().clear();
98*b1cdbd2cSJim Jagielski m_aParameterRow = NULL;
99*b1cdbd2cSJim Jagielski }
100*b1cdbd2cSJim Jagielski
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski }
103*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
construct(const::rtl::OUString & sql)104*b1cdbd2cSJim Jagielski void OPreparedStatement::construct(const ::rtl::OUString& sql) throw(SQLException, RuntimeException)
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::construct" );
107*b1cdbd2cSJim Jagielski OStatement_Base::construct(sql);
108*b1cdbd2cSJim Jagielski
109*b1cdbd2cSJim Jagielski m_aParameterRow = new OValueRefVector();
110*b1cdbd2cSJim Jagielski m_aParameterRow->get().push_back(new ORowSetValueDecorator(sal_Int32(0)) );
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski Reference<XIndexAccess> xNames(m_xColNames,UNO_QUERY);
113*b1cdbd2cSJim Jagielski
114*b1cdbd2cSJim Jagielski if ( m_aSQLIterator.getStatementType() == SQL_STATEMENT_SELECT )
115*b1cdbd2cSJim Jagielski m_xParamColumns = m_aSQLIterator.getParameters();
116*b1cdbd2cSJim Jagielski else
117*b1cdbd2cSJim Jagielski {
118*b1cdbd2cSJim Jagielski m_xParamColumns = new OSQLColumns();
119*b1cdbd2cSJim Jagielski // describe all parameters need for the resultset
120*b1cdbd2cSJim Jagielski describeParameter();
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski OValueRefRow aTemp;
124*b1cdbd2cSJim Jagielski OResultSet::setBoundedColumns(m_aEvaluateRow,aTemp,m_xParamColumns,xNames,sal_False,m_xDBMetaData,m_aColMapping);
125*b1cdbd2cSJim Jagielski
126*b1cdbd2cSJim Jagielski m_pResultSet = createResultSet();
127*b1cdbd2cSJim Jagielski m_pResultSet->acquire();
128*b1cdbd2cSJim Jagielski m_xResultSet = Reference<XResultSet>(m_pResultSet);
129*b1cdbd2cSJim Jagielski initializeResultSet(m_pResultSet);
130*b1cdbd2cSJim Jagielski }
131*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
132*b1cdbd2cSJim Jagielski
queryInterface(const Type & rType)133*b1cdbd2cSJim Jagielski Any SAL_CALL OPreparedStatement::queryInterface( const Type & rType ) throw(RuntimeException)
134*b1cdbd2cSJim Jagielski {
135*b1cdbd2cSJim Jagielski //RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::queryInterface" );
136*b1cdbd2cSJim Jagielski Any aRet = OStatement_BASE2::queryInterface(rType);
137*b1cdbd2cSJim Jagielski return aRet.hasValue() ? aRet : ::cppu::queryInterface( rType,
138*b1cdbd2cSJim Jagielski static_cast< XPreparedStatement*>(this),
139*b1cdbd2cSJim Jagielski static_cast< XParameters*>(this),
140*b1cdbd2cSJim Jagielski static_cast< XResultSetMetaDataSupplier*>(this));
141*b1cdbd2cSJim Jagielski }
142*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getTypes()143*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL OPreparedStatement::getTypes( ) throw(::com::sun::star::uno::RuntimeException)
144*b1cdbd2cSJim Jagielski {
145*b1cdbd2cSJim Jagielski //RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::getTypes" );
146*b1cdbd2cSJim Jagielski ::cppu::OTypeCollection aTypes( ::getCppuType( (const ::com::sun::star::uno::Reference< XPreparedStatement > *)0 ),
147*b1cdbd2cSJim Jagielski ::getCppuType( (const ::com::sun::star::uno::Reference< XParameters > *)0 ),
148*b1cdbd2cSJim Jagielski ::getCppuType( (const ::com::sun::star::uno::Reference< XResultSetMetaDataSupplier > *)0 ));
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski return ::comphelper::concatSequences(aTypes.getTypes(),OStatement_BASE2::getTypes());
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
153*b1cdbd2cSJim Jagielski
getMetaData()154*b1cdbd2cSJim Jagielski Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData( ) throw(SQLException, RuntimeException)
155*b1cdbd2cSJim Jagielski {
156*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::getMetaData" );
157*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
158*b1cdbd2cSJim Jagielski checkDisposed(OStatement_BASE::rBHelper.bDisposed);
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielski if(!m_xMetaData.is())
162*b1cdbd2cSJim Jagielski m_xMetaData = new OResultSetMetaData(m_aSQLIterator.getSelectColumns(),m_aSQLIterator.getTables().begin()->first,m_pTable);
163*b1cdbd2cSJim Jagielski return m_xMetaData;
164*b1cdbd2cSJim Jagielski }
165*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
166*b1cdbd2cSJim Jagielski
close()167*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::close( ) throw(SQLException, RuntimeException)
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::close" );
170*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
171*b1cdbd2cSJim Jagielski checkDisposed(OStatement_BASE::rBHelper.bDisposed);
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski clearMyResultSet();
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
177*b1cdbd2cSJim Jagielski
execute()178*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OPreparedStatement::execute( ) throw(SQLException, RuntimeException)
179*b1cdbd2cSJim Jagielski {
180*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::execute" );
181*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
182*b1cdbd2cSJim Jagielski checkDisposed(OStatement_BASE::rBHelper.bDisposed);
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski initResultSet();
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski return m_aSQLIterator.getStatementType() == SQL_STATEMENT_SELECT;
187*b1cdbd2cSJim Jagielski }
188*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
189*b1cdbd2cSJim Jagielski
executeUpdate()190*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OPreparedStatement::executeUpdate( ) throw(SQLException, RuntimeException)
191*b1cdbd2cSJim Jagielski {
192*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::executeUpdate" );
193*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
194*b1cdbd2cSJim Jagielski checkDisposed(OStatement_BASE::rBHelper.bDisposed);
195*b1cdbd2cSJim Jagielski
196*b1cdbd2cSJim Jagielski initResultSet();
197*b1cdbd2cSJim Jagielski
198*b1cdbd2cSJim Jagielski return m_pResultSet ? m_pResultSet->getRowCountResult() : sal_Int32(0);
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
201*b1cdbd2cSJim Jagielski
setString(sal_Int32 parameterIndex,const::rtl::OUString & x)202*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setString( sal_Int32 parameterIndex, const ::rtl::OUString& x ) throw(SQLException, RuntimeException)
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setString" );
205*b1cdbd2cSJim Jagielski setParameter(parameterIndex,x);
206*b1cdbd2cSJim Jagielski }
207*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
208*b1cdbd2cSJim Jagielski
getConnection()209*b1cdbd2cSJim Jagielski Reference< XConnection > SAL_CALL OPreparedStatement::getConnection( ) throw(SQLException, RuntimeException)
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::getConnection" );
212*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
213*b1cdbd2cSJim Jagielski checkDisposed(OStatement_BASE::rBHelper.bDisposed);
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski return (Reference< XConnection >)m_pConnection;
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
218*b1cdbd2cSJim Jagielski
executeQuery()219*b1cdbd2cSJim Jagielski Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery( ) throw(SQLException, RuntimeException)
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::executeQuery" );
222*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
223*b1cdbd2cSJim Jagielski checkDisposed(OStatement_BASE::rBHelper.bDisposed);
224*b1cdbd2cSJim Jagielski
225*b1cdbd2cSJim Jagielski return initResultSet();
226*b1cdbd2cSJim Jagielski }
227*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
228*b1cdbd2cSJim Jagielski
setBoolean(sal_Int32 parameterIndex,sal_Bool x)229*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setBoolean( sal_Int32 parameterIndex, sal_Bool x ) throw(SQLException, RuntimeException)
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setBoolean" );
232*b1cdbd2cSJim Jagielski setParameter(parameterIndex,x);
233*b1cdbd2cSJim Jagielski }
234*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
setByte(sal_Int32 parameterIndex,sal_Int8 x)235*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setByte( sal_Int32 parameterIndex, sal_Int8 x ) throw(SQLException, RuntimeException)
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setByte" );
238*b1cdbd2cSJim Jagielski setParameter(parameterIndex,x);
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
241*b1cdbd2cSJim Jagielski
setDate(sal_Int32 parameterIndex,const Date & aData)242*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setDate( sal_Int32 parameterIndex, const Date& aData ) throw(SQLException, RuntimeException)
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setDate" );
245*b1cdbd2cSJim Jagielski setParameter(parameterIndex,DBTypeConversion::toDouble(aData));
246*b1cdbd2cSJim Jagielski }
247*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
setTime(sal_Int32 parameterIndex,const Time & aVal)248*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setTime( sal_Int32 parameterIndex, const Time& aVal ) throw(SQLException, RuntimeException)
249*b1cdbd2cSJim Jagielski {
250*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setTime" );
251*b1cdbd2cSJim Jagielski setParameter(parameterIndex,DBTypeConversion::toDouble(aVal));
252*b1cdbd2cSJim Jagielski }
253*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
254*b1cdbd2cSJim Jagielski
setTimestamp(sal_Int32 parameterIndex,const DateTime & aVal)255*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setTimestamp( sal_Int32 parameterIndex, const DateTime& aVal ) throw(SQLException, RuntimeException)
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setTimestamp" );
258*b1cdbd2cSJim Jagielski setParameter(parameterIndex,DBTypeConversion::toDouble(aVal));
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
261*b1cdbd2cSJim Jagielski
setDouble(sal_Int32 parameterIndex,double x)262*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setDouble( sal_Int32 parameterIndex, double x ) throw(SQLException, RuntimeException)
263*b1cdbd2cSJim Jagielski {
264*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setDouble" );
265*b1cdbd2cSJim Jagielski setParameter(parameterIndex,x);
266*b1cdbd2cSJim Jagielski }
267*b1cdbd2cSJim Jagielski
268*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
269*b1cdbd2cSJim Jagielski
setFloat(sal_Int32 parameterIndex,float x)270*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setFloat( sal_Int32 parameterIndex, float x ) throw(SQLException, RuntimeException)
271*b1cdbd2cSJim Jagielski {
272*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setFloat" );
273*b1cdbd2cSJim Jagielski setParameter(parameterIndex,x);
274*b1cdbd2cSJim Jagielski }
275*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
276*b1cdbd2cSJim Jagielski
setInt(sal_Int32 parameterIndex,sal_Int32 x)277*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setInt( sal_Int32 parameterIndex, sal_Int32 x ) throw(SQLException, RuntimeException)
278*b1cdbd2cSJim Jagielski {
279*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setInt" );
280*b1cdbd2cSJim Jagielski setParameter(parameterIndex,x);
281*b1cdbd2cSJim Jagielski }
282*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
283*b1cdbd2cSJim Jagielski
setLong(sal_Int32,sal_Int64)284*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setLong( sal_Int32 /*parameterIndex*/, sal_Int64 /*aVal*/ ) throw(SQLException, RuntimeException)
285*b1cdbd2cSJim Jagielski {
286*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setLong" );
287*b1cdbd2cSJim Jagielski throwFeatureNotImplementedException( "XParameters::setLong", *this );
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
290*b1cdbd2cSJim Jagielski
setNull(sal_Int32 parameterIndex,sal_Int32)291*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setNull( sal_Int32 parameterIndex, sal_Int32 /*sqlType*/ ) throw(SQLException, RuntimeException)
292*b1cdbd2cSJim Jagielski {
293*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setNull" );
294*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
295*b1cdbd2cSJim Jagielski checkAndResizeParameters(parameterIndex);
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski if ( m_aAssignValues.isValid() )
298*b1cdbd2cSJim Jagielski (m_aAssignValues->get())[m_aParameterIndexes[parameterIndex]]->setNull();
299*b1cdbd2cSJim Jagielski else
300*b1cdbd2cSJim Jagielski (m_aParameterRow->get())[parameterIndex]->setNull();
301*b1cdbd2cSJim Jagielski }
302*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
303*b1cdbd2cSJim Jagielski
setClob(sal_Int32,const Reference<XClob> &)304*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setClob( sal_Int32 /*parameterIndex*/, const Reference< XClob >& /*x*/ ) throw(SQLException, RuntimeException)
305*b1cdbd2cSJim Jagielski {
306*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setClob" );
307*b1cdbd2cSJim Jagielski throwFeatureNotImplementedException( "XParameters::setClob", *this );
308*b1cdbd2cSJim Jagielski }
309*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
310*b1cdbd2cSJim Jagielski
setBlob(sal_Int32,const Reference<XBlob> &)311*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setBlob( sal_Int32 /*parameterIndex*/, const Reference< XBlob >& /*x*/ ) throw(SQLException, RuntimeException)
312*b1cdbd2cSJim Jagielski {
313*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setBlob" );
314*b1cdbd2cSJim Jagielski throwFeatureNotImplementedException( "XParameters::setBlob", *this );
315*b1cdbd2cSJim Jagielski }
316*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
317*b1cdbd2cSJim Jagielski
setArray(sal_Int32,const Reference<XArray> &)318*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setArray( sal_Int32 /*parameterIndex*/, const Reference< XArray >& /*x*/ ) throw(SQLException, RuntimeException)
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setArray" );
321*b1cdbd2cSJim Jagielski throwFeatureNotImplementedException( "XParameters::setArray", *this );
322*b1cdbd2cSJim Jagielski }
323*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
324*b1cdbd2cSJim Jagielski
setRef(sal_Int32,const Reference<XRef> &)325*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setRef( sal_Int32 /*parameterIndex*/, const Reference< XRef >& /*x*/ ) throw(SQLException, RuntimeException)
326*b1cdbd2cSJim Jagielski {
327*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setRef" );
328*b1cdbd2cSJim Jagielski throwFeatureNotImplementedException( "XParameters::setRef", *this );
329*b1cdbd2cSJim Jagielski }
330*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
331*b1cdbd2cSJim Jagielski
setObjectWithInfo(sal_Int32 parameterIndex,const Any & x,sal_Int32 sqlType,sal_Int32 scale)332*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, const Any& x, sal_Int32 sqlType, sal_Int32 scale ) throw(SQLException, RuntimeException)
333*b1cdbd2cSJim Jagielski {
334*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setObjectWithInfo" );
335*b1cdbd2cSJim Jagielski switch(sqlType)
336*b1cdbd2cSJim Jagielski {
337*b1cdbd2cSJim Jagielski case DataType::DECIMAL:
338*b1cdbd2cSJim Jagielski case DataType::NUMERIC:
339*b1cdbd2cSJim Jagielski setString(parameterIndex,::comphelper::getString(x));
340*b1cdbd2cSJim Jagielski break;
341*b1cdbd2cSJim Jagielski default:
342*b1cdbd2cSJim Jagielski ::dbtools::setObjectWithInfo(this,parameterIndex,x,sqlType,scale);
343*b1cdbd2cSJim Jagielski break;
344*b1cdbd2cSJim Jagielski }
345*b1cdbd2cSJim Jagielski }
346*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
347*b1cdbd2cSJim Jagielski
setObjectNull(sal_Int32 parameterIndex,sal_Int32 sqlType,const::rtl::OUString &)348*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& /*typeName*/ ) throw(SQLException, RuntimeException)
349*b1cdbd2cSJim Jagielski {
350*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setObjectNull" );
351*b1cdbd2cSJim Jagielski setNull(parameterIndex,sqlType);
352*b1cdbd2cSJim Jagielski }
353*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
354*b1cdbd2cSJim Jagielski
setObject(sal_Int32 parameterIndex,const Any & x)355*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setObject( sal_Int32 parameterIndex, const Any& x ) throw(SQLException, RuntimeException)
356*b1cdbd2cSJim Jagielski {
357*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setObject" );
358*b1cdbd2cSJim Jagielski if(!::dbtools::implSetObject(this,parameterIndex,x))
359*b1cdbd2cSJim Jagielski {
360*b1cdbd2cSJim Jagielski const ::rtl::OUString sError( m_pConnection->getResources().getResourceStringWithSubstitution(
361*b1cdbd2cSJim Jagielski STR_UNKNOWN_PARA_TYPE,
362*b1cdbd2cSJim Jagielski "$position$", ::rtl::OUString::valueOf(parameterIndex)
363*b1cdbd2cSJim Jagielski ) );
364*b1cdbd2cSJim Jagielski ::dbtools::throwGenericSQLException(sError,*this);
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski // setObject (parameterIndex, x, sqlType, 0);
367*b1cdbd2cSJim Jagielski }
368*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
369*b1cdbd2cSJim Jagielski
setShort(sal_Int32 parameterIndex,sal_Int16 x)370*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setShort( sal_Int32 parameterIndex, sal_Int16 x ) throw(SQLException, RuntimeException)
371*b1cdbd2cSJim Jagielski {
372*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setShort" );
373*b1cdbd2cSJim Jagielski setParameter(parameterIndex,x);
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
376*b1cdbd2cSJim Jagielski
setBytes(sal_Int32 parameterIndex,const Sequence<sal_Int8> & x)377*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setBytes( sal_Int32 parameterIndex, const Sequence< sal_Int8 >& x ) throw(SQLException, RuntimeException)
378*b1cdbd2cSJim Jagielski {
379*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setBytes" );
380*b1cdbd2cSJim Jagielski setParameter(parameterIndex,x);
381*b1cdbd2cSJim Jagielski }
382*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
383*b1cdbd2cSJim Jagielski
384*b1cdbd2cSJim Jagielski
setCharacterStream(sal_Int32 parameterIndex,const Reference<::com::sun::star::io::XInputStream> & x,sal_Int32 length)385*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setCharacterStream( sal_Int32 parameterIndex, const Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(SQLException, RuntimeException)
386*b1cdbd2cSJim Jagielski {
387*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setCharacterStream" );
388*b1cdbd2cSJim Jagielski setBinaryStream(parameterIndex,x,length );
389*b1cdbd2cSJim Jagielski }
390*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
391*b1cdbd2cSJim Jagielski
setBinaryStream(sal_Int32 parameterIndex,const Reference<::com::sun::star::io::XInputStream> & x,sal_Int32 length)392*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::setBinaryStream( sal_Int32 parameterIndex, const Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(SQLException, RuntimeException)
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setBinaryStream" );
395*b1cdbd2cSJim Jagielski if(!x.is())
396*b1cdbd2cSJim Jagielski ::dbtools::throwFunctionSequenceException(*this);
397*b1cdbd2cSJim Jagielski
398*b1cdbd2cSJim Jagielski Sequence<sal_Int8> aSeq;
399*b1cdbd2cSJim Jagielski x->readBytes(aSeq,length);
400*b1cdbd2cSJim Jagielski setParameter(parameterIndex,aSeq);
401*b1cdbd2cSJim Jagielski }
402*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
403*b1cdbd2cSJim Jagielski
clearParameters()404*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::clearParameters( ) throw(SQLException, RuntimeException)
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::clearParameters" );
407*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
408*b1cdbd2cSJim Jagielski checkDisposed(OStatement_BASE::rBHelper.bDisposed);
409*b1cdbd2cSJim Jagielski
410*b1cdbd2cSJim Jagielski m_aParameterRow->get().clear();
411*b1cdbd2cSJim Jagielski m_aParameterRow->get().push_back(new ORowSetValueDecorator(sal_Int32(0)) );
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
createResultSet()414*b1cdbd2cSJim Jagielski OResultSet* OPreparedStatement::createResultSet()
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::createResultSet" );
417*b1cdbd2cSJim Jagielski return new OResultSet(this,m_aSQLIterator);
418*b1cdbd2cSJim Jagielski }
419*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
initResultSet()420*b1cdbd2cSJim Jagielski Reference<XResultSet> OPreparedStatement::initResultSet()
421*b1cdbd2cSJim Jagielski {
422*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::initResultSet" );
423*b1cdbd2cSJim Jagielski m_pResultSet->clear();
424*b1cdbd2cSJim Jagielski Reference<XResultSet> xRs(m_pResultSet);
425*b1cdbd2cSJim Jagielski
426*b1cdbd2cSJim Jagielski // check if we got enough paramters
427*b1cdbd2cSJim Jagielski if ( (m_aParameterRow.isValid() && ( m_aParameterRow->get().size() -1 ) < m_xParamColumns->get().size()) ||
428*b1cdbd2cSJim Jagielski (m_xParamColumns.isValid() && !m_aParameterRow.isValid() && !m_aParameterRow->get().empty()) )
429*b1cdbd2cSJim Jagielski m_pConnection->throwGenericSQLException(STR_INVALID_PARA_COUNT,*this);
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski m_pResultSet->OpenImpl();
432*b1cdbd2cSJim Jagielski m_pResultSet->setMetaData(getMetaData());
433*b1cdbd2cSJim Jagielski
434*b1cdbd2cSJim Jagielski return xRs;
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
acquire()437*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::acquire() throw()
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski OStatement_BASE2::acquire();
440*b1cdbd2cSJim Jagielski }
441*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
release()442*b1cdbd2cSJim Jagielski void SAL_CALL OPreparedStatement::release() throw()
443*b1cdbd2cSJim Jagielski {
444*b1cdbd2cSJim Jagielski OStatement_BASE2::release();
445*b1cdbd2cSJim Jagielski }
446*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
checkAndResizeParameters(sal_Int32 parameterIndex)447*b1cdbd2cSJim Jagielski void OPreparedStatement::checkAndResizeParameters(sal_Int32 parameterIndex)
448*b1cdbd2cSJim Jagielski {
449*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::checkAndResizeParameters" );
450*b1cdbd2cSJim Jagielski ::connectivity::checkDisposed(OStatement_BASE::rBHelper.bDisposed);
451*b1cdbd2cSJim Jagielski if ( m_aAssignValues.isValid() && (parameterIndex < 1 || parameterIndex >= static_cast<sal_Int32>(m_aParameterIndexes.size())) )
452*b1cdbd2cSJim Jagielski throwInvalidIndexException(*this);
453*b1cdbd2cSJim Jagielski else if ( static_cast<sal_Int32>((m_aParameterRow->get()).size()) <= parameterIndex )
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski sal_Int32 i = m_aParameterRow->get().size();
456*b1cdbd2cSJim Jagielski (m_aParameterRow->get()).resize(parameterIndex+1);
457*b1cdbd2cSJim Jagielski for ( ;i <= parameterIndex+1; ++i )
458*b1cdbd2cSJim Jagielski {
459*b1cdbd2cSJim Jagielski if ( !(m_aParameterRow->get())[i].isValid() )
460*b1cdbd2cSJim Jagielski (m_aParameterRow->get())[i] = new ORowSetValueDecorator;
461*b1cdbd2cSJim Jagielski }
462*b1cdbd2cSJim Jagielski }
463*b1cdbd2cSJim Jagielski }
464*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
setParameter(sal_Int32 parameterIndex,const ORowSetValue & x)465*b1cdbd2cSJim Jagielski void OPreparedStatement::setParameter(sal_Int32 parameterIndex, const ORowSetValue& x)
466*b1cdbd2cSJim Jagielski {
467*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::setParameter" );
468*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
469*b1cdbd2cSJim Jagielski checkAndResizeParameters(parameterIndex);
470*b1cdbd2cSJim Jagielski
471*b1cdbd2cSJim Jagielski if(m_aAssignValues.isValid())
472*b1cdbd2cSJim Jagielski *(m_aAssignValues->get())[m_aParameterIndexes[parameterIndex]] = x;
473*b1cdbd2cSJim Jagielski else
474*b1cdbd2cSJim Jagielski *((m_aParameterRow->get())[parameterIndex]) = x;
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
AddParameter(OSQLParseNode * pParameter,const Reference<XPropertySet> & _xCol)477*b1cdbd2cSJim Jagielski sal_uInt32 OPreparedStatement::AddParameter(OSQLParseNode * pParameter, const Reference<XPropertySet>& _xCol)
478*b1cdbd2cSJim Jagielski {
479*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::AddParameter" );
480*b1cdbd2cSJim Jagielski OSL_UNUSED( pParameter );
481*b1cdbd2cSJim Jagielski OSL_ENSURE(SQL_ISRULE(pParameter,parameter),"OResultSet::AddParameter: Argument ist kein Parameter");
482*b1cdbd2cSJim Jagielski OSL_ENSURE(pParameter->count() > 0,"OResultSet: Fehler im Parse Tree");
483*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
484*b1cdbd2cSJim Jagielski OSQLParseNode * pMark = pParameter->getChild(0);
485*b1cdbd2cSJim Jagielski OSL_UNUSED( pMark );
486*b1cdbd2cSJim Jagielski #endif
487*b1cdbd2cSJim Jagielski
488*b1cdbd2cSJim Jagielski ::rtl::OUString sParameterName;
489*b1cdbd2cSJim Jagielski // Parameter-Column aufsetzen:
490*b1cdbd2cSJim Jagielski sal_Int32 eType = DataType::VARCHAR;
491*b1cdbd2cSJim Jagielski sal_uInt32 nPrecision = 255;
492*b1cdbd2cSJim Jagielski sal_Int32 nScale = 0;
493*b1cdbd2cSJim Jagielski sal_Int32 nNullable = ColumnValue::NULLABLE;
494*b1cdbd2cSJim Jagielski
495*b1cdbd2cSJim Jagielski if (_xCol.is())
496*b1cdbd2cSJim Jagielski {
497*b1cdbd2cSJim Jagielski // Typ, Precision, Scale ... der angegebenen Column verwenden,
498*b1cdbd2cSJim Jagielski // denn dieser Column wird der Wert zugewiesen bzw. mit dieser
499*b1cdbd2cSJim Jagielski // Column wird der Wert verglichen.
500*b1cdbd2cSJim Jagielski _xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE)) >>= eType;
501*b1cdbd2cSJim Jagielski _xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION)) >>= nPrecision;
502*b1cdbd2cSJim Jagielski _xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE)) >>= nScale;
503*b1cdbd2cSJim Jagielski _xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE)) >>= nNullable;
504*b1cdbd2cSJim Jagielski _xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)) >>= sParameterName;
505*b1cdbd2cSJim Jagielski }
506*b1cdbd2cSJim Jagielski
507*b1cdbd2cSJim Jagielski Reference<XPropertySet> xParaColumn = new connectivity::parse::OParseColumn(sParameterName
508*b1cdbd2cSJim Jagielski ,::rtl::OUString()
509*b1cdbd2cSJim Jagielski ,::rtl::OUString()
510*b1cdbd2cSJim Jagielski ,::rtl::OUString()
511*b1cdbd2cSJim Jagielski ,nNullable
512*b1cdbd2cSJim Jagielski ,nPrecision
513*b1cdbd2cSJim Jagielski ,nScale
514*b1cdbd2cSJim Jagielski ,eType
515*b1cdbd2cSJim Jagielski ,sal_False
516*b1cdbd2cSJim Jagielski ,sal_False
517*b1cdbd2cSJim Jagielski ,m_aSQLIterator.isCaseSensitive());
518*b1cdbd2cSJim Jagielski m_xParamColumns->get().push_back(xParaColumn);
519*b1cdbd2cSJim Jagielski return m_xParamColumns->get().size();
520*b1cdbd2cSJim Jagielski }
521*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
describeColumn(OSQLParseNode * _pParameter,OSQLParseNode * _pNode,const OSQLTable & _xTable)522*b1cdbd2cSJim Jagielski void OPreparedStatement::describeColumn(OSQLParseNode* _pParameter,OSQLParseNode* _pNode,const OSQLTable& _xTable)
523*b1cdbd2cSJim Jagielski {
524*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::describeColumn" );
525*b1cdbd2cSJim Jagielski Reference<XPropertySet> xProp;
526*b1cdbd2cSJim Jagielski if(SQL_ISRULE(_pNode,column_ref))
527*b1cdbd2cSJim Jagielski {
528*b1cdbd2cSJim Jagielski ::rtl::OUString sColumnName,sTableRange;
529*b1cdbd2cSJim Jagielski m_aSQLIterator.getColumnRange(_pNode,sColumnName,sTableRange);
530*b1cdbd2cSJim Jagielski if ( sColumnName.getLength() )
531*b1cdbd2cSJim Jagielski {
532*b1cdbd2cSJim Jagielski Reference<XNameAccess> xNameAccess = _xTable->getColumns();
533*b1cdbd2cSJim Jagielski if(xNameAccess->hasByName(sColumnName))
534*b1cdbd2cSJim Jagielski xNameAccess->getByName(sColumnName) >>= xProp;
535*b1cdbd2cSJim Jagielski AddParameter(_pParameter,xProp);
536*b1cdbd2cSJim Jagielski }
537*b1cdbd2cSJim Jagielski }
538*b1cdbd2cSJim Jagielski // else
539*b1cdbd2cSJim Jagielski // AddParameter(_pParameter,xProp);
540*b1cdbd2cSJim Jagielski }
541*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
describeParameter()542*b1cdbd2cSJim Jagielski void OPreparedStatement::describeParameter()
543*b1cdbd2cSJim Jagielski {
544*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::describeParameter" );
545*b1cdbd2cSJim Jagielski ::std::vector< OSQLParseNode*> aParseNodes;
546*b1cdbd2cSJim Jagielski scanParameter(m_pParseTree,aParseNodes);
547*b1cdbd2cSJim Jagielski if ( !aParseNodes.empty() )
548*b1cdbd2cSJim Jagielski {
549*b1cdbd2cSJim Jagielski // m_xParamColumns = new OSQLColumns();
550*b1cdbd2cSJim Jagielski const OSQLTables& xTabs = m_aSQLIterator.getTables();
551*b1cdbd2cSJim Jagielski if( !xTabs.empty() )
552*b1cdbd2cSJim Jagielski {
553*b1cdbd2cSJim Jagielski OSQLTable xTable = xTabs.begin()->second;
554*b1cdbd2cSJim Jagielski ::std::vector< OSQLParseNode*>::const_iterator aIter = aParseNodes.begin();
555*b1cdbd2cSJim Jagielski for (;aIter != aParseNodes.end();++aIter )
556*b1cdbd2cSJim Jagielski {
557*b1cdbd2cSJim Jagielski describeColumn(*aIter,(*aIter)->getParent()->getChild(0),xTable);
558*b1cdbd2cSJim Jagielski }
559*b1cdbd2cSJim Jagielski }
560*b1cdbd2cSJim Jagielski }
561*b1cdbd2cSJim Jagielski }
562*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
initializeResultSet(OResultSet * _pResult)563*b1cdbd2cSJim Jagielski void OPreparedStatement::initializeResultSet(OResultSet* _pResult)
564*b1cdbd2cSJim Jagielski {
565*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::initializeResultSet" );
566*b1cdbd2cSJim Jagielski OStatement_Base::initializeResultSet(_pResult);
567*b1cdbd2cSJim Jagielski
568*b1cdbd2cSJim Jagielski m_pResultSet->setParameterColumns(m_xParamColumns);
569*b1cdbd2cSJim Jagielski m_pResultSet->setParameterRow(m_aParameterRow);
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielski // Parameter substituieren (AssignValues und Kriterien):
572*b1cdbd2cSJim Jagielski if (!m_xParamColumns->get().empty())
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski // Zunaechst AssignValues
575*b1cdbd2cSJim Jagielski sal_uInt16 nParaCount=0; // gibt die aktuelle Anzahl der bisher gesetzen Parameter an
576*b1cdbd2cSJim Jagielski
577*b1cdbd2cSJim Jagielski // Nach zu substituierenden Parametern suchen:
578*b1cdbd2cSJim Jagielski size_t nCount = m_aAssignValues.isValid() ? m_aAssignValues->get().size() : 1; // 1 ist wichtig fuer die Kriterien
579*b1cdbd2cSJim Jagielski for (size_t j = 1; j < nCount; j++)
580*b1cdbd2cSJim Jagielski {
581*b1cdbd2cSJim Jagielski sal_uInt32 nParameter = (*m_aAssignValues).getParameterIndex(j);
582*b1cdbd2cSJim Jagielski if (nParameter == SQL_NO_PARAMETER)
583*b1cdbd2cSJim Jagielski continue; // dieser AssignValue ist kein Parameter
584*b1cdbd2cSJim Jagielski
585*b1cdbd2cSJim Jagielski ++nParaCount; // ab hier ist der Parameter gueltig
586*b1cdbd2cSJim Jagielski // Parameter ersetzen. Wenn Parameter nicht verfuegbar,
587*b1cdbd2cSJim Jagielski // Value auf NULL setzen.
588*b1cdbd2cSJim Jagielski // (*m_aAssignValues)[j] = (*m_aParameterRow)[(sal_uInt16)nParameter];
589*b1cdbd2cSJim Jagielski }
590*b1cdbd2cSJim Jagielski
591*b1cdbd2cSJim Jagielski if (m_aParameterRow.isValid() && (m_xParamColumns->get().size()+1) != m_aParameterRow->get().size() )
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski sal_Int32 i = m_aParameterRow->get().size();
594*b1cdbd2cSJim Jagielski sal_Int32 nParamColumns = m_xParamColumns->get().size()+1;
595*b1cdbd2cSJim Jagielski m_aParameterRow->get().resize(nParamColumns);
596*b1cdbd2cSJim Jagielski for ( ;i < nParamColumns; ++i )
597*b1cdbd2cSJim Jagielski {
598*b1cdbd2cSJim Jagielski if ( !(m_aParameterRow->get())[i].isValid() )
599*b1cdbd2cSJim Jagielski (m_aParameterRow->get())[i] = new ORowSetValueDecorator;
600*b1cdbd2cSJim Jagielski }
601*b1cdbd2cSJim Jagielski //m_aParameterRow->resize(m_xParamColumns->size()+1);
602*b1cdbd2cSJim Jagielski }
603*b1cdbd2cSJim Jagielski if (m_aParameterRow.isValid() && nParaCount < m_aParameterRow->get().size() )
604*b1cdbd2cSJim Jagielski {
605*b1cdbd2cSJim Jagielski
606*b1cdbd2cSJim Jagielski m_pSQLAnalyzer->bindParameterRow(m_aParameterRow);
607*b1cdbd2cSJim Jagielski }
608*b1cdbd2cSJim Jagielski }
609*b1cdbd2cSJim Jagielski }
610*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
parseParamterElem(const String & _sColumnName,OSQLParseNode * pRow_Value_Constructor_Elem)611*b1cdbd2cSJim Jagielski void OPreparedStatement::parseParamterElem(const String& _sColumnName,OSQLParseNode* pRow_Value_Constructor_Elem)
612*b1cdbd2cSJim Jagielski {
613*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OPreparedStatement::parseParamterElem" );
614*b1cdbd2cSJim Jagielski Reference<XPropertySet> xCol;
615*b1cdbd2cSJim Jagielski m_xColNames->getByName(_sColumnName) >>= xCol;
616*b1cdbd2cSJim Jagielski sal_Int32 nParameter = -1;
617*b1cdbd2cSJim Jagielski if(m_xParamColumns.isValid())
618*b1cdbd2cSJim Jagielski {
619*b1cdbd2cSJim Jagielski OSQLColumns::Vector::const_iterator aIter = find(m_xParamColumns->get().begin(),m_xParamColumns->get().end(),_sColumnName,::comphelper::UStringMixEqual(m_pTable->isCaseSensitive()));
620*b1cdbd2cSJim Jagielski if(aIter != m_xParamColumns->get().end())
621*b1cdbd2cSJim Jagielski nParameter = m_xParamColumns->get().size() - (m_xParamColumns->get().end() - aIter) + 1;// +1 because the rows start at 1
622*b1cdbd2cSJim Jagielski }
623*b1cdbd2cSJim Jagielski if(nParameter == -1)
624*b1cdbd2cSJim Jagielski nParameter = AddParameter(pRow_Value_Constructor_Elem,xCol);
625*b1cdbd2cSJim Jagielski // Nr. des Parameters in der Variablen merken:
626*b1cdbd2cSJim Jagielski SetAssignValue(_sColumnName, String(), sal_True, nParameter);
627*b1cdbd2cSJim Jagielski }
628*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
629*b1cdbd2cSJim Jagielski
630*b1cdbd2cSJim Jagielski
631