Skip to content

Commit 1cc82af

Browse files
committed
oracle provider: also try sdo_filter on queries
1 parent d690d72 commit 1cc82af

File tree

1 file changed

+44
-41
lines changed

1 file changed

+44
-41
lines changed

src/providers/oracle/qgsoracleprovider.cpp

+44-41
Original file line numberDiff line numberDiff line change
@@ -695,29 +695,31 @@ bool QgsOracleProvider::loadFields()
695695
.arg( qry.lastError().text() ),
696696
tr( "Oracle" ) );
697697
}
698-
699-
if ( !mHasSpatialIndex )
700-
{
701-
mHasSpatialIndex = qry.exec( QString( "SELECT %2 FROM %1 WHERE sdo_filter(%2,mdsys.sdo_geometry(2003,%3,NULL,mdsys.sdo_elem_info_array(1,1003,3),mdsys.sdo_ordinate_array(-1,-1,1,1)))='TRUE'" )
702-
.arg( mQuery )
703-
.arg( quotedIdentifier( mGeometryColumn ) )
704-
.arg( mSrid < 1 ? "NULL" : QString::number( mSrid ) ) );
705-
if ( !mHasSpatialIndex )
706-
{
707-
QgsMessageLog::logMessage( tr( "No spatial index on column %1.%2.%3 found - expect poor performance." )
708-
.arg( mOwnerName )
709-
.arg( mTableName )
710-
.arg( mGeometryColumn ),
711-
tr( "Oracle" ) );
712-
}
713-
}
714698
}
715699

716-
qry.finish();
717-
718700
mEnabledCapabilities |= QgsVectorDataProvider::CreateSpatialIndex;
719701
}
720702

703+
if ( !mGeometryColumn.isEmpty() )
704+
{
705+
if ( !mHasSpatialIndex )
706+
{
707+
mHasSpatialIndex = qry.exec( QString( "SELECT %2 FROM %1 WHERE sdo_filter(%2,mdsys.sdo_geometry(2003,%3,NULL,mdsys.sdo_elem_info_array(1,1003,3),mdsys.sdo_ordinate_array(-1,-1,1,1)))='TRUE'" )
708+
.arg( mQuery )
709+
.arg( quotedIdentifier( mGeometryColumn ) )
710+
.arg( mSrid < 1 ? "NULL" : QString::number( mSrid ) ) );
711+
}
712+
713+
if ( !mHasSpatialIndex )
714+
{
715+
QgsMessageLog::logMessage( tr( "No spatial index on column %1 found - expect poor performance." )
716+
.arg( mGeometryColumn ),
717+
tr( "Oracle" ) );
718+
}
719+
}
720+
721+
qry.finish();
722+
721723
if ( !exec( qry, QString( "SELECT * FROM %1 WHERE 1=0" ).arg( mQuery ) ) )
722724
{
723725
QgsMessageLog::logMessage( tr( "Retrieving fields from '%1' failed [%2]" ).arg( mQuery ).arg( qry.lastError().text() ), tr( "Oracle" ) );
@@ -818,7 +820,6 @@ bool QgsOracleProvider::hasSufficientPermsAndCapabilities()
818820
.arg( qry.lastQuery() ),
819821
tr( "Oracle" ) );
820822
}
821-
822823
}
823824
else
824825
{
@@ -2058,38 +2059,40 @@ QgsRectangle QgsOracleProvider::extent()
20582059
{
20592060
QString sql;
20602061
QSqlQuery qry( *mConnection );
2062+
bool ok = false;
20612063

2062-
if ( mUseEstimatedMetadata )
2064+
if ( !mIsQuery )
20632065
{
2064-
if ( exec( qry, QString( "SELECT sdo_lb,sdo_ub FROM mdsys.all_sdo_geom_metadata m, table(m.diminfo) WHERE owner=%1 AND table_name=%2 AND column_name=%3 AND sdo_dimname='X'" )
2065-
.arg( quotedValue( mOwnerName ) )
2066-
.arg( quotedValue( mTableName ) )
2067-
.arg( quotedValue( mGeometryColumn ) ) ) && qry.next() )
2066+
if ( mUseEstimatedMetadata )
20682067
{
2069-
mLayerExtent.setXMinimum( qry.value( 0 ).toDouble() );
2070-
mLayerExtent.setXMaximum( qry.value( 1 ).toDouble() );
2071-
2072-
if ( exec( qry, QString( "SELECT sdo_lb,sdo_ub FROM mdsys.all_sdo_geom_metadata m, table(m.diminfo) WHERE owner=%1 AND table_name=%2 AND column_name=%3 AND sdo_dimname='Y'" )
2068+
if ( exec( qry, QString( "SELECT sdo_lb,sdo_ub FROM mdsys.all_sdo_geom_metadata m, table(m.diminfo) WHERE owner=%1 AND table_name=%2 AND column_name=%3 AND sdo_dimname='X'" )
20732069
.arg( quotedValue( mOwnerName ) )
20742070
.arg( quotedValue( mTableName ) )
2075-
.arg( quotedValue( mGeometryColumn ) ) ) && qry.next() )
2071+
.arg( quotedValue( mGeometryColumn ) ) ) && qry.next() )
20762072
{
2077-
mLayerExtent.setYMinimum( qry.value( 0 ).toDouble() );
2078-
mLayerExtent.setYMaximum( qry.value( 1 ).toDouble() );
2079-
return mLayerExtent;
2073+
mLayerExtent.setXMinimum( qry.value( 0 ).toDouble() );
2074+
mLayerExtent.setXMaximum( qry.value( 1 ).toDouble() );
2075+
2076+
if ( exec( qry, QString( "SELECT sdo_lb,sdo_ub FROM mdsys.all_sdo_geom_metadata m, table(m.diminfo) WHERE owner=%1 AND table_name=%2 AND column_name=%3 AND sdo_dimname='Y'" )
2077+
.arg( quotedValue( mOwnerName ) )
2078+
.arg( quotedValue( mTableName ) )
2079+
.arg( quotedValue( mGeometryColumn ) ) ) && qry.next() )
2080+
{
2081+
mLayerExtent.setYMinimum( qry.value( 0 ).toDouble() );
2082+
mLayerExtent.setYMaximum( qry.value( 1 ).toDouble() );
2083+
return mLayerExtent;
2084+
}
20802085
}
20812086
}
2082-
}
2083-
2084-
bool ok = false;
20852087

2086-
if ( mHasSpatialIndex && ( mUseEstimatedMetadata || mSqlWhereClause.isEmpty() ) )
2087-
{
2088-
sql = QString( "SELECT SDO_TUNE.EXTENT_OF(%1,%2) FROM dual" )
2089-
.arg( quotedValue( QString( "%1.%2" ).arg( mOwnerName ).arg( mTableName ) ) )
2090-
.arg( quotedValue( mGeometryColumn ) );
2088+
if ( mHasSpatialIndex && ( mUseEstimatedMetadata || mSqlWhereClause.isEmpty() ) )
2089+
{
2090+
sql = QString( "SELECT SDO_TUNE.EXTENT_OF(%1,%2) FROM dual" )
2091+
.arg( quotedValue( QString( "%1.%2" ).arg( mOwnerName ).arg( mTableName ) ) )
2092+
.arg( quotedValue( mGeometryColumn ) );
20912093

2092-
ok = exec( qry, sql );
2094+
ok = exec( qry, sql );
2095+
}
20932096
}
20942097

20952098
if ( !ok )

0 commit comments

Comments
 (0)