185{
187 && (Query::__fieldCount == 0)
190 );
191
192 ub4 fieldCount = 0;
193 ub4 size = sizeof(fieldCount);
194 sword status = OCIAttrGet(
196 OCI_HTYPE_STMT,
197 &fieldCount,
198 &size,
199 OCI_ATTR_PARAM_COUNT,
200 conn()->errorHandle()
201 );
203 if (status != OCI_SUCCESS) {
205 return false;
206 }
207
209 for (ub4 i = 0; i < fieldCount; i++) {
210 OCIParam* param =
NULL;
211 status = OCIParamGet(
213 OCI_HTYPE_STMT,
214 conn()->errorHandle(),
215 (dvoid**)¶m,
216 i + 1
217 );
218 if (status != OCI_SUCCESS) {
220 return false;
221 }
222
223 ub2 sqlt = 0;
224 size = sizeof(sqlt);
225 status = OCIAttrGet(
226 param,
227 OCI_DTYPE_PARAM,
228 &sqlt,
229 &size,
230 OCI_ATTR_DATA_TYPE,
231 conn()->errorHandle()
232 );
234 if (status != OCI_SUCCESS) {
236 return false;
237 }
238
239
240
241 ub4 dataSize = 0;
242 size = sizeof(dataSize);
243 status = OCIAttrGet(
244 param,
245 OCI_DTYPE_PARAM,
246 &dataSize,
247 &size,
248 OCI_ATTR_DATA_SIZE,
249 conn()->errorHandle()
250 );
252 if (status != OCI_SUCCESS) {
254 return false;
255 }
256
260 i + 1, dataSize, ts[i].buflen,
262 );
263 }
264
265
266 size_t offset = 0;
267 for (ub4 i = 0; i < fieldCount; i++) {
272 }
273
275
279 return false;
280 }
281
282 Query::__fieldCount = fieldCount;
283 __fields =
new OciField[Query::__fieldCount];
286 return false;
287 }
288
289 offset = 0;
290 for (ub4 i = 0; i < Query::__fieldCount; i++) {
293
294 if (!(
__fields[i].init(
this, i + 1, ts[i].sqlt,
295 buf, ts[i].buflen))
296 ) {
297 return false;
298 }
300 }
301
302 return true;
303}
#define __DCL_TRACE1_N(fmt, arg)
#define __DCL_TRACE5_N(fmt, arg1, arg2, arg3, arg4, arg5)
struct __TYPESIZE TYPESIZE
static const wchar_t * __TYPE_NAME(ub2 _sqlt)
static size_t __TYPE_ALIGN(size_t _offset, ub2 _sqlt)
static ub4 __TYPE_SIZE(ub2 _sqlt, ub4 _size)