Menu

#142 Cant bind int64_t with odbc_backend

cppdb-0.3.x
open
nobody
1
2015-12-04
2015-12-04
Anonymous
No

In file odbc_backend.cpp in class odbc_backend::statement::parameter in template method

template <typename T>     /* line 591*/
void set(T v)
{
    std::ostringstream ss;
    ss.imbue(std::locale::classic());
    if(!std::numeric_limits<T>::is_integer)
        ss << std::setprecision(std::numeric_limits<T>::digits10+1);
    ss << v;

    value=ss.str();
    null=false;
    ctype = SQL_C_CHAR;
    if(std::numeric_limits<T>::is_integer) 
        sqltype = SQL_INTEGER;
    else
        sqltype = SQL_DOUBLE;
}

This code cant handle integer values larger than 0x80000000, since they need a SQL_BIGINT sqltype, but SQL_INTEGER passed.

Passing value larger that that, causes an ODBC numeric type out of range error. At least with SQL Server 2012 on Windows 7 client and server. Library and client application compiled with msvc2013 c++ compiller.

Proposed patch in attachment.

For any feedback, please email on vasilly.prokopyev<at>gmail.com

1 Attachments

Discussion

Anonymous
Anonymous

Add attachments
Cancel





Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.