proper use of category tags - use of all tag as default in filtering

This commit is contained in:
David Signer 2019-08-28 07:46:27 +02:00
parent 272d022dbc
commit e89ebf1b69
5 changed files with 65 additions and 42 deletions

View File

@ -20,7 +20,9 @@ struct QgsStoredExpression
enum Category enum Category
{ {
FilterExpression FilterExpression,
DefaultValueExpression,
All
}; };
@ -51,7 +53,7 @@ Adds an expression to the list
:param name: optional name of the expression :param name: optional name of the expression
:param expression: expression text :param expression: expression text
:param tag: category of the expression :param tag: category of the expression - default FilterExpression
:return: generated id as QString :return: generated id as QString
%End %End
@ -63,7 +65,7 @@ Removes an expression to the list
:param id: id of the expression as identification :param id: id of the expression as identification
%End %End
void updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::FilterExpression ); void updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag );
%Docstring %Docstring
Updates an expression by id Updates an expression by id
@ -80,11 +82,11 @@ Appends a list of expressions to the existing list
:param storedExpressions: list of expressions and the optional name :param storedExpressions: list of expressions and the optional name
%End %End
QList< QgsStoredExpression > storedExpressions( const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::FilterExpression ); QList< QgsStoredExpression > storedExpressions( const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::All );
%Docstring %Docstring
Returns the list of named expressions Returns the list of named expressions
:param tag: where the expression is used :param tag: where the expression is used - default all
%End %End
@ -95,12 +97,12 @@ Returns an expression according to the id
:param id: id of the expression as identification :param id: id of the expression as identification
%End %End
QgsStoredExpression findStoredExpressionByExpression( const QString &expression, const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::FilterExpression ) const; QgsStoredExpression findStoredExpressionByExpression( const QString &expression, const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::All ) const;
%Docstring %Docstring
Returns an expression according to the expression text Returns an expression according to the expression text
:param expression: id of the expression as identification :param expression: id of the expression as identification
:param tag: category of the expression :param tag: category of the expression - default all
%End %End
void clearStoredExpressions(); void clearStoredExpressions();

View File

@ -1168,7 +1168,7 @@ void QgsAttributeTableDialog::editStoredFilterExpression()
if ( dlg->exec() == QDialog::Accepted ) if ( dlg->exec() == QDialog::Accepted )
{ {
//update stored expression //update stored expression
mLayer->storedExpressionManager()->updateStoredExpression( mActionHandleStoreFilterExpression->data().toString(), nameEdit->text(), expressionEdit->expression() ); mLayer->storedExpressionManager()->updateStoredExpression( mActionHandleStoreFilterExpression->data().toString(), nameEdit->text(), expressionEdit->expression(), QgsStoredExpression::Category::FilterExpression );
//update text //update text
mFilterQuery->setValue( expressionEdit->expression() ); mFilterQuery->setValue( expressionEdit->expression() );

View File

@ -23,8 +23,6 @@
QString QgsStoredExpressionManager::addStoredExpression( const QString &name, const QString &expression, const QgsStoredExpression::Category &tag ) QString QgsStoredExpressionManager::addStoredExpression( const QString &name, const QString &expression, const QgsStoredExpression::Category &tag )
{ {
Q_UNUSED( tag );
QgsStoredExpression storedExpression( name, expression, tag ); QgsStoredExpression storedExpression( name, expression, tag );
mStoredExpressions.append( storedExpression ); mStoredExpressions.append( storedExpression );
@ -49,8 +47,6 @@ void QgsStoredExpressionManager::removeStoredExpression( const QString &id )
void QgsStoredExpressionManager::updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag ) void QgsStoredExpressionManager::updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag )
{ {
Q_UNUSED( tag );
int i = 0; int i = 0;
for ( const QgsStoredExpression &storedExpression : qgis::as_const( mStoredExpressions ) ) for ( const QgsStoredExpression &storedExpression : qgis::as_const( mStoredExpressions ) )
{ {
@ -75,9 +71,16 @@ void QgsStoredExpressionManager::addStoredExpressions( QList< QgsStoredExpressio
QList< QgsStoredExpression > QgsStoredExpressionManager::storedExpressions( const QgsStoredExpression::Category &tag ) QList< QgsStoredExpression > QgsStoredExpressionManager::storedExpressions( const QgsStoredExpression::Category &tag )
{ {
Q_UNUSED( tag ); QList< QgsStoredExpression > storedExpressions;
return mStoredExpressions; for ( const QgsStoredExpression &storedExpression : qgis::as_const( mStoredExpressions ) )
{
if ( storedExpression.tag & tag )
{
storedExpressions.append( storedExpression );
}
}
return storedExpressions;
} }
QgsStoredExpression QgsStoredExpressionManager::storedExpression( const QString &id ) const QgsStoredExpression QgsStoredExpressionManager::storedExpression( const QString &id ) const
@ -94,8 +97,6 @@ QgsStoredExpression QgsStoredExpressionManager::storedExpression( const QString
QgsStoredExpression QgsStoredExpressionManager::findStoredExpressionByExpression( const QString &expression, const QgsStoredExpression::Category &tag ) const QgsStoredExpression QgsStoredExpressionManager::findStoredExpressionByExpression( const QString &expression, const QgsStoredExpression::Category &tag ) const
{ {
Q_UNUSED( tag );
for ( const QgsStoredExpression &storedExpression : qgis::as_const( mStoredExpressions ) ) for ( const QgsStoredExpression &storedExpression : qgis::as_const( mStoredExpressions ) )
{ {
if ( storedExpression.expression == expression && storedExpression.tag & tag ) if ( storedExpression.expression == expression && storedExpression.tag & tag )

View File

@ -44,10 +44,13 @@ struct CORE_EXPORT QgsStoredExpression
/** /**
* Categories of use cases * Categories of use cases
* FilterExpression for stored expressions to filter attribute table * FilterExpression for stored expressions to filter attribute table
* DefaultValueExpression for stored expressions to use for default values (not yet used)
*/ */
enum Category enum Category
{ {
FilterExpression = 1 << 0 //!< Expressions to filter features FilterExpression = 1 << 0, //!< Expressions to filter features
DefaultValueExpression = 1 << 1, //!< Expressions to determine default values (not yet used)
All = FilterExpression | DefaultValueExpression
}; };
#ifndef SIP_RUN #ifndef SIP_RUN
@ -86,7 +89,7 @@ class CORE_EXPORT QgsStoredExpressionManager : public QObject
* *
* \param name optional name of the expression * \param name optional name of the expression
* \param expression expression text * \param expression expression text
* \param tag category of the expression * \param tag category of the expression - default FilterExpression
* \returns generated id as QString * \returns generated id as QString
*/ */
QString addStoredExpression( const QString &name, const QString &expression, const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::FilterExpression ); QString addStoredExpression( const QString &name, const QString &expression, const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::FilterExpression );
@ -106,7 +109,7 @@ class CORE_EXPORT QgsStoredExpressionManager : public QObject
* \param expression new expression text * \param expression new expression text
* \param tag new category of the expression * \param tag new category of the expression
*/ */
void updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::FilterExpression ); void updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag );
/** /**
* Appends a list of expressions to the existing list * Appends a list of expressions to the existing list
@ -118,9 +121,9 @@ class CORE_EXPORT QgsStoredExpressionManager : public QObject
/** /**
* Returns the list of named expressions * Returns the list of named expressions
* *
* \param tag where the expression is used * \param tag where the expression is used - default all
*/ */
QList< QgsStoredExpression > storedExpressions( const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::FilterExpression ); QList< QgsStoredExpression > storedExpressions( const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::All );
/** /**
@ -134,9 +137,9 @@ class CORE_EXPORT QgsStoredExpressionManager : public QObject
* Returns an expression according to the expression text * Returns an expression according to the expression text
* *
* \param expression id of the expression as identification * \param expression id of the expression as identification
* \param tag category of the expression * \param tag category of the expression - default all
*/ */
QgsStoredExpression findStoredExpressionByExpression( const QString &expression, const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::FilterExpression ) const; QgsStoredExpression findStoredExpressionByExpression( const QString &expression, const QgsStoredExpression::Category &tag = QgsStoredExpression::Category::All ) const;
//! clears list of stored expressions //! clears list of stored expressions
void clearStoredExpressions(); void clearStoredExpressions();

View File

@ -39,10 +39,16 @@ void TestQgsStoredExpressionManager::init()
QList <QgsStoredExpression> newStoredExpressions; QList <QgsStoredExpression> newStoredExpressions;
//fill up //fill up some for the FilterExpression
for ( int i = 0; i < 10; i++ ) for ( int i = 0; i < 10; i++ )
{ {
QgsStoredExpression storedExpression( QStringLiteral( "test%1" ).arg( i ), QStringLiteral( "\"age\"=%1" ).arg( i ) ); QgsStoredExpression storedExpression( QStringLiteral( "filter%1" ).arg( i ), QStringLiteral( "\"age\"=%1" ).arg( i ), QgsStoredExpression::Category::FilterExpression );
newStoredExpressions.append( storedExpression );
}
//fill up some for the DefaultValues
for ( int i = 10; i < 20; i++ )
{
QgsStoredExpression storedExpression( QStringLiteral( "default%1" ).arg( i ), QStringLiteral( "'ID_'+%1" ).arg( i ), QgsStoredExpression::Category::DefaultValueExpression );
newStoredExpressions.append( storedExpression ); newStoredExpressions.append( storedExpression );
} }
mManager->addStoredExpressions( newStoredExpressions ); mManager->addStoredExpressions( newStoredExpressions );
@ -55,8 +61,9 @@ void TestQgsStoredExpressionManager::cleanup()
void TestQgsStoredExpressionManager::storeSingleExpression() void TestQgsStoredExpressionManager::storeSingleExpression()
{ {
QString name = QStringLiteral( "test0" ); //add single stored filter expression
QString expression = QStringLiteral( "\"age\"=0" ); QString name = QStringLiteral( "test20" );
QString expression = QStringLiteral( "\"age\"=20" );
QString id = mManager->addStoredExpression( name, expression ); QString id = mManager->addStoredExpression( name, expression );
//get stored expression by id //get stored expression by id
@ -64,13 +71,20 @@ void TestQgsStoredExpressionManager::storeSingleExpression()
QCOMPARE( storedExpression.id, id ); QCOMPARE( storedExpression.id, id );
QCOMPARE( storedExpression.name, name ); QCOMPARE( storedExpression.name, name );
QCOMPARE( storedExpression.expression, expression ); QCOMPARE( storedExpression.expression, expression );
QCOMPARE( storedExpression.tag, QgsStoredExpression::Category::FilterExpression );
//get all expressions //get all expressions
QList <QgsStoredExpression> allStoredExpressions = mManager->storedExpressions(); QList <QgsStoredExpression> allStoredExpressions = mManager->storedExpressions();
QCOMPARE( allStoredExpressions.count(), 11 ); QCOMPARE( allStoredExpressions.count(), 21 );
QCOMPARE( allStoredExpressions.at( 10 ).id, id );
QCOMPARE( allStoredExpressions.at( 10 ).name, name ); //get all expressions for Category::FilterExpression
QCOMPARE( allStoredExpressions.at( 10 ).expression, expression ); QList <QgsStoredExpression> allStoredFilterExpressions = mManager->storedExpressions( QgsStoredExpression::Category::FilterExpression );
QCOMPARE( allStoredFilterExpressions.count(), 11 );
QCOMPARE( allStoredFilterExpressions.at( 10 ).id, id );
QCOMPARE( allStoredFilterExpressions.at( 10 ).name, name );
QCOMPARE( allStoredFilterExpressions.at( 10 ).expression, expression );
QCOMPARE( allStoredFilterExpressions.at( 10 ).tag, QgsStoredExpression::Category::FilterExpression );
} }
void TestQgsStoredExpressionManager::storeListOfExpressions() void TestQgsStoredExpressionManager::storeListOfExpressions()
@ -78,7 +92,7 @@ void TestQgsStoredExpressionManager::storeListOfExpressions()
QList <QgsStoredExpression> newStoredExpressions; QList <QgsStoredExpression> newStoredExpressions;
//fill up //fill up
for ( int i = 10; i < 20; i++ ) for ( int i = 20; i < 30; i++ )
{ {
QgsStoredExpression storedExpression( QStringLiteral( "test%1" ).arg( i ), QStringLiteral( "\"age\"=%1" ).arg( i ) ); QgsStoredExpression storedExpression( QStringLiteral( "test%1" ).arg( i ), QStringLiteral( "\"age\"=%1" ).arg( i ) );
newStoredExpressions.append( storedExpression ); newStoredExpressions.append( storedExpression );
@ -87,35 +101,38 @@ void TestQgsStoredExpressionManager::storeListOfExpressions()
//get all expressions //get all expressions
QList <QgsStoredExpression> allStoredExpressions = mManager->storedExpressions(); QList <QgsStoredExpression> allStoredExpressions = mManager->storedExpressions();
QCOMPARE( allStoredExpressions.count(), 20 ); QCOMPARE( allStoredExpressions.count(), 30 );
QCOMPARE( allStoredExpressions.at( 0 ).name, QStringLiteral( "test0" ) ); QCOMPARE( allStoredExpressions.at( 0 ).name, QStringLiteral( "filter0" ) );
QCOMPARE( allStoredExpressions.at( 0 ).expression, QStringLiteral( "\"age\"=0" ) ); QCOMPARE( allStoredExpressions.at( 0 ).expression, QStringLiteral( "\"age\"=0" ) );
QCOMPARE( allStoredExpressions.at( 14 ).name, QStringLiteral( "test14" ) ); QCOMPARE( allStoredExpressions.at( 14 ).name, QStringLiteral( "default14" ) );
QCOMPARE( allStoredExpressions.at( 14 ).expression, QStringLiteral( "\"age\"=14" ) ); QCOMPARE( allStoredExpressions.at( 14 ).expression, QStringLiteral( "'ID_'+14" ) );
QCOMPARE( allStoredExpressions.at( 19 ).name, QStringLiteral( "test19" ) ); QCOMPARE( allStoredExpressions.at( 25 ).name, QStringLiteral( "test25" ) );
QCOMPARE( allStoredExpressions.at( 19 ).expression, QStringLiteral( "\"age\"=19" ) ); QCOMPARE( allStoredExpressions.at( 25 ).expression, QStringLiteral( "\"age\"=25" ) );
} }
void TestQgsStoredExpressionManager::editExpressionsByExpression() void TestQgsStoredExpressionManager::editExpressionsByExpression()
{ {
QgsStoredExpression storedExpression = mManager->findStoredExpressionByExpression( QStringLiteral( "\"age\"=4" ) ); QgsStoredExpression storedExpression = mManager->findStoredExpressionByExpression( QStringLiteral( "\"age\"=4" ) );
QCOMPARE( storedExpression.name, QStringLiteral( "test4" ) ); QCOMPARE( storedExpression.name, QStringLiteral( "filter4" ) );
mManager->updateStoredExpression( storedExpression.id, QStringLiteral( "Much older" ), QStringLiteral( "\"age\">99" ) ); mManager->updateStoredExpression( storedExpression.id, QStringLiteral( "Much older" ), QStringLiteral( "\"age\">99" ), QgsStoredExpression::Category::FilterExpression );
QCOMPARE( mManager->storedExpression( storedExpression.id ).name, QStringLiteral( "Much older" ) ); QCOMPARE( mManager->storedExpression( storedExpression.id ).name, QStringLiteral( "Much older" ) );
QCOMPARE( mManager->storedExpression( storedExpression.id ).expression, QStringLiteral( "\"age\">99" ) ); QCOMPARE( mManager->storedExpression( storedExpression.id ).expression, QStringLiteral( "\"age\">99" ) );
QCOMPARE( mManager->storedExpression( storedExpression.id ).tag, QgsStoredExpression::Category::FilterExpression );
QgsStoredExpression newStoredExpression = mManager->findStoredExpressionByExpression( QStringLiteral( "\"age\">99" ) );
QCOMPARE( newStoredExpression.name, QStringLiteral( "Much older" ) );
} }
void TestQgsStoredExpressionManager::deleteExpressionByExpression() void TestQgsStoredExpressionManager::deleteExpressionByExpression()
{ {
QgsStoredExpression storedExpression = mManager->findStoredExpressionByExpression( QStringLiteral( "\"age\"=4" ) ); QgsStoredExpression storedExpression = mManager->findStoredExpressionByExpression( QStringLiteral( "\"age\"=4" ) );
QCOMPARE( storedExpression.name, QStringLiteral( "test4" ) ); QCOMPARE( storedExpression.name, QStringLiteral( "filter4" ) );
mManager->removeStoredExpression( storedExpression.id ); mManager->removeStoredExpression( storedExpression.id );
storedExpression = mManager->findStoredExpressionByExpression( QStringLiteral( "\"age\"=4" ) ); storedExpression = mManager->findStoredExpressionByExpression( QStringLiteral( "\"age\"=4" ) );
QVERIFY( storedExpression.id.isNull() ); QVERIFY( storedExpression.id.isNull() );
} }