Exemplo n.º 1
0
QString QgsOracleConn::toPoolName( QgsDataSourceURI uri )
{
  QString conninfo = uri.connectionInfo();
  if ( uri.hasParam( "dbworkspace" ) )
    conninfo += " dbworkspace=" + uri.param( "dbworkspace" );
  return conninfo;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
  }
}