Skip to content

Commit 3978bff

Browse files
committed
oracle provider:
* retrieve comment of materialized views (implements #10063) * use detected srid (fixes #10091) * initialize mUseEstimatedMetadata (fixes #10092) * also consider username in temporary saved credentials (fixes #10093)
1 parent 8fe53c0 commit 3978bff

File tree

2 files changed

+70
-23
lines changed

2 files changed

+70
-23
lines changed

src/providers/oracle/qgsoracleconn.cpp

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,21 @@ QgsOracleConn::QgsOracleConn( QgsDataSourceURI uri )
7676
QString username = uri.username();
7777
QString password = uri.password();
7878

79+
QString realm( database );
80+
if ( !username.isEmpty() )
81+
realm.prepend( username + "@" );
82+
7983
while ( !mDatabase.open() )
8084
{
81-
bool ok = QgsCredentials::instance()->get( database, username, password, mDatabase.lastError().text() );
85+
bool ok = QgsCredentials::instance()->get( realm, username, password, mDatabase.lastError().text() );
8286
if ( !ok )
8387
break;
8488

8589
if ( !username.isEmpty() )
90+
{
8691
uri.setUsername( username );
92+
realm = username + "@" + database;
93+
}
8794

8895
if ( !password.isEmpty() )
8996
uri.setPassword( password );
@@ -94,7 +101,7 @@ QgsOracleConn::QgsOracleConn( QgsDataSourceURI uri )
94101
}
95102

96103
if ( mDatabase.isOpen() )
97-
QgsCredentials::instance()->put( database, username, password );
104+
QgsCredentials::instance()->put( realm, username, password );
98105
}
99106

100107
if ( !mDatabase.isOpen() )
@@ -377,12 +384,35 @@ void QgsOracleConn::retrieveLayerTypes( QgsOracleLayerProperty &layerProperty, b
377384
where = layerProperty.sql;
378385
}
379386

387+
QGis::WkbType detectedType = layerProperty.types.value( 0, QGis::WKBUnknown );
388+
int detectedSrid = layerProperty.srids.value( 0, -1 );
389+
390+
Q_ASSERT( detectedType == QGis::WKBUnknown || detectedSrid <= 0 );
391+
380392
QSqlQuery qry( mDatabase );
381-
QString sql = QString( "SELECT DISTINCT t.%1.SDO_GTYPE,t.%1.SDO_SRID FROM %2 t WHERE NOT t.%1 IS NULL%3" )
382-
.arg( quotedIdentifier( layerProperty.geometryColName ) )
383-
.arg( table )
384-
.arg( where.isEmpty() ? "" : QString( " AND (%1)" ).arg( where ) );
385-
if ( !exec( qry, sql ) )
393+
int idx = 0;
394+
QString sql = "SELECT DISTINCT ";
395+
if ( detectedType == QGis::WKBUnknown )
396+
{
397+
sql += "t.%1.SDO_GTYPE";
398+
if ( detectedSrid <= 0 )
399+
{
400+
sql += ",";
401+
idx = 1;
402+
}
403+
}
404+
405+
if ( detectedSrid <= 0 )
406+
{
407+
sql += "t.%1.SDO_SRID";
408+
}
409+
410+
sql += " FROM %2 t WHERE NOT t.%1 IS NULL%3";
411+
412+
if ( !exec( qry, sql
413+
.arg( quotedIdentifier( layerProperty.geometryColName ) )
414+
.arg( table )
415+
.arg( where.isEmpty() ? "" : QString( " AND (%1)" ).arg( where ) ) ) )
386416
{
387417
QgsMessageLog::logMessage( tr( "SQL:%1\nerror:%2\n" )
388418
.arg( qry.lastQuery() )
@@ -397,19 +427,28 @@ void QgsOracleConn::retrieveLayerTypes( QgsOracleLayerProperty &layerProperty, b
397427
QSet<int> srids;
398428
while ( qry.next() )
399429
{
400-
QGis::WkbType type = wkbTypeFromDatabase( qry.value( 0 ).toInt() );
401-
if ( type == QGis::WKBUnknown )
430+
if ( detectedType == QGis::WKBUnknown )
402431
{
403-
QgsMessageLog::logMessage( tr( "Unsupported geometry type %1 in %2.%3.%4 ignored" )
404-
.arg( qry.value( 0 ).toInt() )
405-
.arg( layerProperty.ownerName ).arg( layerProperty.tableName ).arg( layerProperty.geometryColName ),
406-
tr( "Oracle" ) );
407-
continue;
432+
QGis::WkbType type = wkbTypeFromDatabase( qry.value( 0 ).toInt() );
433+
if ( type == QGis::WKBUnknown )
434+
{
435+
QgsMessageLog::logMessage( tr( "Unsupported geometry type %1 in %2.%3.%4 ignored" )
436+
.arg( qry.value( 0 ).toInt() )
437+
.arg( layerProperty.ownerName ).arg( layerProperty.tableName ).arg( layerProperty.geometryColName ),
438+
tr( "Oracle" ) );
439+
continue;
440+
}
441+
QgsDebugMsg( QString( "add type %1" ).arg( type ) );
442+
layerProperty.types << type;
443+
}
444+
else
445+
{
446+
layerProperty.types << detectedType;
408447
}
409-
QgsDebugMsg( QString( "add type %1" ).arg( type ) );
410-
layerProperty.types << type;
411-
layerProperty.srids << ( qry.value( 1 ).isNull() ? 0 : qry.value( 1 ).toInt() );
412-
srids << ( qry.value( 1 ).isNull() ? 0 : qry.value( 1 ).toInt() );
448+
449+
int srid = detectedSrid != -1 ? detectedSrid : ( qry.value( idx ).isNull() ? -1 : qry.value( idx ).toInt() );
450+
layerProperty.srids << srid;
451+
srids << srid;
413452
}
414453

415454
qry.finish();
@@ -466,7 +505,6 @@ QString QgsOracleConn::databaseTypeFilter( QString alias, QString geomCol, QGis:
466505
return QString::null;
467506
}
468507

469-
470508
QGis::WkbType QgsOracleConn::wkbTypeFromDatabase( int gtype )
471509
{
472510
QgsDebugMsg( QString( "entering %1" ).arg( gtype ) );

src/providers/oracle/qgsoracleprovider.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ QgsOracleProvider::QgsOracleProvider( QString const & uri )
6666
mSqlWhereClause = mUri.sql();
6767
mSrid = mUri.srid().toInt();
6868
mRequestedGeomType = mUri.wkbType();
69+
mUseEstimatedMetadata = mUri.useEstimatedMetadata();
6970

7071
mConnection = QgsOracleConn::connectDb( mUri.connectionInfo() );
7172
if ( !mConnection )
@@ -545,6 +546,13 @@ bool QgsOracleProvider::loadFields()
545546
{
546547
if ( qry.next() )
547548
mDataComment = qry.value( 0 ).toString();
549+
else if ( exec( qry, QString( "SELECT comments FROM all_mview_comments WHERE owner=%1 AND mview_name=%2" )
550+
.arg( quotedValue( mOwnerName ) )
551+
.arg( quotedValue( mTableName ) ) ) )
552+
{
553+
if ( qry.next() )
554+
mDataComment = qry.value( 0 ).toString();
555+
}
548556
}
549557
else
550558
{
@@ -2133,12 +2141,14 @@ bool QgsOracleProvider::getGeometryDetails()
21332141
}
21342142
}
21352143

2136-
if ( detectedType == QGis::WKBUnknown )
2144+
if ( detectedType == QGis::WKBUnknown || detectedSrid <= 0 )
21372145
{
21382146
QgsOracleLayerProperty layerProperty;
21392147
layerProperty.ownerName = ownerName;
21402148
layerProperty.tableName = tableName;
21412149
layerProperty.geometryColName = mGeometryColumn;
2150+
layerProperty.types << detectedType;
2151+
layerProperty.srids << detectedSrid;
21422152

21432153
QString delim = "";
21442154

@@ -2959,9 +2969,6 @@ QGISEXTERN bool deleteLayer( const QString& uri, QString& errCause )
29592969
return true;
29602970
}
29612971

2962-
// vim: set sw=2 :
2963-
2964-
29652972
// ----------
29662973

29672974

@@ -3014,3 +3021,5 @@ QVariant QgsOracleSharedData::lookupKey( QgsFeatureId featureId )
30143021
return it.value();
30153022
return QVariant();
30163023
}
3024+
3025+
// vim: set sw=2 :

0 commit comments

Comments
 (0)