Skip to content

Commit a2a7a82

Browse files
committedApr 3, 2015
fix for #11863
when a unary-minus is encountered, add a minus to the operand
1 parent 6122a9f commit a2a7a82

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed
 

‎src/core/qgsogcutils.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1931,27 +1931,38 @@ QDomElement QgsOgcUtils::expressionNodeToOgcFilter( const QgsExpression::Node* n
19311931

19321932
QDomElement QgsOgcUtils::expressionUnaryOperatorToOgcFilter( const QgsExpression::NodeUnaryOperator* node, QDomDocument& doc, QString& errorMessage )
19331933
{
1934+
1935+
QDomElement operandElem = expressionNodeToOgcFilter( node->operand(), doc, errorMessage );
1936+
if ( !errorMessage.isEmpty() )
1937+
return QDomElement();
1938+
19341939
QDomElement uoElem;
19351940
switch ( node->op() )
19361941
{
19371942
case QgsExpression::uoMinus:
19381943
uoElem = doc.createElement( "ogc:Literal" );
1939-
uoElem.appendChild( doc.createTextNode( "-" ) );
1944+
if ( node->operand()->nodeType() == QgsExpression::ntLiteral )
1945+
{
1946+
// operand expression already created a Literal node:
1947+
// take the literal value, prepend - and remove old literal node
1948+
uoElem.appendChild( doc.createTextNode( "-" + operandElem.text() ) );
1949+
doc.removeChild(operandElem);
1950+
}
1951+
else // not sure if this will ever happen
1952+
{
1953+
uoElem.appendChild( doc.createTextNode( "-" ) );
1954+
}
19401955
break;
19411956
case QgsExpression::uoNot:
19421957
uoElem = doc.createElement( "ogc:Not" );
1958+
uoElem.appendChild( operandElem );
19431959
break;
19441960

19451961
default:
19461962
errorMessage = QString( "Unary operator %1 not implemented yet" ).arg( QgsExpression::UnaryOperatorText[node->op()] );
19471963
return QDomElement();
19481964
}
19491965

1950-
QDomElement operandElem = expressionNodeToOgcFilter( node->operand(), doc, errorMessage );
1951-
if ( !errorMessage.isEmpty() )
1952-
return QDomElement();
1953-
1954-
uoElem.appendChild( operandElem );
19551966
return uoElem;
19561967
}
19571968

0 commit comments

Comments
 (0)
Please sign in to comment.