From 9f3d5ba212b090441f1aae40c52ca3c8b4822584 Mon Sep 17 00:00:00 2001 From: g_j_m Date: Wed, 30 Mar 2005 01:58:11 +0000 Subject: [PATCH] - warn and refuse to load the layer if we don't have select permissions on the table that is being loaded - better conformance to the code style guidelines - added tr() to some dialog box text git-svn-id: http://svn.osgeo.org/qgis/trunk@3041 c8812cc2-4d05-0410-92ff-de0c093fc19c --- providers/postgres/qgspostgresprovider.cpp | 41 +++++++++++++++++----- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/providers/postgres/qgspostgresprovider.cpp b/providers/postgres/qgspostgresprovider.cpp index b9a24bdec1c..6dd8bcc13e7 100644 --- a/providers/postgres/qgspostgresprovider.cpp +++ b/providers/postgres/qgspostgresprovider.cpp @@ -150,26 +150,51 @@ QgsPostgresProvider::QgsPostgresProvider(QString uri):dataSourceUri(uri) #endif PGconn *pd = PQconnectdb((const char *) connInfo); // check the connection status - if (PQstatus(pd) == CONNECTION_OK) { + if (PQstatus(pd) == CONNECTION_OK) + { + // store the connection for future use + connection = pd; + +#ifdef QGISDEBUG + std::cerr << "Checking for select permission on the relation\n"; +#endif + + // Check that we can read from the table (i.e., we have + // select permission). + QString sql = "select * from \"" + tableName + "\" limit 1"; + PGresult* testAccess = PQexec(pd, (const char*)sql); + if (PQresultStatus(testAccess) != PGRES_TUPLES_OK) + { + QApplication::restoreOverrideCursor(); + QMessageBox::warning(0, tr("Unable to access relation"), + tr("Unable to access the ") + tableName + + tr(" relation.\nThe error message from the database was:\n") + + PQresultErrorMessage(testAccess) + ".\n"); + QApplication::setOverrideCursor(Qt::waitCursor); + PQclear(testAccess); + valid = false; + return; + } + PQclear(testAccess); + /* Check to see if we have GEOS support and if not, warn the user about the problems they will see :) */ #ifdef QGISDEBUG std::cerr << "Checking for GEOS support" << std::endl; #endif - if(!hasGEOS(pd)){ + if(!hasGEOS(pd)) + { QApplication::restoreOverrideCursor(); - QMessageBox::warning(0, "No GEOS Support!", - "Your PostGIS installation has no GEOS support.\nFeature selection and " + QMessageBox::warning(0, tr("No GEOS Support!"), + tr("Your PostGIS installation has no GEOS support.\nFeature selection and " "identification will not work properly.\nPlease install PostGIS with " - "GEOS support (http://geos.refractions.net)"); + "GEOS support (http://geos.refractions.net)")); QApplication::setOverrideCursor(Qt::waitCursor); } //--std::cout << "Connection to the database was successful\n"; // set the schema PQexec(pd,(const char *)QString("set search_path = '%1','public'").arg(mSchema)); - // store the connection for future use - connection = pd; if (getGeometryDetails()) // gets srid and geometry type { @@ -182,7 +207,7 @@ QgsPostgresProvider::QgsPostgresProvider(QString uri):dataSourceUri(uri) selectSQL = "select "; // Populate the field vector for this layer. The field vector contains // field name, type, length, and precision (if numeric) - QString sql = "select * from \"" + tableName + "\" limit 1"; + sql = "select * from \"" + tableName + "\" limit 1"; PGresult* result = PQexec(pd, (const char *) sql); //--std::cout << "Field: Name, Type, Size, Modifier:" << std::endl; for (int i = 0; i < PQnfields(result); i++)