Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsexpressionnode.cpp 3 : : ------------------- 4 : : begin : May 2017 5 : : copyright : (C) 2017 Matthias Kuhn 6 : : email : matthias@opengis.ch 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #include "qgsexpressionnode.h" 17 : : #include "qgsexpression.h" 18 : : 19 : : 20 : 0 : QVariant QgsExpressionNode::eval( QgsExpression *parent, const QgsExpressionContext *context ) 21 : : { 22 : 0 : if ( mHasCachedValue ) 23 : : { 24 : 0 : return mCachedStaticValue; 25 : : } 26 : : else 27 : : { 28 : 0 : QVariant res = evalNode( parent, context ); 29 : 0 : return res; 30 : 0 : } 31 : 0 : } 32 : : 33 : 0 : bool QgsExpressionNode::prepare( QgsExpression *parent, const QgsExpressionContext *context ) 34 : : { 35 : 0 : mHasCachedValue = false; 36 : 0 : if ( isStatic( parent, context ) ) 37 : : { 38 : : // some calls to isStatic already evaluate the node to a cached value, so if that's 39 : : // happened then don't re-evaluate again 40 : 0 : if ( !mHasCachedValue ) 41 : : { 42 : 0 : mCachedStaticValue = evalNode( parent, context ); 43 : 0 : if ( !parent->hasEvalError() ) 44 : 0 : mHasCachedValue = true; 45 : 0 : } 46 : 0 : return true; 47 : : } 48 : : else 49 : : { 50 : 0 : return prepareNode( parent, context ); 51 : : } 52 : 0 : } 53 : : 54 : 0 : void QgsExpressionNode::cloneTo( QgsExpressionNode *target ) const 55 : : { 56 : 0 : target->mHasCachedValue = mHasCachedValue; 57 : 0 : target->mCachedStaticValue = mCachedStaticValue; 58 : 0 : target->parserLastColumn = parserLastColumn; 59 : 0 : target->parserLastLine = parserLastLine; 60 : 0 : target->parserFirstColumn = parserFirstColumn; 61 : 0 : target->parserFirstLine = parserFirstLine; 62 : 0 : } 63 : :