262{
263 size_t size = 0;
264 switch (_type) {
265 case SQL_BIT:
266 case SQL_TINYINT:
267 size = sizeof(int8_t);
268 break;
269 case SQL_SMALLINT:
270 size = sizeof(int16_t);
271 break;
272 case SQL_INTEGER:
273 size = sizeof(int32_t);
274 break;
276 case SQL_BIGINT:
277 size = sizeof(int64_t);
278 break;
279 case SQL_REAL:
280 size = sizeof(float);
281 break;
282 case SQL_FLOAT:
283 case SQL_DOUBLE:
284 size = sizeof(double);
285 break;
286 case SQL_TYPE_DATE:
287 size = sizeof(DATE_STRUCT);
288 break;
289 case SQL_TYPE_TIME:
290 size = sizeof(TIME_STRUCT);
291 break;
292 case SQL_TYPE_TIMESTAMP:
293 size = sizeof(TIMESTAMP_STRUCT);
294 break;
295 case SQL_SS_TIME2:
296 size = sizeof(SQL_SS_TIME2_STRUCT);
297 break;
298 case SQL_SS_TIMESTAMPOFFSET:
299 size = sizeof(SQL_SS_TIMESTAMPOFFSET_STRUCT);
300 break;
301 case SQL_INTERVAL_YEAR:
302 case SQL_INTERVAL_MONTH:
303 case SQL_INTERVAL_DAY:
304 case SQL_INTERVAL_HOUR:
305 case SQL_INTERVAL_MINUTE:
306 case SQL_INTERVAL_SECOND:
307 case SQL_INTERVAL_YEAR_TO_MONTH:
308 case SQL_INTERVAL_DAY_TO_HOUR:
309 case SQL_INTERVAL_DAY_TO_MINUTE:
310 case SQL_INTERVAL_DAY_TO_SECOND:
311 case SQL_INTERVAL_HOUR_TO_MINUTE:
312 case SQL_INTERVAL_HOUR_TO_SECOND:
313 case SQL_INTERVAL_MINUTE_TO_SECOND:
314 size = sizeof(SQL_INTERVAL_STRUCT);
315 break;
316 case SQL_CHAR:
317 case SQL_VARCHAR:
318 case SQL_LONGVARCHAR:
319
320
321 size = 0 < _size && _size <= 12000 ? _size + 1 : 0;
322 break;
323 case SQL_NUMERIC:
324 case SQL_DECIMAL:
325 size = _size + 2 + 1;
326 break;
327 case SQL_GUID:
328 size = _size * 2;
329 break;
330 case SQL_WCHAR:
331 case SQL_WVARCHAR:
332 case SQL_WLONGVARCHAR:
333
334
335
336 size = 0 < _size && _size <= 4000 ? (_size + 1) * 3 : 0;
337 break;
338 case SQL_BINARY:
339 case SQL_VARBINARY:
340 case SQL_LONGVARBINARY:
341 case SQL_SS_UDT:
342 default:
343
344
345 size = 0 < _size && _size <= 12000 ? _size : 0;
346 }
347 return size;
348}