void add_stmt_option_key()

in source/pdo_sqlsrv/pdo_dbh.cpp [1864:1934]


void add_stmt_option_key(_Inout_ sqlsrv_context& ctx, _In_ size_t key, _Inout_ HashTable* options_ht,
                            _Inout_ zval* data)
{
    zend_ulong option_key = -1;
    switch (key) {

    case PDO_ATTR_CURSOR:
        option_key = SQLSRV_STMT_OPTION_SCROLLABLE;
        break;

    case SQLSRV_ATTR_ENCODING:
        option_key = PDO_STMT_OPTION_ENCODING;
        break;

    case SQLSRV_ATTR_QUERY_TIMEOUT:
        option_key = SQLSRV_STMT_OPTION_QUERY_TIMEOUT;
        break;

    case PDO_ATTR_STATEMENT_CLASS:
        break;

    case SQLSRV_ATTR_DIRECT_QUERY:
        option_key = PDO_STMT_OPTION_DIRECT_QUERY;
        break;

    case SQLSRV_ATTR_CURSOR_SCROLL_TYPE:
        option_key = PDO_STMT_OPTION_CURSOR_SCROLL_TYPE;
        break;

    case SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE:
        option_key = PDO_STMT_OPTION_CLIENT_BUFFER_MAX_KB_SIZE;
        break;

    case PDO_ATTR_EMULATE_PREPARES:
        option_key = PDO_STMT_OPTION_EMULATE_PREPARES;
        break;

    case SQLSRV_ATTR_FETCHES_NUMERIC_TYPE:
        option_key = PDO_STMT_OPTION_FETCHES_NUMERIC_TYPE;
        break;

    case SQLSRV_ATTR_FETCHES_DATETIME_TYPE:
        option_key = PDO_STMT_OPTION_FETCHES_DATETIME_TYPE;
        break;

    case SQLSRV_ATTR_FORMAT_DECIMALS:
        option_key = PDO_STMT_OPTION_FORMAT_DECIMALS;
        break;

    case SQLSRV_ATTR_DECIMAL_PLACES:
        option_key = PDO_STMT_OPTION_DECIMAL_PLACES;
        break;

    case SQLSRV_ATTR_DATA_CLASSIFICATION:
        option_key = PDO_STMT_OPTION_DATA_CLASSIFICATION;
        break;

    default:
        CHECK_CUSTOM_ERROR(true, ctx, PDO_SQLSRV_ERROR_INVALID_STMT_OPTION)
        {
            throw core::CoreException();
        }
        break;
    }

    // if a PDO handled option makes it through (such as PDO_ATTR_STATEMENT_CLASS, just skip it
    if (option_key != -1) {
        zval_add_ref(data);
        core::sqlsrv_zend_hash_index_update(ctx, options_ht, option_key, data);
    }
}