in src/odbc/rsodbc/rsoptions.cpp [1806:1939]
SQLRETURN SQL_API SQLSetEnvAttr(SQLHENV phenv,
SQLINTEGER iAttribute,
SQLPOINTER pValue,
SQLINTEGER cbLen)
{
SQLRETURN rc = SQL_SUCCESS;
int iVal = (int)(long)pValue;
RS_ENV_INFO *pEnv = (RS_ENV_INFO *)phenv;
RS_ENV_ATTR_INFO *pEnvAttr;
if(IS_TRACE_LEVEL_API_CALL())
TraceSQLSetEnvAttr(FUNC_CALL, 0, phenv, iAttribute, pValue, cbLen);
if(!VALID_HENV(phenv))
{
rc = SQL_INVALID_HANDLE;
goto error;
}
// Clear error list
pEnv->pErrorList = clearErrorList(pEnv->pErrorList);
pEnvAttr = pEnv->pEnvAttr;
switch(iAttribute)
{
case SQL_ATTR_CONNECTION_POOLING:
{
switch(iVal)
{
case SQL_CP_OFF:
case SQL_CP_ONE_PER_DRIVER:
case SQL_CP_ONE_PER_HENV:
{
pEnvAttr->iConnectionPooling = iVal;
break;
}
default:
{
rc = SQL_ERROR;
addError(&pEnv->pErrorList,"HY024", "Invalid attribute value", 0, NULL);
goto error;
}
}
break;
}
case SQL_ATTR_CP_MATCH:
{
switch(iVal)
{
case SQL_CP_STRICT_MATCH:
case SQL_CP_RELAXED_MATCH:
{
pEnvAttr->iConnectionPoolingMatch = iVal;
break;
}
default:
{
rc = SQL_ERROR;
addError(&pEnv->pErrorList,"HY024", "Invalid attribute value", 0, NULL);
goto error;
}
}
break;
}
case SQL_ATTR_ODBC_VERSION:
{
switch(iVal)
{
case SQL_OV_ODBC2:
case SQL_OV_ODBC3:
{
pEnvAttr->iOdbcVersion = iVal;
break;
}
default:
{
rc = SQL_ERROR;
addError(&pEnv->pErrorList,"HY024", "Invalid attribute value", 0, NULL);
goto error;
}
}
break;
}
case SQL_ATTR_OUTPUT_NTS:
{
switch(iVal)
{
case SQL_TRUE:
{
pEnvAttr->iOutputNts = iVal;
break;
}
case SQL_FALSE:
{
rc = SQL_ERROR;
addError(&pEnv->pErrorList,"HYC00", "Optional feature not implemented:SQLSetEnvAttr", 0, NULL);
goto error;
}
default:
{
rc = SQL_ERROR;
addError(&pEnv->pErrorList,"HY024", "Invalid attribute value", 0, NULL);
goto error;
}
}
break;
}
default:
{
rc = SQL_ERROR;
addError(&pEnv->pErrorList,"HY092", "Invalid attribute/option identifier", 0, NULL);
goto error;
}
} // Switch
error:
if(IS_TRACE_LEVEL_API_CALL())
TraceSQLSetEnvAttr(FUNC_RETURN, rc, phenv, iAttribute, pValue, cbLen);
return rc;
}