void QgsPGSchemaItem::renameSchema() { QgsNewNameDialog dlg( tr( "schema '%1'" ).arg( mName ), mName ); dlg.setWindowTitle( tr( "Rename Schema" ) ); if ( dlg.exec() != QDialog::Accepted || dlg.name() == mName ) return; QString schemaName = QgsPostgresConn::quotedIdentifier( mName ); QgsDataSourceUri uri = QgsPostgresConn::connUri( mConnectionName ); QgsPostgresConn *conn = QgsPostgresConn::connectDb( uri.connectionInfo( false ), false ); if ( !conn ) { QMessageBox::warning( nullptr, tr( "Rename Schema" ), tr( "Unable to rename schema." ) ); return; } //rename the schema QString sql = QStringLiteral( "ALTER SCHEMA %1 RENAME TO %2" ) .arg( schemaName, QgsPostgresConn::quotedIdentifier( dlg.name() ) ); QgsPostgresResult result( conn->PQexec( sql ) ); if ( result.PQresultStatus() != PGRES_COMMAND_OK ) { QMessageBox::warning( nullptr, tr( "Rename Schema" ), tr( "Unable to rename schema %1\n%2" ).arg( schemaName, result.PQresultErrorMessage() ) ); conn->unref(); return; } conn->unref(); QMessageBox::information( nullptr, tr( "Rename Schema" ), tr( "Schema renamed successfully." ) ); if ( mParent ) mParent->refresh(); }
void QgsPGConnectionItem::createSchema() { QString schemaName = QInputDialog::getText( nullptr, tr( "Create Schema" ), tr( "Schema name:" ) ); if ( schemaName.isEmpty() ) return; QgsDataSourceUri uri = QgsPostgresConn::connUri( mName ); QgsPostgresConn *conn = QgsPostgresConn::connectDb( uri.connectionInfo( false ), false ); if ( !conn ) { QMessageBox::warning( nullptr, tr( "Create Schema" ), tr( "Unable to create schema." ) ); return; } //create the schema QString sql = QStringLiteral( "CREATE SCHEMA %1" ).arg( QgsPostgresConn::quotedIdentifier( schemaName ) ); QgsPostgresResult result( conn->PQexec( sql ) ); if ( result.PQresultStatus() != PGRES_COMMAND_OK ) { QMessageBox::warning( nullptr, tr( "Create Schema" ), tr( "Unable to create schema %1\n%2" ).arg( schemaName, result.PQresultErrorMessage() ) ); conn->unref(); return; } conn->unref(); refresh(); // the parent should be updated if ( mParent ) mParent->refreshConnections(); }
void QgsPGLayerItem::renameLayer() { QString typeName = mLayerProperty.isView ? tr( "View" ) : tr( "Table" ); QString lowerTypeName = mLayerProperty.isView ? tr( "view" ) : tr( "table" ); QgsNewNameDialog dlg( tr( "%1 %2.%3" ).arg( lowerTypeName, mLayerProperty.schemaName, mLayerProperty.tableName ), mLayerProperty.tableName ); dlg.setWindowTitle( tr( "Rename %1" ).arg( typeName ) ); if ( dlg.exec() != QDialog::Accepted || dlg.name() == mLayerProperty.tableName ) return; QString schemaName = mLayerProperty.schemaName; QString tableName = mLayerProperty.tableName; QString schemaTableName; if ( !schemaName.isEmpty() ) { schemaTableName = QgsPostgresConn::quotedIdentifier( schemaName ) + '.'; } QString oldName = schemaTableName + QgsPostgresConn::quotedIdentifier( tableName ); QString newName = QgsPostgresConn::quotedIdentifier( dlg.name() ); QgsDataSourceUri dsUri( mUri ); QgsPostgresConn *conn = QgsPostgresConn::connectDb( dsUri.connectionInfo( false ), false ); if ( !conn ) { QMessageBox::warning( nullptr, tr( "Rename %1" ).arg( typeName ), tr( "Unable to rename %1." ).arg( lowerTypeName ) ); return; } //rename the layer QString sql; if ( mLayerProperty.isView ) { sql = QStringLiteral( "ALTER %1 VIEW %2 RENAME TO %3" ).arg( mLayerProperty.relKind == QLatin1String( "m" ) ? QStringLiteral( "MATERIALIZED" ) : QString(), oldName, newName ); } else { sql = QStringLiteral( "ALTER TABLE %1 RENAME TO %2" ).arg( oldName, newName ); } QgsPostgresResult result( conn->PQexec( sql ) ); if ( result.PQresultStatus() != PGRES_COMMAND_OK ) { QMessageBox::warning( nullptr, tr( "Rename %1" ).arg( typeName ), tr( "Unable to rename %1 %2\n%3" ).arg( lowerTypeName, mName, result.PQresultErrorMessage() ) ); conn->unref(); return; } conn->unref(); if ( mParent ) mParent->refresh(); }
void QgsPGLayerItem::refreshMaterializedView() { if ( QMessageBox::question( nullptr, QObject::tr( "Refresh Materialized View" ), QObject::tr( "Are you sure you want to refresh the materialized view %1.%2?\n\nThis will update all data within the table." ).arg( mLayerProperty.schemaName, mLayerProperty.tableName ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes ) return; QgsDataSourceUri dsUri( mUri ); QgsPostgresConn *conn = QgsPostgresConn::connectDb( dsUri.connectionInfo( false ), false ); if ( !conn ) { QMessageBox::warning( nullptr, tr( "Refresh View" ), tr( "Unable to refresh the view." ) ); return; } QString schemaName = mLayerProperty.schemaName; QString tableName = mLayerProperty.tableName; QString schemaTableName; if ( !schemaName.isEmpty() ) { schemaTableName = QgsPostgresConn::quotedIdentifier( schemaName ) + '.'; } QString tableRef = schemaTableName + QgsPostgresConn::quotedIdentifier( tableName ); QString sql = QStringLiteral( "REFRESH MATERIALIZED VIEW CONCURRENTLY %1" ).arg( tableRef ); QgsPostgresResult result( conn->PQexec( sql ) ); if ( result.PQresultStatus() != PGRES_COMMAND_OK ) { QMessageBox::warning( nullptr, tr( "Refresh View" ), tr( "Unable to refresh view %1\n%2" ).arg( mName, result.PQresultErrorMessage() ) ); conn->unref(); return; } conn->unref(); QMessageBox::information( nullptr, tr( "Refresh View" ), tr( "Materialized view refreshed successfully." ) ); }
void QgsPGLayerItem::truncateTable() { if ( QMessageBox::question( nullptr, QObject::tr( "Truncate Table" ), QObject::tr( "Are you sure you want to truncate %1.%2?\n\nThis will delete all data within the table." ).arg( mLayerProperty.schemaName, mLayerProperty.tableName ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes ) return; QgsDataSourceUri dsUri( mUri ); QgsPostgresConn *conn = QgsPostgresConn::connectDb( dsUri.connectionInfo( false ), false ); if ( !conn ) { QMessageBox::warning( nullptr, tr( "Truncate Table" ), tr( "Unable to truncate table." ) ); return; } QString schemaName = mLayerProperty.schemaName; QString tableName = mLayerProperty.tableName; QString schemaTableName; if ( !schemaName.isEmpty() ) { schemaTableName = QgsPostgresConn::quotedIdentifier( schemaName ) + '.'; } QString tableRef = schemaTableName + QgsPostgresConn::quotedIdentifier( tableName ); QString sql = QStringLiteral( "TRUNCATE TABLE %1" ).arg( tableRef ); QgsPostgresResult result( conn->PQexec( sql ) ); if ( result.PQresultStatus() != PGRES_COMMAND_OK ) { QMessageBox::warning( nullptr, tr( "Truncate Table" ), tr( "Unable to truncate %1\n%2" ).arg( mName, result.PQresultErrorMessage() ) ); conn->unref(); return; } conn->unref(); QMessageBox::information( nullptr, tr( "Truncate Table" ), tr( "Table truncated successfully." ) ); }
void QgsPGSchemaItem::deleteSchema() { // check if schema contains tables/views QgsDataSourceUri uri = QgsPostgresConn::connUri( mConnectionName ); QgsPostgresConn *conn = QgsPostgresConn::connectDb( uri.connectionInfo( false ), false ); if ( !conn ) { QMessageBox::warning( nullptr, tr( "Delete Schema" ), tr( "Unable to delete schema." ) ); return; } QString sql = QStringLiteral( "SELECT table_name FROM information_schema.tables WHERE table_schema='%1'" ).arg( mName ); QgsPostgresResult result( conn->PQexec( sql ) ); if ( result.PQresultStatus() != PGRES_TUPLES_OK ) { QMessageBox::warning( nullptr, tr( "Delete Schema" ), tr( "Unable to delete schema." ) ); conn->unref(); return; } QStringList childObjects; int maxListed = 10; for ( int idx = 0; idx < result.PQntuples(); idx++ ) { childObjects << result.PQgetvalue( idx, 0 ); QgsPostgresSchemaProperty schema; if ( idx == maxListed - 1 ) break; } int count = result.PQntuples(); if ( count > 0 ) { QString objects = childObjects.join( QStringLiteral( "\n" ) ); if ( count > maxListed ) { objects += QStringLiteral( "\n[%1 additional objects not listed]" ).arg( count - maxListed ); } if ( QMessageBox::question( nullptr, QObject::tr( "Delete Schema" ), QObject::tr( "Schema '%1' contains objects:\n\n%2\n\nAre you sure you want to delete the schema and all these objects?" ).arg( mName, objects ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes ) { conn->unref(); return; } } else { if ( QMessageBox::question( nullptr, QObject::tr( "Delete Schema" ), QObject::tr( "Are you sure you want to delete the schema '%1'?" ).arg( mName ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes ) return; } QString errCause; bool res = ::deleteSchema( mName, uri, errCause, count > 0 ); if ( !res ) { QMessageBox::warning( nullptr, tr( "Delete Schema" ), errCause ); } else { QMessageBox::information( nullptr, tr( "Delete Schema" ), tr( "Schema deleted successfully." ) ); if ( mParent ) mParent->refresh(); } }