in modules/platforms/cpp/ignite/odbc/app/application_data_buffer.cpp [1526:1598]
SQLLEN application_data_buffer::get_data_at_exec_size() const {
switch (m_type) {
case odbc_native_type::AI_WCHAR:
case odbc_native_type::AI_CHAR:
case odbc_native_type::AI_BINARY: {
const SQLLEN *res_len_ptr = get_result_len();
if (!res_len_ptr)
return 0;
auto s_len = static_cast<std::int32_t>(*res_len_ptr);
if (s_len <= SQL_LEN_DATA_AT_EXEC_OFFSET)
s_len = SQL_LEN_DATA_AT_EXEC(s_len);
else
s_len = 0;
if (m_type == odbc_native_type::AI_WCHAR)
s_len *= 2;
return s_len;
}
case odbc_native_type::AI_SIGNED_SHORT:
return static_cast<SQLLEN>(sizeof(SQLSMALLINT));
case odbc_native_type::AI_UNSIGNED_SHORT:
return static_cast<SQLLEN>(sizeof(SQLUSMALLINT));
case odbc_native_type::AI_SIGNED_LONG:
return static_cast<SQLLEN>(sizeof(SQLINTEGER));
case odbc_native_type::AI_UNSIGNED_LONG:
return static_cast<SQLLEN>(sizeof(SQLUINTEGER));
case odbc_native_type::AI_FLOAT:
return static_cast<SQLLEN>(sizeof(SQLFLOAT));
case odbc_native_type::AI_DOUBLE:
return static_cast<SQLLEN>(sizeof(SQLDOUBLE));
case odbc_native_type::AI_BIT:
return static_cast<SQLLEN>(sizeof(SQLCHAR));
case odbc_native_type::AI_SIGNED_TINYINT:
return static_cast<SQLLEN>(sizeof(SQLSCHAR));
case odbc_native_type::AI_UNSIGNED_TINYINT:
return static_cast<SQLLEN>(sizeof(SQLCHAR));
case odbc_native_type::AI_SIGNED_BIGINT:
case odbc_native_type::AI_UNSIGNED_BIGINT:
return static_cast<SQLLEN>(sizeof(SQLBIGINT));
case odbc_native_type::AI_TDATE:
return static_cast<SQLLEN>(sizeof(SQL_DATE_STRUCT));
case odbc_native_type::AI_TTIME:
return static_cast<SQLLEN>(sizeof(SQL_TIME_STRUCT));
case odbc_native_type::AI_TTIMESTAMP:
return static_cast<SQLLEN>(sizeof(SQL_TIMESTAMP_STRUCT));
case odbc_native_type::AI_NUMERIC:
return static_cast<SQLLEN>(sizeof(SQL_NUMERIC_STRUCT));
case odbc_native_type::AI_GUID:
return static_cast<SQLLEN>(sizeof(SQLGUID));
case odbc_native_type::AI_DEFAULT:
case odbc_native_type::AI_UNSUPPORTED:
default:
break;
}
return 0;
}