8 #define soci_ORACLE_SOURCE 21 #pragma warning(disable:4355) 32 throw soci_error(
"Vectors of size 0 are not allowed.");
35 indOCIHolderVec_.resize(size);
36 indOCIHolders_ = &indOCIHolderVec_[0];
56 oracleType = SQLT_AFC;
58 std::vector<char> *vp =
static_cast<std::vector<char> *
>(data);
59 std::vector<char> &v(*vp);
60 prepare_indicators(v.size());
66 oracleType = SQLT_INT;
68 std::vector<short> *vp =
static_cast<std::vector<short> *
>(data);
69 std::vector<short> &v(*vp);
70 prepare_indicators(v.size());
76 oracleType = SQLT_INT;
78 std::vector<int> *vp =
static_cast<std::vector<int> *
>(data);
79 std::vector<int> &v(*vp);
80 prepare_indicators(v.size());
86 oracleType = SQLT_FLT;
87 size =
sizeof(double);
88 std::vector<double> *vp =
static_cast<std::vector<double> *
>(data);
89 std::vector<double> &v(*vp);
90 prepare_indicators(v.size());
99 oracleType = SQLT_STR;
100 std::vector<long long> *v
101 =
static_cast<std::vector<long long> *
>(data);
103 std::size_t
const bufSize = colSize_ * v->size();
104 buf_ =
new char[bufSize];
106 prepare_indicators(v->size());
108 size =
static_cast<sb4
>(colSize_);
114 oracleType = SQLT_STR;
115 std::vector<unsigned long long> *v
116 =
static_cast<std::vector<unsigned long long> *
>(data);
118 std::size_t
const bufSize = colSize_ * v->size();
119 buf_ =
new char[bufSize];
121 prepare_indicators(v->size());
123 size =
static_cast<sb4
>(colSize_);
129 oracleType = SQLT_CHR;
130 std::vector<std::string> *v
131 =
static_cast<std::vector<std::string> *
>(data);
132 colSize_ = statement_.column_size(position) + 1;
133 std::size_t bufSize = colSize_ * v->size();
134 buf_ =
new char[bufSize];
136 prepare_indicators(v->size());
138 size =
static_cast<sb4
>(colSize_);
144 oracleType = SQLT_DAT;
145 std::vector<std::tm> *v
146 =
static_cast<std::vector<std::tm> *
>(data);
148 prepare_indicators(v->size());
151 std::size_t bufSize = size * v->size();
153 buf_ =
new char[bufSize];
163 sword res = OCIDefineByPos(statement_.stmtp_, &defnp_,
164 statement_.session_.errhp_,
165 position++, data, size, oracleType,
166 indOCIHolders_, &sizes_[0], &rCodes_[0], OCI_DEFAULT);
167 if (res != OCI_SUCCESS)
187 std::vector<std::string> *vp
188 =
static_cast<std::vector<std::string> *
>(data_);
190 std::vector<std::string> &v(*vp);
193 std::size_t
const vsize = v.size();
194 for (std::size_t i = 0; i != vsize; ++i)
196 if (indOCIHolderVec_[i] != -1)
198 v[i].assign(pos, sizes_[i]);
205 std::vector<long long> *vp
206 =
static_cast<std::vector<long long> *
>(data_);
208 std::vector<long long> &v(*vp);
211 std::size_t
const vsize = v.size();
212 for (std::size_t i = 0; i != vsize; ++i)
214 if (indOCIHolderVec_[i] != -1)
216 v[i] = std::strtoll(pos, NULL, 10);
223 std::vector<unsigned long long> *vp
224 =
static_cast<std::vector<unsigned long long> *
>(data_);
226 std::vector<unsigned long long> &v(*vp);
229 std::size_t
const vsize = v.size();
230 for (std::size_t i = 0; i != vsize; ++i)
232 if (indOCIHolderVec_[i] != -1)
234 v[i] = std::strtoull(pos, NULL, 10);
241 std::vector<std::tm> *vp
242 =
static_cast<std::vector<std::tm> *
>(data_);
244 std::vector<std::tm> &v(*vp);
246 ub1 *pos =
reinterpret_cast<ub1*
>(buf_);
247 std::size_t
const vsize = v.size();
248 for (std::size_t i = 0; i != vsize; ++i)
250 if (indOCIHolderVec_[i] == -1)
259 t.tm_year = (*pos++ - 100) * 100;
260 t.tm_year += *pos++ - 2000;
261 t.tm_mon = *pos++ - 1;
263 t.tm_hour = *pos++ - 1;
264 t.tm_min = *pos++ - 1;
265 t.tm_sec = *pos++ - 1;
282 std::size_t
const indSize = statement_.get_number_of_rows();
283 for (std::size_t i = 0; i != indSize; ++i)
285 if (indOCIHolderVec_[i] == 0)
289 else if (indOCIHolderVec_[i] == -1)
301 std::size_t
const indSize = indOCIHolderVec_.size();
302 for (std::size_t i = 0; i != indSize; ++i)
304 if (indOCIHolderVec_[i] == -1)
308 "Null value fetched and no indicator defined.");
326 std::vector<char> *v =
static_cast<std::vector<char> *
>(data_);
332 std::vector<short> *v =
static_cast<std::vector<short> *
>(data_);
338 std::vector<int> *v =
static_cast<std::vector<int> *
>(data_);
344 std::vector<long long> *v
345 =
static_cast<std::vector<long long> *
>(data_);
351 std::vector<unsigned long long> *v
352 =
static_cast<std::vector<unsigned long long> *
>(data_);
358 std::vector<double> *v
359 =
static_cast<std::vector<double> *
>(data_);
365 std::vector<std::string> *v
366 =
static_cast<std::vector<std::string> *
>(data_);
372 std::vector<std::tm> *v
373 =
static_cast<std::vector<std::tm> *
>(data_);
392 std::vector<char> *v =
static_cast<std::vector<char> *
>(data_);
398 std::vector<short> *v =
static_cast<std::vector<short> *
>(data_);
404 std::vector<int> *v =
static_cast<std::vector<int> *
>(data_);
410 std::vector<long long> *v
411 =
static_cast<std::vector<long long> *
>(data_);
417 std::vector<unsigned long long> *v
418 =
static_cast<std::vector<unsigned long long> *
>(data_);
424 std::vector<double> *v
425 =
static_cast<std::vector<double> *
>(data_);
431 std::vector<std::string> *v
432 =
static_cast<std::vector<std::string> *
>(data_);
438 std::vector<std::tm> *v
439 =
static_cast<std::vector<std::tm> *
>(data_);
456 OCIHandleFree(defnp_, OCI_HTYPE_DEFINE);
virtual std::size_t size()
void prepare_indicators(std::size_t size)
virtual void define_by_pos(int &position, void *data, details::exchange_type type)
void throw_oracle_soci_error(sword res, OCIError *errhp)
virtual void resize(std::size_t sz)
virtual void post_fetch(bool gotData, indicator *ind)