in modules/platforms/cpp/ignite/odbc/sql_statement.cpp [305:448]
sql_result sql_statement::internal_get_attribute(int attr, void *buf, SQLINTEGER, SQLINTEGER *value_len) {
if (!buf) {
add_status_record("Data buffer is NULL.");
return sql_result::AI_ERROR;
}
switch (attr) {
case SQL_ATTR_APP_ROW_DESC:
case SQL_ATTR_APP_PARAM_DESC:
case SQL_ATTR_IMP_ROW_DESC:
case SQL_ATTR_IMP_PARAM_DESC: {
auto *val = reinterpret_cast<SQLPOINTER *>(buf);
*val = static_cast<SQLPOINTER>(this);
if (value_len)
*value_len = SQL_IS_POINTER;
break;
}
case SQL_ATTR_ROW_BIND_TYPE: {
auto *val = reinterpret_cast<SQLULEN *>(buf);
*val = SQL_BIND_BY_COLUMN;
break;
}
case SQL_ATTR_ROW_ARRAY_SIZE: {
auto *val = reinterpret_cast<SQLINTEGER *>(buf);
*val = static_cast<SQLINTEGER>(m_row_array_size);
if (value_len)
*value_len = SQL_IS_INTEGER;
break;
}
case SQL_ATTR_ROWS_FETCHED_PTR: {
auto **val = reinterpret_cast<SQLULEN **>(buf);
*val = reinterpret_cast<SQLULEN *>(get_row_fetched_ptr());
if (value_len)
*value_len = SQL_IS_POINTER;
break;
}
case SQL_ATTR_ROW_STATUS_PTR: {
auto **val = reinterpret_cast<SQLUSMALLINT **>(buf);
*val = reinterpret_cast<SQLUSMALLINT *>(get_row_statuses_ptr());
if (value_len)
*value_len = SQL_IS_POINTER;
break;
}
case SQL_ATTR_PARAM_BIND_TYPE: {
auto *val = reinterpret_cast<SQLULEN *>(buf);
*val = SQL_PARAM_BIND_BY_COLUMN;
break;
}
case SQL_ATTR_PARAM_BIND_OFFSET_PTR: {
auto **val = reinterpret_cast<SQLULEN **>(buf);
*val = reinterpret_cast<SQLULEN *>(m_parameters.get_param_bind_offset_ptr());
if (value_len)
*value_len = SQL_IS_POINTER;
break;
}
case SQL_ATTR_ROW_BIND_OFFSET_PTR: {
auto **val = reinterpret_cast<SQLULEN **>(buf);
*val = reinterpret_cast<SQLULEN *>(get_column_bind_offset_ptr());
if (value_len)
*value_len = SQL_IS_POINTER;
break;
}
case SQL_ATTR_PARAMSET_SIZE: {
auto *val = reinterpret_cast<SQLULEN *>(buf);
*val = static_cast<SQLULEN>(m_parameters.get_param_set_size());
if (value_len)
*value_len = SQL_IS_UINTEGER;
break;
}
case SQL_ATTR_PARAMS_PROCESSED_PTR: {
auto **val = reinterpret_cast<SQLULEN **>(buf);
*val = m_parameters.get_params_processed_ptr();
if (value_len)
*value_len = SQL_IS_POINTER;
break;
}
case SQL_ATTR_PARAM_STATUS_PTR: {
auto **val = reinterpret_cast<SQLUSMALLINT **>(buf);
*val = m_parameters.get_params_status_ptr();
if (value_len)
*value_len = SQL_IS_POINTER;
break;
}
case SQL_ATTR_QUERY_TIMEOUT: {
auto *u_timeout = reinterpret_cast<SQLULEN *>(buf);
*u_timeout = static_cast<SQLULEN>(m_timeout);
break;
}
default: {
add_status_record(
sql_state::SHYC00_OPTIONAL_FEATURE_NOT_IMPLEMENTED, "Specified attribute is not supported.");
return sql_result::AI_ERROR;
}
}
return sql_result::AI_SUCCESS;
}