QgsDataSourceUri QgsAuxiliaryStorage::parseOgrUri( const QgsDataSourceUri &uri ) { QgsDataSourceUri newUri; // parsing for ogr style uri : // " filePath|layername='tableName' table="" sql=" QStringList uriParts = uri.uri().split( '|' ); if ( uriParts.count() < 2 ) return newUri; const QString databasePath = uriParts[0].replace( ' ', "" ); const QString table = uriParts[1]; QStringList tableParts = table.split( ' ' ); if ( tableParts.count() < 1 ) return newUri; const QString tableName = tableParts[0].replace( QStringLiteral( "layername=" ), QString() ); newUri.setDataSource( QString(), tableName, QString() ); newUri.setDatabase( databasePath ); return newUri; }
void QgsAfsSourceSelect::buildQuery( const QgsOwsConnection &connection, const QModelIndex& index ) { if ( !index.isValid() ) { return; } QModelIndex filterIndex = index.sibling( index.row(), 4 ); QString id = index.sibling( index.row(), 0 ).data().toString(); // Query available fields QgsDataSourceUri ds = connection.uri(); QString url = ds.param( "url" ) + "/" + id; ds.removeParam( "url" ); ds.setParam( "url", url ); QgsAfsProvider provider( ds.uri() ); if ( !provider.isValid() ) { return; } //show expression builder QgsExpressionBuilderDialog d( 0, filterIndex.data().toString() ); //add available attributes to expression builder QgsExpressionBuilderWidget* w = d.expressionBuilder(); w->loadFieldNames( provider.fields() ); if ( d.exec() == QDialog::Accepted ) { QgsDebugMsg( "Expression text = " + w->expressionText() ); mModelProxy->setData( filterIndex, QVariant( w->expressionText() ) ); } }
void QgsOSMExportDialog::onOK() { if ( !openDatabase() ) return; QgsOSMDatabase::ExportType type; if ( radPoints->isChecked() ) type = QgsOSMDatabase::Point; else if ( radPolylines->isChecked() ) type = QgsOSMDatabase::Polyline; else type = QgsOSMDatabase::Polygon; buttonBox->setEnabled( false ); QApplication::setOverrideCursor( Qt::WaitCursor ); QStringList tagKeys; QStringList notNullTagKeys; for ( int i = 0; i < mTagsModel->rowCount(); ++i ) { QStandardItem* item = mTagsModel->item( i, 0 ); if ( item->checkState() == Qt::Checked ) tagKeys << item->text(); QStandardItem* item2 = mTagsModel->item( i, 2 ); if ( item2->checkState() == Qt::Checked ) notNullTagKeys << item->text(); } bool res = mDatabase->exportSpatiaLite( type, editLayerName->text(), tagKeys, notNullTagKeys ); // load the layer into canvas if that was requested if ( chkLoadWhenFinished->isChecked() ) { QgsDataSourceUri uri; uri.setDatabase( editDbFileName->text() ); uri.setDataSource( QString(), editLayerName->text(), "geometry" ); QgsVectorLayer* vlayer = new QgsVectorLayer( uri.uri(), editLayerName->text(), "spatialite" ); if ( vlayer->isValid() ) QgsMapLayerRegistry::instance()->addMapLayer( vlayer ); } QApplication::restoreOverrideCursor(); buttonBox->setEnabled( true ); if ( res ) { QMessageBox::information( this, tr( "OpenStreetMap export" ), tr( "Export has been successful." ) ); } else { QMessageBox::critical( this, tr( "OpenStreetMap export" ), tr( "Failed to export OSM data:\n%1" ).arg( mDatabase->errorString() ) ); } mDatabase->close(); }
bool QgsDb2Provider::setSubsetString( const QString& theSQL, bool ) { QString prevWhere = mSqlWhereClause; QgsDebugMsg( theSQL ); mSqlWhereClause = theSQL.trimmed(); QString sql = QString( "SELECT COUNT(*) FROM " ); sql += QString( "%1.%2" ).arg( mSchemaName, mTableName ); if ( !mSqlWhereClause.isEmpty() ) { sql += QString( " WHERE %1" ).arg( mSqlWhereClause ); } if ( !openDatabase( mDatabase ) ) { return false; } QSqlQuery query = QSqlQuery( mDatabase ); query.setForwardOnly( true ); QgsDebugMsg( sql ); if ( !query.exec( sql ) ) { pushError( query.lastError().text() ); mSqlWhereClause = prevWhere; QgsDebugMsg( query.lastError().text() ); return false; } if ( query.isActive() && query.next() ) { mNumberFeatures = query.value( 0 ).toInt(); QgsDebugMsg( QString( "count: %1" ).arg( mNumberFeatures ) ); } else { pushError( query.lastError().text() ); mSqlWhereClause = prevWhere; QgsDebugMsg( query.lastError().text() ); return false; } QgsDataSourceUri anUri = QgsDataSourceUri( dataSourceUri() ); anUri.setSql( mSqlWhereClause ); setDataSourceUri( anUri.uri() ); mExtent.setMinimal(); emit dataChanged(); return true; }
QString QgsAmsSourceSelect::getLayerURI( const QgsOwsConnection &connection, const QString &layerTitle, const QString & /*layerName*/, const QString &crs, const QString & /*filter*/, const QgsRectangle & /*bBox*/ ) const { QgsDataSourceUri ds = connection.uri(); ds.setParam( QStringLiteral( "layer" ), layerTitle ); ds.setParam( QStringLiteral( "crs" ), crs ); ds.setParam( QStringLiteral( "format" ), getSelectedImageEncoding() ); return ds.uri(); }
QString QgsAmsSourceSelect::getLayerURI( const QgsOwsConnection &connection, const QString &layerTitle, const QString & /*layerName*/, const QString &crs, const QString & /*filter*/, const QgsRectangle & /*bBox*/, const QString &layerId ) const { QgsDataSourceUri ds = connection.uri(); QString url = layerTitle; QString trimmedUrl = layerId.isEmpty() ? url : url.left( url.length() - 1 - layerId.length() ); // trim '/0' from end of url -- AMS provider requires this omitted ds.removeParam( QStringLiteral( "url" ) ); ds.setParam( QStringLiteral( "url" ), trimmedUrl ); ds.setParam( QStringLiteral( "layer" ), layerId ); ds.setParam( QStringLiteral( "crs" ), crs ); ds.setParam( QStringLiteral( "format" ), getSelectedImageEncoding() ); return ds.uri(); }
QString QgsAfsSourceSelect::getLayerURI( const QgsOwsConnection& connection, const QString& layerTitle, const QString& /*layerName*/, const QString& crs, const QString& filter, const QgsRectangle& bBox ) const { QgsDataSourceUri ds = connection.uri(); QString url = ds.param( "url" ) + "/" + layerTitle; ds.removeParam( "url" ); ds.setParam( "url", url ); ds.setParam( "filter", filter ); ds.setParam( "crs", crs ); if ( !bBox.isEmpty() ) { ds.setParam( "bbox", QString( "%1,%2,%3,%4" ).arg( bBox.xMinimum() ).arg( bBox.yMinimum() ).arg( bBox.xMaximum() ).arg( bBox.yMaximum() ) ); } return ds.uri(); }
bool QgsPGConnectionItem::handleDrop( const QMimeData *data, const QString &toSchema ) { if ( !QgsMimeDataUtils::isUriList( data ) ) return false; // TODO: probably should show a GUI with settings etc QgsDataSourceUri uri = QgsPostgresConn::connUri( mName ); QStringList importResults; bool hasError = false; QgsMimeDataUtils::UriList lst = QgsMimeDataUtils::decodeUriList( data ); const auto constLst = lst; for ( const QgsMimeDataUtils::Uri &u : constLst ) { // open the source layer bool owner; QString error; QgsVectorLayer *srcLayer = u.vectorLayer( owner, error ); if ( !srcLayer ) { importResults.append( tr( "%1: %2" ).arg( u.name, error ) ); hasError = true; continue; } if ( srcLayer->isValid() ) { uri.setDataSource( QString(), u.name, srcLayer->geometryType() != QgsWkbTypes::NullGeometry ? QStringLiteral( "geom" ) : QString() ); QgsDebugMsg( "URI " + uri.uri( false ) ); if ( !toSchema.isNull() ) { uri.setSchema( toSchema ); } QVariantMap options; options.insert( QStringLiteral( "forceSinglePartGeometryType" ), true ); std::unique_ptr< QgsVectorLayerExporterTask > exportTask( new QgsVectorLayerExporterTask( srcLayer, uri.uri( false ), QStringLiteral( "postgres" ), srcLayer->crs(), options, owner ) ); // when export is successful: connect( exportTask.get(), &QgsVectorLayerExporterTask::exportComplete, this, [ = ]() { // this is gross - TODO - find a way to get access to messageBar from data items QMessageBox::information( nullptr, tr( "Import to PostGIS database" ), tr( "Import was successful." ) ); refreshSchema( toSchema ); } ); // when an error occurs: connect( exportTask.get(), &QgsVectorLayerExporterTask::errorOccurred, this, [ = ]( int error, const QString & errorMessage ) { if ( error != QgsVectorLayerExporter::ErrUserCanceled ) { QgsMessageOutput *output = QgsMessageOutput::createMessageOutput(); output->setTitle( tr( "Import to PostGIS database" ) ); output->setMessage( tr( "Failed to import some layers!\n\n" ) + errorMessage, QgsMessageOutput::MessageText ); output->showMessage(); } refreshSchema( toSchema ); } ); QgsApplication::taskManager()->addTask( exportTask.release() ); } else { importResults.append( tr( "%1: Not a valid layer!" ).arg( u.name ) ); hasError = true; } } if ( hasError ) { QgsMessageOutput *output = QgsMessageOutput::createMessageOutput(); output->setTitle( tr( "Import to PostGIS database" ) ); output->setMessage( tr( "Failed to import some layers!\n\n" ) + importResults.join( QStringLiteral( "\n" ) ), QgsMessageOutput::MessageText ); output->showMessage(); } return true; }