in src/odbc/rsodbc/rsoptions.cpp [462:632]
SQLRETURN SQL_API RsOptions::RS_SQLGetConnectAttr(SQLHDBC phdbc,
SQLINTEGER iAttribute,
SQLPOINTER pValue,
SQLINTEGER cbLen,
SQLINTEGER *pcbLen)
{
SQLRETURN rc = SQL_SUCCESS;
int *piVal = (int *)pValue;
void **ppVal = (void **)pValue;
RS_CONN_INFO *pConn = (RS_CONN_INFO *)phdbc;
RS_CONN_ATTR_INFO *pConnAttr;
RS_CONNECT_PROPS_INFO *pConnectProps;
// Check valid HDBC
if(!VALID_HDBC(phdbc))
{
rc = SQL_INVALID_HANDLE;
goto error;
}
// Clear error list
pConn->pErrorList = clearErrorList(pConn->pErrorList);
if(!pValue)
{
rc = SQL_ERROR;
addError(&pConn->pErrorList,"HY000", "Output buffer is NULL", 0, NULL);
goto error;
}
pConnAttr = pConn->pConnAttr;
pConnectProps = pConn->pConnectProps;
// Attribute operation
switch(iAttribute)
{
case SQL_ATTR_ACCESS_MODE:
{
*piVal = pConnAttr->iAccessMode;
break;
}
case SQL_ATTR_ASYNC_ENABLE:
{
*piVal = pConnAttr->iAsyncEnable;
break;
}
case SQL_ATTR_AUTO_IPD:
{
*piVal = pConnAttr->iAutoIPD;
break;
}
case SQL_ATTR_AUTOCOMMIT:
{
*piVal = pConnAttr->iAutoCommit;
break;
}
case SQL_ATTR_CONNECTION_DEAD:
{
*piVal = pConn->isConnectionDead() ? SQL_CD_TRUE : SQL_CD_FALSE;
break;
}
case SQL_ATTR_CONNECTION_TIMEOUT:
{
*piVal = pConnAttr->iConnectionTimeout;
break;
}
case SQL_ATTR_CURRENT_CATALOG:
{
rc = copyStrDataLargeLen((pConnAttr->pCurrentCatalog) ? pConnAttr->pCurrentCatalog : pConn->pConnectProps->szDatabase, SQL_NTS,
(char *)pValue, cbLen, pcbLen);
break;
}
case SQL_ATTR_LOGIN_TIMEOUT:
{
*piVal = pConnAttr->iLoginTimeout;
break;
}
case SQL_ATTR_METADATA_ID:
{
*piVal = pConnAttr->iMetaDataId;
break;
}
case SQL_ATTR_ODBC_CURSORS:
{
*piVal = pConnAttr->iOdbcCursors;
break;
}
case SQL_ATTR_PACKET_SIZE:
{
*piVal = pConnAttr->iPacketSize;
break;
}
case SQL_ATTR_QUIET_MODE:
{
*ppVal = pConnAttr->hQuietMode;
break;
}
case SQL_ATTR_TRACE:
{
*piVal = pConnAttr->iTrace;
break;
}
case SQL_ATTR_TRACEFILE:
{
rc = copyStrDataLargeLen(pConnAttr->pTraceFile, SQL_NTS, (char *)pValue, cbLen, pcbLen);
break;
}
case SQL_ATTR_TRANSLATE_LIB:
{
rc = copyStrDataLargeLen(pConnAttr->pTranslateLib, SQL_NTS, (char *)pValue, cbLen, pcbLen);
break;
}
case SQL_ATTR_TRANSLATE_OPTION:
{
*piVal = pConnAttr->iTranslateOption;
break;
}
case SQL_ATTR_TXN_ISOLATION:
{
*piVal = pConnAttr->iTxnIsolation;
break;
}
case SQL_ATTR_IGNORE_UNICODE_FUNCTIONS: // DD DM Linux
{
*piVal = 1;
break;
}
case SQL_ATTR_APP_WCHAR_TYPE: // DD DM specific attribute.
{
*piVal = SQL_DD_CP_UTF16;
break;
}
case SQL_ATTR_QUERY_TIMEOUT:
{
*piVal = pConnectProps->iQueryTimeout;
break;
}
default:
{
rc = SQL_ERROR;
addError(&pConn->pErrorList,"HYC00", "Optional feature not implemented::RS_SQLGetConnectAttr", 0, NULL);
goto error;
}
} // Switch
error:
return rc;
}