Skip to content

Commit 772dc1d

Browse files
committed
oracle provider: enable server-side simplification only with Locator >=11g or Spatial
1 parent 939fc83 commit 772dc1d

5 files changed

+28
-4
lines changed

src/core/qgsvectordataprovider.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ QString QgsVectorDataProvider::capabilitiesString() const
216216

217217
if ( abilities & QgsVectorDataProvider::ChangeFeatures )
218218
{
219-
abilitiesList += tr( "Change Geometries and Attributes at once" );
219+
abilitiesList += tr( "Joint Geometry and Attributes updates" );
220220
QgsDebugMsg( "Capability: change attributes and geometries at once" );
221221
}
222222

src/providers/oracle/qgsoracleconn.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ QgsOracleConn::QgsOracleConn( QgsDataSourceURI uri )
5959
: mRef( 1 )
6060
, mCurrentUser( QString::null )
6161
, mHasSpatial( -1 )
62+
, mMajorVersion( -1 )
6263
{
6364
QgsDebugMsg( QString( "New Oracle connection for " ) + uri.connectionInfo() );
6465

@@ -773,6 +774,21 @@ QString QgsOracleConn::databaseName( QString database, QString host, QString por
773774
return db;
774775
}
775776

777+
int QgsOracleConn::majorVersion()
778+
{
779+
if ( mMajorVersion == -1 )
780+
{
781+
QSqlQuery qry( mDatabase );
782+
if ( exec( qry, "SELECT banner FROM v$version WHERE banner LIKE 'Oracle Database%'" ) && qry.next() )
783+
{
784+
QRegExp vers( "([0-9]+)\\.[0-9\\.]+[0-9]" );
785+
if ( vers.indexIn( qry.value( 0 ).toString() ) >= 0 )
786+
mMajorVersion = vers.cap( 1 ).toInt();
787+
}
788+
}
789+
return mMajorVersion;
790+
}
791+
776792
bool QgsOracleConn::hasSpatial()
777793
{
778794
if ( mHasSpatial == -1 )

src/providers/oracle/qgsoracleconn.h

+4
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ class QgsOracleConn : public QObject
139139
QString currentUser();
140140

141141
bool hasSpatial();
142+
int majorVersion();
142143

143144
static const int sGeomTypeSelectLimit;
144145

@@ -177,6 +178,9 @@ class QgsOracleConn : public QObject
177178
//! has spatial
178179
int mHasSpatial;
179180

181+
//! major database version
182+
int mMajorVersion;
183+
180184
QSqlDatabase mDatabase;
181185
QSqlQuery mQuery;
182186

src/providers/oracle/qgsoraclefeatureiterator.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ bool QgsOracleFeatureIterator::openQuery( QString whereClause )
413413

414414
bool QgsOracleFeatureIterator::providerCanSimplify( QgsSimplifyMethod::MethodType methodType ) const
415415
{
416-
return methodType == QgsSimplifyMethod::OptimizeForRendering;
416+
return ( mConnection->majorVersion() > 10 || mConnection->hasSpatial() ) && methodType == QgsSimplifyMethod::OptimizeForRendering;
417417
}
418418

419419
// -----------

src/providers/oracle/qgsoracleprovider.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -747,8 +747,12 @@ bool QgsOracleProvider::hasSufficientPermsAndCapabilities()
747747

748748
mEnabledCapabilities = QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::SelectGeometryAtId;
749749

750-
// supports geometry simplification on provider side
751-
mEnabledCapabilities |= QgsVectorDataProvider::SimplifyGeometries;
750+
if ( mConnection->majorVersion() > 10 || mConnection->hasSpatial() )
751+
{
752+
// 10g doesn't support SDO_UTIL in Oracle Locator
753+
// supports geometry simplification on provider side
754+
mEnabledCapabilities |= QgsVectorDataProvider::SimplifyGeometries;
755+
}
752756

753757
QSqlQuery qry( *mConnection );
754758
if ( !mIsQuery )

0 commit comments

Comments
 (0)