Skip to content

Commit b2b7f54

Browse files
authoredNov 2, 2018
Merge pull request #8387 from rldhont/bjornhartell-oci-fix-218
[oracle] Prefetch memory variable changed to 32-bit and default raised to 8MB
2 parents cbd7ade + 0e066db commit b2b7f54

File tree

1 file changed

+30
-31
lines changed

1 file changed

+30
-31
lines changed
 

‎src/providers/oracle/ocispatial/qsql_ocispatial.cpp

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@
8686
#include <stdlib.h>
8787

8888
#define QOCISPATIAL_DYNAMIC_CHUNK_SIZE 65535
89-
#define QOCISPATIAL_PREFETCH_MEM 10240
90-
89+
#define QOCISPATIAL_PREFETCH_ROWS 10000
90+
#define QOCISPATIAL_PREFETCH_MEM 8388608 // 8MB
9191
// setting this define will allow using a query from a different
9292
// thread than its database connection.
9393
// warning - this is not fully tested and can lead to race conditions
@@ -355,7 +355,7 @@ struct QOCISpatialResultPrivate
355355
QList<QOCISDOGeometryInd*> sdoind;
356356
bool transaction;
357357
int serverVersion;
358-
int prefetchRows, prefetchMem;
358+
ub4 prefetchRows, prefetchMem;
359359
OCIType *geometryTDO;
360360
QOCISDOGeometryObj *geometryObj;
361361
QOCISDOGeometryInd *geometryInd;
@@ -415,28 +415,23 @@ void QOCISpatialResultPrivate::setStatementAttributes()
415415

416416
int r = OCI_SUCCESS;
417417

418-
if ( prefetchRows >= 0 )
419-
{
420-
r = OCIAttrSet( sql,
421-
OCI_HTYPE_STMT,
422-
&prefetchRows,
423-
0,
424-
OCI_ATTR_PREFETCH_ROWS,
425-
err );
426-
if ( r != OCI_SUCCESS )
427-
qOraWarning( "Couldn't set OCI_ATTR_PREFETCH_ROWS: ", err );
428-
}
429-
if ( prefetchMem >= 0 )
430-
{
431-
r = OCIAttrSet( sql,
432-
OCI_HTYPE_STMT,
433-
&prefetchMem,
434-
0,
435-
OCI_ATTR_PREFETCH_MEMORY,
436-
err );
437-
if ( r != OCI_SUCCESS )
438-
qOraWarning( "Couldn't set OCI_ATTR_PREFETCH_MEMORY: ", err );
439-
}
418+
r = OCIAttrSet( sql,
419+
OCI_HTYPE_STMT,
420+
&prefetchRows,
421+
0,
422+
OCI_ATTR_PREFETCH_ROWS,
423+
err );
424+
if ( r != OCI_SUCCESS )
425+
qOraWarning( "Couldn't set OCI_ATTR_PREFETCH_ROWS: ", err );
426+
r = OCIAttrSet( sql,
427+
OCI_HTYPE_STMT,
428+
&prefetchMem,
429+
0,
430+
OCI_ATTR_PREFETCH_MEMORY,
431+
err );
432+
if ( r != OCI_SUCCESS )
433+
qOraWarning( "QOCISpatialResultPrivate::setStatementAttributes:"
434+
" Couldn't set OCI_ATTR_PREFETCH_MEMORY: ", err );
440435
}
441436

442437
int QOCISpatialResultPrivate::bindValue( OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos,
@@ -765,7 +760,7 @@ struct QOCISpatialDriverPrivate
765760
bool transaction;
766761
int serverVersion;
767762
ub4 prefetchRows;
768-
ub2 prefetchMem;
763+
ub4 prefetchMem;
769764
QString user;
770765

771766
OCIType *geometryTDO;
@@ -782,7 +777,7 @@ QOCISpatialDriverPrivate::QOCISpatialDriverPrivate()
782777
, err( 0 )
783778
, transaction( false )
784779
, serverVersion( -1 )
785-
, prefetchRows( 0xffffffff )
780+
, prefetchRows( QOCISPATIAL_PREFETCH_ROWS )
786781
, prefetchMem( QOCISPATIAL_PREFETCH_MEM )
787782
, geometryTDO( 0 )
788783
{
@@ -3379,15 +3374,19 @@ static void qParseOpts( const QString &options, QOCISpatialDriverPrivate *d )
33793374
bool ok;
33803375
if ( opt == QLatin1String( "OCI_ATTR_PREFETCH_ROWS" ) )
33813376
{
3382-
d->prefetchRows = val.toInt( &ok );
3377+
int intVal = val.toInt( &ok );
33833378
if ( !ok )
3384-
d->prefetchRows = 0xffffffff;
3379+
d->prefetchRows = QOCISPATIAL_PREFETCH_ROWS;
3380+
else if ( intVal >= 0 )
3381+
d->prefetchRows = static_cast<ub4>( intVal );
33853382
}
33863383
else if ( opt == QLatin1String( "OCI_ATTR_PREFETCH_MEMORY" ) )
33873384
{
3388-
d->prefetchMem = val.toInt( &ok );
3385+
int intVal = val.toInt( &ok );
33893386
if ( !ok )
3390-
d->prefetchMem = 0xffff;
3387+
d->prefetchMem = QOCISPATIAL_PREFETCH_MEM;
3388+
else if ( intVal >= 0 )
3389+
d->prefetchMem = static_cast<ub4>( intVal );
33913390
}
33923391
else
33933392
{

0 commit comments

Comments
 (0)
Please sign in to comment.