File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -483,6 +483,16 @@ typedef struct eBaton
483483 }
484484 }
485485
486+ // If Blob data was fetched as Buffer, deallocate each buffer
487+ if ( (defines[i].fetchType == dpi::DpiRaw) &&
488+ mInfo [i].dbType == dpi::DpiBlob )
489+ {
490+ for ( unsigned int j = 0 ; j < maxRows ; j ++ )
491+ {
492+ free ( ((char **)(defines[i].buf ))[j] );
493+ }
494+ }
495+
486496 /*
487497 * Buf and indicator will be allocated in all cases.
488498 * len will NOT be allocated for CLOB-as-STRING/BLOB-as-BUFFER
Original file line number Diff line number Diff line change @@ -711,13 +711,15 @@ void ResultSet::clearFetchBuffer( unsigned int numRows )
711711 {
712712 if ( defineBuffers_[i].dttmarr )
713713 {
714+ /* Date/Timestamp columns */
714715 defineBuffers_[i].dttmarr ->release ();
715716 defineBuffers_[i].extbuf = NULL ;
716717 }
717718 else if ( ( defineBuffers_[i].fetchType == DpiClob ) ||
718719 ( defineBuffers_[i].fetchType == DpiBlob ) ||
719720 ( defineBuffers_[i].fetchType == DpiBfile ) )
720721 {
722+ /* Lob columns */
721723 for (unsigned int j = 0 ; j < numRows; j++)
722724 {
723725 if (((Descriptor **)(defineBuffers_[i].buf ))[j])
@@ -727,6 +729,21 @@ void ResultSet::clearFetchBuffer( unsigned int numRows )
727729 }
728730 }
729731 }
732+ else if ( ( ( defineBuffers_[i].fetchType == dpi::DpiVarChar ) &&
733+ ( mInfo_ [i].dbType == dpi::DpiClob ) ) ||
734+ ( ( defineBuffers_[i].fetchType == dpi::DpiRaw ) &&
735+ ( mInfo_ [i].dbType == dpi::DpiBlob ) ) )
736+ {
737+ /* CLOB-as-STRING or BLOB-as-BUFFER case */
738+ for ( unsigned int j = 0 ; j < numRows ; j ++ )
739+ {
740+ if ( ( (char **)defineBuffers_[i].buf )[j] )
741+ {
742+ free ( ( (char **)defineBuffers_[i].buf )[j] );
743+ ( ( char **)defineBuffers_[i].buf )[j] = NULL ;
744+ }
745+ }
746+ }
730747
731748 free (defineBuffers_[i].buf );
732749 free (defineBuffers_[i].len );
You can’t perform that action at this time.
0 commit comments