86
86
#include < stdlib.h>
87
87
88
88
#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
91
91
// setting this define will allow using a query from a different
92
92
// thread than its database connection.
93
93
// warning - this is not fully tested and can lead to race conditions
@@ -355,7 +355,7 @@ struct QOCISpatialResultPrivate
355
355
QList<QOCISDOGeometryInd*> sdoind;
356
356
bool transaction;
357
357
int serverVersion;
358
- int prefetchRows, prefetchMem;
358
+ ub4 prefetchRows, prefetchMem;
359
359
OCIType *geometryTDO;
360
360
QOCISDOGeometryObj *geometryObj;
361
361
QOCISDOGeometryInd *geometryInd;
@@ -415,28 +415,23 @@ void QOCISpatialResultPrivate::setStatementAttributes()
415
415
416
416
int r = OCI_SUCCESS;
417
417
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 );
440
435
}
441
436
442
437
int QOCISpatialResultPrivate::bindValue ( OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos,
@@ -765,7 +760,7 @@ struct QOCISpatialDriverPrivate
765
760
bool transaction;
766
761
int serverVersion;
767
762
ub4 prefetchRows;
768
- ub2 prefetchMem;
763
+ ub4 prefetchMem;
769
764
QString user;
770
765
771
766
OCIType *geometryTDO;
@@ -782,7 +777,7 @@ QOCISpatialDriverPrivate::QOCISpatialDriverPrivate()
782
777
, err( 0 )
783
778
, transaction( false )
784
779
, serverVersion( -1 )
785
- , prefetchRows( 0xffffffff )
780
+ , prefetchRows( QOCISPATIAL_PREFETCH_ROWS )
786
781
, prefetchMem( QOCISPATIAL_PREFETCH_MEM )
787
782
, geometryTDO( 0 )
788
783
{
@@ -3379,15 +3374,19 @@ static void qParseOpts( const QString &options, QOCISpatialDriverPrivate *d )
3379
3374
bool ok;
3380
3375
if ( opt == QLatin1String ( " OCI_ATTR_PREFETCH_ROWS" ) )
3381
3376
{
3382
- d-> prefetchRows = val.toInt ( &ok );
3377
+ int intVal = val.toInt ( &ok );
3383
3378
if ( !ok )
3384
- d->prefetchRows = 0xffffffff ;
3379
+ d->prefetchRows = QOCISPATIAL_PREFETCH_ROWS;
3380
+ else if ( intVal >= 0 )
3381
+ d->prefetchRows = static_cast <ub4>( intVal );
3385
3382
}
3386
3383
else if ( opt == QLatin1String ( " OCI_ATTR_PREFETCH_MEMORY" ) )
3387
3384
{
3388
- d-> prefetchMem = val.toInt ( &ok );
3385
+ int intVal = val.toInt ( &ok );
3389
3386
if ( !ok )
3390
- d->prefetchMem = 0xffff ;
3387
+ d->prefetchMem = QOCISPATIAL_PREFETCH_MEM;
3388
+ else if ( intVal >= 0 )
3389
+ d->prefetchMem = static_cast <ub4>( intVal );
3391
3390
}
3392
3391
else
3393
3392
{
0 commit comments