SQLRETURN SQL_API SQLSetEnvAttr()

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;
}