diff --git a/src/core/expression/qgsexpressionnodeimpl.cpp b/src/core/expression/qgsexpressionnodeimpl.cpp index 80362ee6b2b..69b51327ff4 100644 --- a/src/core/expression/qgsexpressionnodeimpl.cpp +++ b/src/core/expression/qgsexpressionnodeimpl.cpp @@ -124,7 +124,10 @@ bool QgsExpressionNodeUnaryOperator::prepareNode( QgsExpression *parent, const Q QString QgsExpressionNodeUnaryOperator::dump() const { - return QStringLiteral( "%1 %2" ).arg( UNARY_OPERATOR_TEXT[mOp], mOperand->dump() ); + if ( dynamic_cast( mOperand ) ) + return QStringLiteral( "%1 ( %2 )" ).arg( UNARY_OPERATOR_TEXT[mOp], mOperand->dump() ); + else + return QStringLiteral( "%1 %2" ).arg( UNARY_OPERATOR_TEXT[mOp], mOperand->dump() ); } QSet QgsExpressionNodeUnaryOperator::referencedColumns() const diff --git a/tests/src/core/testqgsogcutils.cpp b/tests/src/core/testqgsogcutils.cpp index 0cff18326cf..cc7fd100411 100644 --- a/tests/src/core/testqgsogcutils.cpp +++ b/tests/src/core/testqgsogcutils.cpp @@ -463,6 +463,25 @@ void TestQgsOgcUtils::testExpressionFromOgcFilter_data() "+2" "" ) << QStringLiteral( "LITERAL = '+2'" ); + + QTest::newRow( "not or list" ) << QStringLiteral( "" + "" + " " + " " + " A" + " 1" + " " + " " + " A" + " 2" + " " + " " + " A" + " 3" + " " + " " + "" + "" ) << QStringLiteral( "NOT ( A = 1 OR A = 2 OR A = 3 )" ); } void TestQgsOgcUtils::testExpressionFromOgcFilter()