@@ -1931,27 +1931,38 @@ QDomElement QgsOgcUtils::expressionNodeToOgcFilter( const QgsExpression::Node* n
1931
1931
1932
1932
QDomElement QgsOgcUtils::expressionUnaryOperatorToOgcFilter ( const QgsExpression::NodeUnaryOperator* node, QDomDocument& doc, QString& errorMessage )
1933
1933
{
1934
+
1935
+ QDomElement operandElem = expressionNodeToOgcFilter ( node->operand (), doc, errorMessage );
1936
+ if ( !errorMessage.isEmpty () )
1937
+ return QDomElement ();
1938
+
1934
1939
QDomElement uoElem;
1935
1940
switch ( node->op () )
1936
1941
{
1937
1942
case QgsExpression::uoMinus:
1938
1943
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
+ }
1940
1955
break ;
1941
1956
case QgsExpression::uoNot:
1942
1957
uoElem = doc.createElement ( " ogc:Not" );
1958
+ uoElem.appendChild ( operandElem );
1943
1959
break ;
1944
1960
1945
1961
default :
1946
1962
errorMessage = QString ( " Unary operator %1 not implemented yet" ).arg ( QgsExpression::UnaryOperatorText[node->op ()] );
1947
1963
return QDomElement ();
1948
1964
}
1949
1965
1950
- QDomElement operandElem = expressionNodeToOgcFilter ( node->operand (), doc, errorMessage );
1951
- if ( !errorMessage.isEmpty () )
1952
- return QDomElement ();
1953
-
1954
- uoElem.appendChild ( operandElem );
1955
1966
return uoElem;
1956
1967
}
1957
1968
0 commit comments