Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for libdb2 for createdb and dropdb #953

Merged
merged 2 commits into from
Jun 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 32 additions & 15 deletions ibm_db.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,25 +57,37 @@ static PyObject* getSQLWCharAsPyUnicodeObject(SQLWCHAR* sqlwcharData, int sqlwch
const int _check_i = 1;
#define is_bigendian() ( (*(char*)&_check_i) == 0 )
static int is_systemi, is_informix; /* 1 == TRUE; 0 == FALSE; */

#ifdef _WIN32
#define DLOPEN LoadLibrary
#define DLSYM GetProcAddress
#define DLCLOSE FreeLibrary
#ifdef _WIN64
#define LIBDB2 "db2cli64.dll"
#else
#define LIBDB2 "db2cli.dll"
#endif
#elif _AIX
#define DLOPEN dlopen
#define DLSYM dlsym
#define DLCLOSE dlclose
#define LIBDB2 "libdb2.a"
#ifdef __64BIT__
/*64-bit library in the archive libdb2.a*/
#define LIBDB2 "libdb2.a(shr_64.o)"
#else
/*32-bit library in the archive libdb2.a*/
#define LIBDB2 "libdb2.a(shr.o)"
#endif
#elif __APPLE__
#define DLOPEN dlopen
#define DLSYM dlsym
#define DLCLOSE dlclose
#define LIBDB2 "libdb2.so.1"
#endif
#ifdef _WIN64
#define LIBDB2 "db2cli64.dll"
#define LIBDB2 "libdb2.dylib"
#else
#define LIBDB2 "db2cli.dll"
#define DLOPEN dlopen
#define DLSYM dlsym
#define DLCLOSE dlclose
#define LIBDB2 "libdb2.so.1"
#endif

/* Defines a linked list structure for error messages */
Expand Down Expand Up @@ -2021,10 +2033,10 @@ static int _python_ibm_db_createdb(conn_handle *conn_res, PyObject *dbNameObj, P
sqlcreatedbType sqlcreatedb;
#endif

#if defined __APPLE__ || defined _AIX
PyErr_SetString( PyExc_Exception, "Not supported: This function is currently not supported on this platform" );
#if defined(__MVS__)
PyErr_SetString( PyExc_Exception, "Not supported: This function not supported on this platform" );
return -1;
#else
#endif

if ( !NIL_P( conn_res ) ) {
if ( NIL_P( dbNameObj ) ) {
Expand Down Expand Up @@ -2064,8 +2076,11 @@ static int _python_ibm_db_createdb(conn_handle *conn_res, PyObject *dbNameObj, P
}
}

#ifndef __MVS__
#ifdef _WIN32
cliLib = DLOPEN( LIBDB2 );
#elif _AIX
cliLib = DLOPEN( LIBDB2, RTLD_MEMBER | RTLD_LAZY );
#else
cliLib = DLOPEN( LIBDB2, RTLD_LAZY );
#endif
Expand All @@ -2075,6 +2090,7 @@ static int _python_ibm_db_createdb(conn_handle *conn_res, PyObject *dbNameObj, P
_python_clear_local_var( dbNameObj, dbName, codesetObj, codeset, modeObj, mode, isNewBuffer );
return -1;
}
#endif
Py_BEGIN_ALLOW_THREADS;
#ifdef _WIN32
sqlcreatedb = DLSYM( cliLib, "SQLCreateDbW" );
Expand Down Expand Up @@ -2118,7 +2134,6 @@ static int _python_ibm_db_createdb(conn_handle *conn_res, PyObject *dbNameObj, P
PyErr_SetString( PyExc_Exception, "Supplied connection object Parameter is invalid" );
return -1;
}
#endif
}

/*
Expand All @@ -2142,10 +2157,10 @@ static int _python_ibm_db_dropdb(conn_handle *conn_res, PyObject *dbNameObj, int
void *cliLib;
#endif

#if defined __APPLE__ || defined _AIX
PyErr_SetString( PyExc_Exception, "Not supported: This function is currently not supported on this platform" );
#if defined(__MVS__)
PyErr_SetString( PyExc_Exception, "Not supported: This function not supported on this platform" );
return -1;
#else
#endif

if ( !NIL_P( conn_res ) ) {
if ( NIL_P( dbNameObj ) ) {
Expand All @@ -2164,9 +2179,11 @@ static int _python_ibm_db_dropdb(conn_handle *conn_res, PyObject *dbNameObj, int
} else {
return -1;
}

#ifndef __MVS__
#ifdef _WIN32
cliLib = DLOPEN( LIBDB2 );
#elif _AIX
cliLib = DLOPEN( LIBDB2, RTLD_MEMBER | RTLD_LAZY );
#else
cliLib = DLOPEN( LIBDB2, RTLD_LAZY );
#endif
Expand All @@ -2176,6 +2193,7 @@ static int _python_ibm_db_dropdb(conn_handle *conn_res, PyObject *dbNameObj, int
_python_clear_local_var( dbNameObj, dbName, NULL, NULL, NULL, NULL, isNewBuffer );
return -1;
}
#endif
Py_BEGIN_ALLOW_THREADS;
#ifdef _WIN32
sqldropdb = DLSYM( cliLib, "SQLDropDbW" );
Expand Down Expand Up @@ -2218,7 +2236,6 @@ static int _python_ibm_db_dropdb(conn_handle *conn_res, PyObject *dbNameObj, int
PyErr_SetString( PyExc_Exception, "Supplied connection object Parameter is invalid" );
return -1;
}
#endif
}

/*!# ibm_db.createdb
Expand Down
Loading