Skip to content

Commit

Permalink
Allow customization of default odbc version
Browse files Browse the repository at this point in the history
  • Loading branch information
jabbera committed Sep 21, 2023
1 parent ee0ad21 commit aee47e2
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions src/pyodbcmodule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,11 @@ static char module_doc[] =
"\n"
"paramstyle\n"
" The string constant 'qmark' to indicate parameters are identified using\n"
" question marks.";
" question marks."
"\n"
"odbcversion\n"
" The ODBC version number as a string, such as '3.X' for ODBC 3.X compatibility.\n"
" Use 3.8 for version 3.8. The default is 3.X\n";

PyObject* Error;
PyObject* Warning;
Expand Down Expand Up @@ -296,7 +300,17 @@ static bool AllocateEnv()
return false;
}

if (!SQL_SUCCEEDED(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, sizeof(int))))
SQLPOINTER defaultVersion = (SQLPOINTER)SQL_OV_ODBC3;
PyObject* odbcversion = PyObject_GetAttrString(pModule, "odbcversion");
if (PyObject_TypeCheck(odbcversion, &PyUnicode_Type)) {
if (PyUnicode_CompareWithASCIIString(odbcversion, "3.8") == 0)
{
defaultVersion = (SQLPOINTER)SQL_OV_ODBC3_80;
}
}
Py_DECREF(odbcversion);

if (!SQL_SUCCEEDED(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, defaultVersion, sizeof(int))))
{
PyErr_SetString(PyExc_RuntimeError, "Unable to set SQL_ATTR_ODBC_VERSION attribute.");
return false;
Expand Down Expand Up @@ -1169,6 +1183,7 @@ PyMODINIT_FUNC PyInit_pyodbc()
PyModule_AddIntConstant(module, "threadsafety", 1);
PyModule_AddStringConstant(module, "apilevel", "2.0");
PyModule_AddStringConstant(module, "paramstyle", "qmark");
PyModule_AddStringConstant(module, "odbcversion", "3.X");
PyModule_AddObject(module, "pooling", Py_True);
Py_INCREF(Py_True);
PyModule_AddObject(module, "lowercase", Py_False);
Expand Down

0 comments on commit aee47e2

Please sign in to comment.