QString QgsOracleConn::toPoolName( QgsDataSourceURI uri ) { QString conninfo = uri.connectionInfo(); if ( uri.hasParam( "dbworkspace" ) ) conninfo += " dbworkspace=" + uri.param( "dbworkspace" ); return conninfo; }
QgsGrassGisLib::Raster QgsGrassGisLib::raster( QString name ) { QgsDebugMsg( "name = " + name ); foreach ( Raster raster, mRasters ) { if ( raster.name == name ) return raster; } QString providerKey; QString dataSource; int band = 1; if ( name.contains( "provider=" ) ) // encoded uri { QgsDataSourceURI uri; uri.setEncodedUri( name.toLocal8Bit() ); if ( uri.hasParam( "band" ) ) { band = uri.param( "band" ).toInt(); } providerKey = uri.param( "provider" ); if ( providerKey == "gdal" ) { dataSource = uri.param( "path" ); } else { uri.removeParam( "band" ); uri.removeParam( "provider" ); dataSource = uri.encodedUri(); } } else // simple GDAL path { providerKey = "gdal"; dataSource = name; band = 1; } QgsDebugMsg( "providerKey = " + providerKey ); QgsDebugMsg( "dataSource = " + dataSource ); QgsDebugMsg( QString( "band = %1" ).arg( band ) ); Raster raster; raster.name = name; raster.band = band; raster.provider = ( QgsRasterDataProvider* )QgsProviderRegistry::instance()->provider( providerKey, dataSource ); if ( !raster.provider || !raster.provider->isValid() ) { // No fatal, it may be used to test file existence //fatal( "Cannot load raster provider with data source: " + dataSource ); } else { raster.input = raster.provider; if ( band < 1 || band > raster.provider->bandCount() ) { fatal( "Band out of range" ); } QgsDebugMsg( QString( "mCrs valid = %1 = %2" ).arg( mCrs.isValid() ).arg( mCrs.toProj4() ) ); QgsDebugMsg( QString( "crs valid = %1 = %2" ).arg( raster.provider->crs().isValid() ).arg( raster.provider->crs().toProj4() ) ); if ( mCrs.isValid() ) { // GDAL provider loads data without CRS as EPSG:4326!!! Verify, it should give // invalid CRS instead. if ( !raster.provider->crs().isValid() ) { fatal( "Output CRS specified but input CRS is unknown" ); } if ( mCrs != raster.provider->crs() ) { raster.projector = new QgsRasterProjector(); raster.projector->setCRS( raster.provider->crs(), mCrs ); raster.projector->setInput( raster.provider ); raster.input = raster.projector; } } } raster.fd = mRasters.size(); mRasters.insert( raster.fd, raster ); return raster; }
QgsOracleConn::QgsOracleConn( QgsDataSourceURI uri ) : mRef( 1 ) , mCurrentUser( QString::null ) , mHasSpatial( -1 ) { QgsDebugMsg( QString( "New Oracle connection for " ) + uri.connectionInfo() ); QString database = databaseName( uri.database(), uri.host(), uri.port() ); QgsDebugMsg( QString( "New Oracle database " ) + database ); mDatabase = QSqlDatabase::addDatabase( "QOCISPATIAL", QString( "oracle%1" ).arg( snConnections++ ) ); mDatabase.setDatabaseName( database ); QString options = uri.hasParam( "dboptions" ) ? uri.param( "dboptions" ) : "OCI_ATTR_PREFETCH_ROWS=1000"; mDatabase.setConnectOptions( options ); mDatabase.setUserName( uri.username() ); mDatabase.setPassword( uri.password() ); QgsDebugMsg( QString( "Connecting with options: " ) + options ); if ( !mDatabase.open() ) { QString username = uri.username(); QString password = uri.password(); QString realm( database ); if ( !username.isEmpty() ) realm.prepend( username + "@" ); QgsCredentials::instance()->lock(); while ( !mDatabase.open() ) { bool ok = QgsCredentials::instance()->get( realm, username, password, mDatabase.lastError().text() ); if ( !ok ) break; if ( !username.isEmpty() ) { uri.setUsername( username ); realm = username + "@" + database; } if ( !password.isEmpty() ) uri.setPassword( password ); QgsDebugMsg( "Connecting to " + database ); mDatabase.setUserName( username ); mDatabase.setPassword( password ); } if ( mDatabase.isOpen() ) QgsCredentials::instance()->put( realm, username, password ); QgsCredentials::instance()->unlock(); } if ( !mDatabase.isOpen() ) { mDatabase.close(); QgsMessageLog::logMessage( tr( "Connection to database failed" ), tr( "Oracle" ) ); mRef = 0; return; } }