ProPeler
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
cpanel-ccs
/
lib-patches
/
cx_Oracle
/
Filename :
nclob-fixes-and-prefetch.patch
back
Copy
diff -ur ./Connection.c ../cx_Oracle-5.2-patched/Connection.c --- ./Connection.c 2015-06-06 23:31:08.000000000 -0400 +++ ../cx_Oracle-5.2-patched/Connection.c 2015-10-14 11:43:01.000000000 -0400 @@ -747,6 +747,18 @@ if (newPasswordObj) return Connection_ChangePassword(self, self->password, newPasswordObj); + // set lob prefetch attribute to session + ub4 default_lobprefetch_size = 4096; // Set default size to 4K + status = OCIAttrSet (self->sessionHandle, OCI_HTYPE_SESSION, + (void *)&default_lobprefetch_size, 0, + OCI_ATTR_DEFAULT_LOBPREFETCH_SIZE, + self->environment->errorHandle); + if (Environment_CheckForError(self->environment, status, + "Connection_Connect(): OCI_ATTR_DEFAULT_LOBPREFETCH_SIZE") < 0) { + self->sessionHandle = NULL; + return -1; + } + // begin the session Py_BEGIN_ALLOW_THREADS status = OCISessionBegin(self->handle, self->environment->errorHandle, diff -ur ./Cursor.c ../cx_Oracle-5.2-patched/Cursor.c --- ./Cursor.c 2015-06-06 18:51:44.000000000 -0400 +++ ../cx_Oracle-5.2-patched/Cursor.c 2015-10-14 11:57:02.000000000 -0400 @@ -1841,8 +1841,8 @@ } } Py_BEGIN_ALLOW_THREADS - status = OCIStmtFetch(self->handle, self->environment->errorHandle, - numRows, OCI_FETCH_NEXT, OCI_DEFAULT); + status = OCIStmtFetch2(self->handle, self->environment->errorHandle, + numRows, OCI_FETCH_NEXT, 0, OCI_DEFAULT); Py_END_ALLOW_THREADS if (status != OCI_NO_DATA) { if (Environment_CheckForError(self->environment, status, diff -ur ./ExternalLobVar.c ../cx_Oracle-5.2-patched/ExternalLobVar.c --- ./ExternalLobVar.c 2015-06-15 20:16:14.000000000 -0400 +++ ../cx_Oracle-5.2-patched/ExternalLobVar.c 2015-10-14 12:05:01.000000000 -0400 @@ -275,10 +275,9 @@ else amount = 1; } length = amount; - if (var->lobVar->type == &vt_CLOB) + if ((var->lobVar->type == &vt_CLOB) || (var->lobVar->type == &vt_NCLOB)) + // Always use environment setting for character LOBs bufferSize = amount * var->lobVar->environment->maxBytesPerCharacter; - else if (var->lobVar->type == &vt_NCLOB) - bufferSize = amount * 2; else bufferSize = amount; // create a string for retrieving the value