Skip to content

Commit

Permalink
Merge pull request #34420 from m-kuhn/expression_group_binary_if_in_u…
Browse files Browse the repository at this point in the history
…nary

Fix parentheses in QgsExpression::dump()
  • Loading branch information
m-kuhn committed Feb 12, 2020
2 parents 2f50c0a + 71425c0 commit ac8b7c0
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/core/expression/qgsexpressionnodeimpl.cpp
Expand Up @@ -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<QgsExpressionNodeBinaryOperator *>( 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<QString> QgsExpressionNodeUnaryOperator::referencedColumns() const
Expand Down
19 changes: 19 additions & 0 deletions tests/src/core/testqgsogcutils.cpp
Expand Up @@ -463,6 +463,25 @@ void TestQgsOgcUtils::testExpressionFromOgcFilter_data()
"<Literal>+2</Literal>"
"</PropertyIsEqualTo></Filter>" )
<< QStringLiteral( "LITERAL = '+2'" );

QTest::newRow( "not or list" ) << QStringLiteral( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\">"
"<ogc:Not>"
" <ogc:Or>"
" <ogc:PropertyIsEqualTo>"
" <ogc:PropertyName>A</ogc:PropertyName>"
" <ogc:Literal>1</ogc:Literal>"
" </ogc:PropertyIsEqualTo>"
" <ogc:PropertyIsEqualTo>"
" <ogc:PropertyName>A</ogc:PropertyName>"
" <ogc:Literal>2</ogc:Literal>"
" </ogc:PropertyIsEqualTo>"
" <ogc:PropertyIsEqualTo>"
" <ogc:PropertyName>A</ogc:PropertyName>"
" <ogc:Literal>3</ogc:Literal>"
" </ogc:PropertyIsEqualTo>"
" </ogc:Or>"
"</ogc:Not>"
"</ogc:Filter>" ) << QStringLiteral( "NOT ( A = 1 OR A = 2 OR A = 3 )" );
}

void TestQgsOgcUtils::testExpressionFromOgcFilter()
Expand Down

0 comments on commit ac8b7c0

Please sign in to comment.