Пример #1
0
static PyObject* CnxnInfo_New(Connection* cnxn)
{
#ifdef _MSC_VER
#pragma warning(disable : 4365)
#endif
    CnxnInfo* p = PyObject_NEW(CnxnInfo, &CnxnInfoType);
    if (!p)
        return 0;
    Object info((PyObject*)p);

    // set defaults
    p->odbc_major             = 0;
    p->odbc_minor             = 0;
    p->supports_describeparam = false;
    p->datetime_precision     = 19; // default: "yyyy-mm-dd hh:mm:ss"
    p->need_long_data_len     = false;

    p->varchar_maxlength  = 1 * 1024 * 1024 * 1024;
    p->wvarchar_maxlength = 1 * 1024 * 1024 * 1024;
    p->binary_maxlength   = 1 * 1024 * 1024 * 1024;

    // WARNING: The GIL lock is released for the *entire* function here.  Do not
    // touch any objects, call Python APIs, etc.  We are simply making ODBC
    // calls and setting atomic values (ints & chars).  Also, make sure the lock
    // gets released -- do not add an early exit.

    SQLRETURN ret;
    Py_BEGIN_ALLOW_THREADS

    char szVer[20];
    SQLSMALLINT cch = 0;
    ret = SQLGetInfo(cnxn->hdbc, SQL_DRIVER_ODBC_VER, szVer, _countof(szVer), &cch);
    if (SQL_SUCCEEDED(ret))
    {
        char* dot = strchr(szVer, '.');
        if (dot)
        {
            *dot = '\0';
            p->odbc_major=(char)atoi(szVer);
            p->odbc_minor=(char)atoi(dot + 1);
        }
    }

    char szYN[2];
    if (SQL_SUCCEEDED(SQLGetInfo(cnxn->hdbc, SQL_DESCRIBE_PARAMETER, szYN, _countof(szYN), &cch)))
        p->supports_describeparam = szYN[0] == 'Y';

    if (SQL_SUCCEEDED(SQLGetInfo(cnxn->hdbc, SQL_NEED_LONG_DATA_LEN, szYN, _countof(szYN), &cch)))
        p->need_long_data_len = (szYN[0] == 'Y');

    GetColumnSize(cnxn, SQL_VARCHAR, &p->varchar_maxlength);
    GetColumnSize(cnxn, SQL_WVARCHAR, &p->wvarchar_maxlength);
    GetColumnSize(cnxn, SQL_VARBINARY, &p->binary_maxlength);
    GetColumnSize(cnxn, SQL_TYPE_TIMESTAMP, &p->datetime_precision);

    Py_END_ALLOW_THREADS

    return info.Detach();
}
Пример #2
0
TdsColumnData::TdsColumnData(TDSCOLUMN* pColumn)
{
  m_nColumnType = GetColumnType(pColumn);
  m_nColumnSize = GetColumnSize(pColumn);
  m_strColumnName = GetColumnName(pColumn);
}