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 #ifndef _CONNECTIVITY_OBOUNPARAM_HXX_
24*b1cdbd2cSJim Jagielski #define _CONNECTIVITY_OBOUNPARAM_HXX_
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XInputStream.hpp>
27*b1cdbd2cSJim Jagielski #include "odbc/odbcbasedllapi.hxx"
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski namespace connectivity
30*b1cdbd2cSJim Jagielski {
31*b1cdbd2cSJim Jagielski 	namespace odbc
32*b1cdbd2cSJim Jagielski 	{
33*b1cdbd2cSJim Jagielski 		class OOO_DLLPUBLIC_ODBCBASE OBoundParam
34*b1cdbd2cSJim Jagielski 		{
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski 		public:
OBoundParam()37*b1cdbd2cSJim Jagielski 			OBoundParam()
38*b1cdbd2cSJim Jagielski 			{
39*b1cdbd2cSJim Jagielski 				paramLength = NULL;
40*b1cdbd2cSJim Jagielski 				binaryData	= NULL;
41*b1cdbd2cSJim Jagielski 				pA1=0;
42*b1cdbd2cSJim Jagielski 				pA2=0;
43*b1cdbd2cSJim Jagielski 				pB1=0;
44*b1cdbd2cSJim Jagielski 				pB2=0;
45*b1cdbd2cSJim Jagielski 				pC1=0;
46*b1cdbd2cSJim Jagielski 				pC2=0;
47*b1cdbd2cSJim Jagielski 				pS1=0;
48*b1cdbd2cSJim Jagielski 				pS2=0;
49*b1cdbd2cSJim Jagielski 			}
~OBoundParam()50*b1cdbd2cSJim Jagielski 			~OBoundParam()
51*b1cdbd2cSJim Jagielski 			{
52*b1cdbd2cSJim Jagielski 				delete [] binaryData;
53*b1cdbd2cSJim Jagielski 				delete [] paramLength;
54*b1cdbd2cSJim Jagielski 			}
55*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
56*b1cdbd2cSJim Jagielski 			// initialize
57*b1cdbd2cSJim Jagielski 			// Perform an necessary initialization
58*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
initialize()59*b1cdbd2cSJim Jagielski 			void initialize ()
60*b1cdbd2cSJim Jagielski 			{
61*b1cdbd2cSJim Jagielski 				// Allocate storage for the length.  Note - the length is
62*b1cdbd2cSJim Jagielski 				// stored in native format, and will have to be converted
63*b1cdbd2cSJim Jagielski 				// to a Java sal_Int32.  The jdbcodbc 'C' bridge provides an
64*b1cdbd2cSJim Jagielski 				// interface to do this.
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 				paramLength = new sal_Int8[4];
67*b1cdbd2cSJim Jagielski 			}
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
70*b1cdbd2cSJim Jagielski 			// allocBindDataBuffer
71*b1cdbd2cSJim Jagielski 			// Allocates and returns a new bind data buffer of the specified
72*b1cdbd2cSJim Jagielski 			// length
73*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
allocBindDataBuffer(sal_Int32 bufLen)74*b1cdbd2cSJim Jagielski 			sal_Int8* allocBindDataBuffer (sal_Int32 bufLen)
75*b1cdbd2cSJim Jagielski 			{
76*b1cdbd2cSJim Jagielski                 if ( binaryData )
77*b1cdbd2cSJim Jagielski                     delete [] binaryData;
78*b1cdbd2cSJim Jagielski 				binaryData = new sal_Int8[bufLen];
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 				// Reset the input stream, we are doing a new bind
81*b1cdbd2cSJim Jagielski 				setInputStream (NULL, 0);
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski 				return binaryData;
84*b1cdbd2cSJim Jagielski 			}
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
87*b1cdbd2cSJim Jagielski 			// getBindDataBuffer
88*b1cdbd2cSJim Jagielski 			// Returns the data buffer to be used when binding to a parameter
89*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
getBindDataBuffer()90*b1cdbd2cSJim Jagielski 			sal_Int8* getBindDataBuffer ()
91*b1cdbd2cSJim Jagielski 			{
92*b1cdbd2cSJim Jagielski 				return binaryData;
93*b1cdbd2cSJim Jagielski 			}
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
96*b1cdbd2cSJim Jagielski 			// getBindLengthBuffer
97*b1cdbd2cSJim Jagielski 			// Returns the length buffer to be used when binding to a parameter
98*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
getBindLengthBuffer()99*b1cdbd2cSJim Jagielski 			sal_Int8* getBindLengthBuffer ()
100*b1cdbd2cSJim Jagielski 			{
101*b1cdbd2cSJim Jagielski 				return paramLength;
102*b1cdbd2cSJim Jagielski 			}
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
105*b1cdbd2cSJim Jagielski 			// setInputStream
106*b1cdbd2cSJim Jagielski 			// Sets the input stream for the bound parameter
107*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
setInputStream(const::com::sun::star::uno::Reference<::com::sun::star::io::XInputStream> & inputStream,sal_Int32 len)108*b1cdbd2cSJim Jagielski             void setInputStream(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>& inputStream,
109*b1cdbd2cSJim Jagielski 								sal_Int32 len)
110*b1cdbd2cSJim Jagielski 			{
111*b1cdbd2cSJim Jagielski 				paramInputStream = inputStream;
112*b1cdbd2cSJim Jagielski 				paramInputStreamLen = len;
113*b1cdbd2cSJim Jagielski 			}
114*b1cdbd2cSJim Jagielski 
setSequence(const::com::sun::star::uno::Sequence<sal_Int8> & _aSequence)115*b1cdbd2cSJim Jagielski 			void setSequence(const ::com::sun::star::uno::Sequence< sal_Int8 >& _aSequence)
116*b1cdbd2cSJim Jagielski 			{
117*b1cdbd2cSJim Jagielski 				aSequence = _aSequence;
118*b1cdbd2cSJim Jagielski 			}
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
121*b1cdbd2cSJim Jagielski 			// getInputStream
122*b1cdbd2cSJim Jagielski 			// Gets the input stream for the bound parameter
123*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
getInputStream()124*b1cdbd2cSJim Jagielski             ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream> getInputStream ()
125*b1cdbd2cSJim Jagielski 			{
126*b1cdbd2cSJim Jagielski 				return paramInputStream;
127*b1cdbd2cSJim Jagielski 			}
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
130*b1cdbd2cSJim Jagielski 			// getInputStreamLen
131*b1cdbd2cSJim Jagielski 			// Gets the input stream length for the bound parameter
132*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
getInputStreamLen()133*b1cdbd2cSJim Jagielski 			sal_Int32 getInputStreamLen ()
134*b1cdbd2cSJim Jagielski 			{
135*b1cdbd2cSJim Jagielski 				return paramInputStreamLen;
136*b1cdbd2cSJim Jagielski 			}
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
139*b1cdbd2cSJim Jagielski 			// setSqlType
140*b1cdbd2cSJim Jagielski 			// Sets the Java sql type used to register an OUT parameter
141*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
142*b1cdbd2cSJim Jagielski 
setSqlType(sal_Int32 type)143*b1cdbd2cSJim Jagielski 			void setSqlType(sal_Int32 type)
144*b1cdbd2cSJim Jagielski 			{
145*b1cdbd2cSJim Jagielski 				sqlType = type;
146*b1cdbd2cSJim Jagielski 			}
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
149*b1cdbd2cSJim Jagielski 			// getSqlType
150*b1cdbd2cSJim Jagielski 			// Gets the Java sql type used to register an OUT parameter
151*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
152*b1cdbd2cSJim Jagielski 
getSqlType()153*b1cdbd2cSJim Jagielski 			sal_Int32 getSqlType ()
154*b1cdbd2cSJim Jagielski 			{
155*b1cdbd2cSJim Jagielski 				return sqlType;
156*b1cdbd2cSJim Jagielski 			}
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
159*b1cdbd2cSJim Jagielski 			// setOutputParameter
160*b1cdbd2cSJim Jagielski 			// Sets the flag indicating if this is an OUTPUT parameter
161*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
162*b1cdbd2cSJim Jagielski 
setOutputParameter(sal_Bool output)163*b1cdbd2cSJim Jagielski 			void setOutputParameter (sal_Bool output)
164*b1cdbd2cSJim Jagielski 			{
165*b1cdbd2cSJim Jagielski 				outputParameter = output;
166*b1cdbd2cSJim Jagielski 			}
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
169*b1cdbd2cSJim Jagielski 			// isOutputParameter
170*b1cdbd2cSJim Jagielski 			// Gets the OUTPUT parameter flag
171*b1cdbd2cSJim Jagielski 			//--------------------------------------------------------------------
172*b1cdbd2cSJim Jagielski 
isOutputParameter()173*b1cdbd2cSJim Jagielski 			sal_Bool isOutputParameter ()
174*b1cdbd2cSJim Jagielski 			{
175*b1cdbd2cSJim Jagielski 				return outputParameter;
176*b1cdbd2cSJim Jagielski 			}
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 		protected:
179*b1cdbd2cSJim Jagielski 			//====================================================================
180*b1cdbd2cSJim Jagielski 			// Data attributes
181*b1cdbd2cSJim Jagielski 			//====================================================================
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 			sal_Int8* binaryData;		// Storage area to be used
184*b1cdbd2cSJim Jagielski 										// when binding the parameter
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski 			sal_Int8* paramLength;		// Storage area to be used
187*b1cdbd2cSJim Jagielski 										// for the bound length of the
188*b1cdbd2cSJim Jagielski 										// parameter.  Note that this
189*b1cdbd2cSJim Jagielski 										// data is in native format.
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski             ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream> paramInputStream;
192*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Sequence< sal_Int8 > aSequence;
193*b1cdbd2cSJim Jagielski 										// When an input stream is
194*b1cdbd2cSJim Jagielski 										// bound to a parameter, the
195*b1cdbd2cSJim Jagielski 										// input stream is saved
196*b1cdbd2cSJim Jagielski 										// until needed.
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 			sal_Int32 paramInputStreamLen;	              // Length of input stream
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 			sal_Int32 sqlType;                          // Java SQL type used to
201*b1cdbd2cSJim Jagielski 															// register an OUT parameter
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski 			sal_Bool outputParameter;	// true for OUTPUT parameters
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 			sal_Int32 pA1;              //pointers
207*b1cdbd2cSJim Jagielski 			sal_Int32 pA2;
208*b1cdbd2cSJim Jagielski 			sal_Int32 pB1;
209*b1cdbd2cSJim Jagielski 			sal_Int32 pB2;
210*b1cdbd2cSJim Jagielski 			sal_Int32 pC1;
211*b1cdbd2cSJim Jagielski 			sal_Int32 pC2;
212*b1cdbd2cSJim Jagielski 			sal_Int32 pS1;
213*b1cdbd2cSJim Jagielski 			sal_Int32 pS2;// reserved for strings(UTFChars)
214*b1cdbd2cSJim Jagielski 		};
215*b1cdbd2cSJim Jagielski 	}
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski #endif // _CONNECTIVITY_OBOUNPARAM_HXX_
218*b1cdbd2cSJim Jagielski 
219