improve deleteStyleFromDatabase signature

This commit is contained in:
Jorge Gustavo Rocha 2017-01-31 10:46:49 +00:00
parent 6d6f288102
commit 8e989c1e38
5 changed files with 19 additions and 11 deletions

View File

@ -687,7 +687,7 @@ class QgsVectorLayer : QgsMapLayer, QgsExpressionContextGenerator
/**
* Will delete the named style corresponding to style id provided from the database
*/
virtual void deleteStyleFromDatabase( const QString& styleId, QString &msgError /Out/ );
virtual bool deleteStyleFromDatabase( const QString& styleId, QString &msgError /Out/ );
/**
* Load a named style from file/local db/datasource db

View File

@ -120,7 +120,7 @@ typedef QString getStyleById_t(
QString& errCause
);
typedef void deleteStyleById_t(
typedef bool deleteStyleById_t(
const QString& uri,
QString styleID,
QString& errCause
@ -4341,14 +4341,14 @@ QString QgsVectorLayer::getStyleFromDatabase( const QString& styleId, QString &m
return getStyleByIdMethod( mDataSource, styleId, msgError );
}
void QgsVectorLayer::deleteStyleFromDatabase( const QString& styleId, QString &msgError )
bool QgsVectorLayer::deleteStyleFromDatabase( const QString& styleId, QString &msgError )
{
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
if ( !myLib )
{
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
return;
return false;
}
deleteStyleById_t* deleteStyleByIdMethod = reinterpret_cast< deleteStyleById_t * >( cast_to_fptr( myLib->resolve( "deleteStyleById" ) ) );
@ -4356,7 +4356,7 @@ void QgsVectorLayer::deleteStyleFromDatabase( const QString& styleId, QString &m
{
delete myLib;
msgError = QObject::tr( "Provider %1 has no %2 method" ).arg( mProviderKey, QStringLiteral( "deleteStyleById" ) );
return;
return false;
}
return deleteStyleByIdMethod( mDataSource, styleId, msgError );

View File

@ -788,7 +788,7 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
/**
* Will delete the named style corresponding to style id provided from the database
*/
virtual void deleteStyleFromDatabase( const QString& styleId, QString &msgError );
virtual bool deleteStyleFromDatabase( const QString& styleId, QString &msgError );
/**
* Load a named style from file/local db/datasource db

View File

@ -4632,14 +4632,16 @@ QGISEXTERN int listStyles( const QString &uri, QStringList &ids, QStringList &na
return numberOfRelatedStyles;
}
QGISEXTERN void deleteStyleById( const QString &uri, QString styleId, QString &errCause )
QGISEXTERN bool deleteStyleById( const QString &uri, QString styleId, QString &errCause )
{
QgsDataSourceUri dsUri( uri );
bool deleted;
QgsPostgresConn *conn = QgsPostgresConn::connectDb( dsUri.connectionInfo( false ), false );
if ( !conn )
{
errCause = QObject::tr( "Connection to database failed using username: %1" ).arg( dsUri.username() );
deleted = false;
}
else
{
@ -4653,11 +4655,15 @@ QGISEXTERN void deleteStyleById( const QString &uri, QString styleId, QString &e
.arg( result.PQresultStatus() ).arg( PGRES_COMMAND_OK ).arg( deleteStyleQuery ) );
QgsMessageLog::logMessage( QObject::tr( "Error executing query: %1" ).arg( deleteStyleQuery ) );
errCause = QObject::tr( "Error executing the delete query. The query was logged" );
deleted = false;
}
else
{
deleted = true;
}
}
conn->unref();
return deleted;
}
QGISEXTERN QString getStyleById( const QString& uri, QString styleId, QString& errCause )

View File

@ -686,10 +686,12 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
self.assertTrue(qml.startswith('<!DOCTYPE qgis'), qml)
self.assertEqual(errmsg, "")
errmsg = vl.deleteStyleFromDatabase("101")
res, errmsg = vl.deleteStyleFromDatabase("100")
self.assertTrue(res)
self.assertEqual(errmsg, "")
errmsg = vl.deleteStyleFromDatabase("1")
res, errmsg = vl.deleteStyleFromDatabase("1")
self.assertTrue(res)
self.assertEqual(errmsg, "")
# table layer_styles does exit, but is now empty