Skip to content

Commit

Permalink
Skip right-hand side of AND/OR expression if we already know result
Browse files Browse the repository at this point in the history
  • Loading branch information
wonder-sk committed Dec 4, 2019
1 parent f341b34 commit 11d5275
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions src/core/expression/qgsexpressionnodeimpl.cpp
Expand Up @@ -298,14 +298,22 @@ QVariant QgsExpressionNodeBinaryOperator::evalNode( QgsExpression *parent, const

case boAnd:
{
QgsExpressionUtils::TVL tvlL = QgsExpressionUtils::getTVLValue( vL, parent ), tvlR = QgsExpressionUtils::getTVLValue( vR, parent );
QgsExpressionUtils::TVL tvlL = QgsExpressionUtils::getTVLValue( vL, parent );
ENSURE_NO_EVAL_ERROR;
if ( tvlL == QgsExpressionUtils::False )
return TVL_False; // shortcut -- no need to evaluate right-hand side
QgsExpressionUtils::TVL tvlR = QgsExpressionUtils::getTVLValue( vR, parent );
ENSURE_NO_EVAL_ERROR;
return QgsExpressionUtils::tvl2variant( QgsExpressionUtils::AND[tvlL][tvlR] );
}

case boOr:
{
QgsExpressionUtils::TVL tvlL = QgsExpressionUtils::getTVLValue( vL, parent ), tvlR = QgsExpressionUtils::getTVLValue( vR, parent );
QgsExpressionUtils::TVL tvlL = QgsExpressionUtils::getTVLValue( vL, parent );
ENSURE_NO_EVAL_ERROR;
if ( tvlL == QgsExpressionUtils::True )
return TVL_True; // shortcut -- no need to evaluate right-hand side
QgsExpressionUtils::TVL tvlR = QgsExpressionUtils::getTVLValue( vR, parent );
ENSURE_NO_EVAL_ERROR;
return QgsExpressionUtils::tvl2variant( QgsExpressionUtils::OR[tvlL][tvlR] );
}
Expand Down

0 comments on commit 11d5275

Please sign in to comment.