@@ -3464,50 +3464,44 @@ QgsExpressionNodeFunction *QgsOgcUtilsExpressionFromFilter::nodeFunctionFromOgcF
3464
3464
QgsExpressionNode *QgsOgcUtilsExpressionFromFilter::nodeIsBetweenFromOgcFilter ( const QDomElement &element )
3465
3465
{
3466
3466
// <ogc:PropertyIsBetween> encode a Range check
3467
- QgsExpressionNode *operand = nullptr , *lowerBound = nullptr ;
3468
- QgsExpressionNode *operand2 = nullptr , *upperBound = nullptr ;
3467
+ std::unique_ptr<QgsExpressionNode> operand;
3468
+ std::unique_ptr<QgsExpressionNode> lowerBound;
3469
+ std::unique_ptr<QgsExpressionNode> upperBound;
3469
3470
3470
3471
QDomElement operandElem = element.firstChildElement ();
3471
3472
while ( !operandElem.isNull () )
3472
3473
{
3473
3474
if ( operandElem.tagName () == QLatin1String ( " LowerBoundary" ) )
3474
3475
{
3475
3476
QDomElement lowerBoundElem = operandElem.firstChildElement ();
3476
- lowerBound = nodeFromOgcFilter ( lowerBoundElem );
3477
+ lowerBound. reset ( nodeFromOgcFilter ( lowerBoundElem ) );
3477
3478
}
3478
3479
else if ( operandElem.tagName () == QLatin1String ( " UpperBoundary" ) )
3479
3480
{
3480
3481
QDomElement upperBoundElem = operandElem.firstChildElement ();
3481
- upperBound = nodeFromOgcFilter ( upperBoundElem );
3482
+ upperBound. reset ( nodeFromOgcFilter ( upperBoundElem ) );
3482
3483
}
3483
3484
else
3484
3485
{
3485
3486
// <ogc:expression>
3486
- // both operand and operand2 contain the same expression,
3487
- // they are respectively compared to lower bound and upper bound
3488
- operand = nodeFromOgcFilter ( operandElem );
3489
- operand2 = nodeFromOgcFilter ( operandElem );
3487
+ operand.reset ( nodeFromOgcFilter ( operandElem ) );
3490
3488
}
3491
3489
3492
- if ( operand && lowerBound && operand2 && upperBound )
3490
+ if ( operand && lowerBound && upperBound )
3493
3491
break ;
3494
3492
3495
3493
operandElem = operandElem.nextSiblingElement ();
3496
3494
}
3497
3495
3498
- if ( !operand || !lowerBound || !operand2 || ! upperBound )
3496
+ if ( !operand || !lowerBound || !upperBound )
3499
3497
{
3500
- delete operand;
3501
- delete lowerBound;
3502
- delete upperBound;
3503
-
3504
3498
mErrorMessage = QObject::tr ( " missing some required sub-elements in %1:PropertyIsBetween" ).arg ( mPrefix );
3505
3499
return nullptr ;
3506
3500
}
3507
3501
3508
- QgsExpressionNode *geOperator = new QgsExpressionNodeBinaryOperator ( QgsExpressionNodeBinaryOperator::boGE , operand, lowerBound );
3509
- QgsExpressionNode *leOperator = new QgsExpressionNodeBinaryOperator ( QgsExpressionNodeBinaryOperator::boLE, operand2, upperBound );
3510
- return new QgsExpressionNodeBinaryOperator ( QgsExpressionNodeBinaryOperator::boAnd, geOperator, leOperator );
3502
+ std::unique_ptr< QgsExpressionNode> leOperator ( new QgsExpressionNodeBinaryOperator ( QgsExpressionNodeBinaryOperator::boLE , operand-> clone (), upperBound. release () ) );
3503
+ std::unique_ptr< QgsExpressionNode> geOperator ( new QgsExpressionNodeBinaryOperator ( QgsExpressionNodeBinaryOperator::boGE, operand. release (), lowerBound. release () ) );
3504
+ return new QgsExpressionNodeBinaryOperator ( QgsExpressionNodeBinaryOperator::boAnd, geOperator. release () , leOperator. release () );
3511
3505
}
3512
3506
3513
3507
QString QgsOgcUtilsExpressionFromFilter::errorMessage () const
0 commit comments