@@ -1595,25 +1595,37 @@ QgsExpression::NodeBinaryOperator* QgsOgcUtils::nodeBinaryOperatorFromOgcFilter(
15951595 }
15961596
15971597 QDomElement operandElem = element.firstChildElement ();
1598- QgsExpression::Node* opLeft = nodeFromOgcFilter ( operandElem, errorMessage );
1599- if ( !opLeft )
1598+ QgsExpression::Node *expr = nodeFromOgcFilter ( operandElem, errorMessage ), *leftOp = expr ;
1599+ if ( !expr )
16001600 {
16011601 if ( errorMessage.isEmpty () )
16021602 errorMessage = QString ( " invalid left operand for '%1' binary operator" ).arg ( element.tagName () );
16031603 return NULL ;
16041604 }
16051605
1606- operandElem = operandElem.nextSiblingElement ();
1607- QgsExpression::Node* opRight = nodeFromOgcFilter ( operandElem, errorMessage );
1608- if ( !opRight )
1606+ for ( operandElem = operandElem.nextSiblingElement (); !operandElem.isNull (); operandElem = operandElem.nextSiblingElement () )
1607+ {
1608+ QgsExpression::Node* opRight = nodeFromOgcFilter ( operandElem, errorMessage );
1609+ if ( !opRight )
1610+ {
1611+ if ( errorMessage.isEmpty () )
1612+ errorMessage = QString ( " invalid right operand for '%1' binary operator" ).arg ( element.tagName () );
1613+ delete expr;
1614+ return NULL ;
1615+ }
1616+
1617+ expr = new QgsExpression::NodeBinaryOperator (( QgsExpression::BinaryOperator ) op, expr, opRight );
1618+ }
1619+
1620+ if ( expr == leftOp )
16091621 {
16101622 if ( errorMessage.isEmpty () )
1611- errorMessage = QString ( " invalid right operand for '%1' binary operator" ).arg ( element.tagName () );
1612- delete opLeft ;
1623+ errorMessage = QString ( " only one operand for '%1' binary operator" ).arg ( element.tagName () );
1624+ delete expr ;
16131625 return NULL ;
16141626 }
16151627
1616- return new QgsExpression::NodeBinaryOperator (( QgsExpression::BinaryOperator ) op, opLeft, opRight );
1628+ return dynamic_cast < QgsExpression::NodeBinaryOperator * >( expr );
16171629}
16181630
16191631
@@ -1843,7 +1855,6 @@ QgsExpression::Node* QgsOgcUtils::nodeIsBetweenFromOgcFilter( QDomElement& eleme
18431855}
18441856
18451857
1846-
18471858QgsExpression::NodeBinaryOperator* QgsOgcUtils::nodePropertyIsNullFromOgcFilter ( QDomElement& element, QString& errorMessage )
18481859{
18491860 // convert ogc:PropertyIsNull to IS operator with NULL right operand
@@ -1865,8 +1876,6 @@ QgsExpression::NodeBinaryOperator* QgsOgcUtils::nodePropertyIsNullFromOgcFilter(
18651876// ///////////////
18661877
18671878
1868-
1869-
18701879QDomElement QgsOgcUtils::expressionToOgcFilter ( const QgsExpression& exp, QDomDocument& doc, QString* errorMessage )
18711880{
18721881 if ( !exp.rootNode () )
0 commit comments