Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Added optional geometry parameter when evaluating predicates
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@13433 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
wonder committed May 7, 2010
1 parent 13caae4 commit 9ff72e1
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
4 changes: 3 additions & 1 deletion python/core/qgssearchtreenode.sip
Expand Up @@ -90,7 +90,8 @@ class QgsSearchTreeNode
QString makeSearchString();

//! checks whether the node tree is valid against supplied attributes
bool checkAgainst( const QMap<int,QgsField>& fields, const QMap<int, QVariant>& attributes );
//! @note optional geom parameter added in 1.5
bool checkAgainst( const QMap<int,QgsField>& fields, const QMap<int, QVariant>& attributes, QgsGeometry* geom = 0 );

//! checks if there were errors during evaluation
bool hasError();
Expand All @@ -99,6 +100,7 @@ class QgsSearchTreeNode
const QString& errorMsg();

//! wrapper around valueAgainst()
//! @note added in 1.4
bool getValue( QgsSearchTreeValue& value /Out/, QgsSearchTreeNode* node,
const QMap<int,QgsField>& fields, const QMap<int,QVariant>& attributes, QgsGeometry* geom = 0 );

Expand Down
20 changes: 10 additions & 10 deletions src/core/qgssearchtreenode.cpp
Expand Up @@ -250,7 +250,7 @@ QStringList QgsSearchTreeNode::referencedColumns()
}


bool QgsSearchTreeNode::checkAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes )
bool QgsSearchTreeNode::checkAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes, QgsGeometry* geom )
{
QgsDebugMsgLevel( "checkAgainst: " + makeSearchString(), 2 );

Expand All @@ -269,21 +269,21 @@ bool QgsSearchTreeNode::checkAgainst( const QgsFieldMap& fields, const QgsAttrib
switch ( mOp )
{
case opNOT:
return !mLeft->checkAgainst( fields, attributes );
return !mLeft->checkAgainst( fields, attributes, geom );

case opAND:
if ( !mLeft->checkAgainst( fields, attributes ) )
if ( !mLeft->checkAgainst( fields, attributes, geom ) )
return false;
return mRight->checkAgainst( fields, attributes );
return mRight->checkAgainst( fields, attributes, geom );

case opOR:
if ( mLeft->checkAgainst( fields, attributes ) )
if ( mLeft->checkAgainst( fields, attributes, geom ) )
return true;
return mRight->checkAgainst( fields, attributes );
return mRight->checkAgainst( fields, attributes, geom );

case opISNULL:
case opISNOTNULL:
if ( !getValue( value1, mLeft, fields, attributes ) )
if ( !getValue( value1, mLeft, fields, attributes, geom ) )
return false;

if ( mOp == opISNULL )
Expand All @@ -302,7 +302,7 @@ bool QgsSearchTreeNode::checkAgainst( const QgsFieldMap& fields, const QgsAttrib
case opGE:
case opLE:

if ( !getValue( value1, mLeft, fields, attributes ) || !getValue( value2, mRight, fields, attributes ) )
if ( !getValue( value1, mLeft, fields, attributes, geom ) || !getValue( value2, mRight, fields, attributes, geom ) )
return false;

if ( value1.isNull() || value2.isNull() )
Expand All @@ -329,8 +329,8 @@ bool QgsSearchTreeNode::checkAgainst( const QgsFieldMap& fields, const QgsAttrib
case opRegexp:
case opLike:
{
if ( !getValue( value1, mLeft, fields, attributes ) ||
!getValue( value2, mRight, fields, attributes ) )
if ( !getValue( value1, mLeft, fields, attributes, geom ) ||
!getValue( value2, mRight, fields, attributes, geom ) )
return false;

// value1 is string to be matched
Expand Down
4 changes: 3 additions & 1 deletion src/core/qgssearchtreenode.h
Expand Up @@ -127,7 +127,8 @@ class CORE_EXPORT QgsSearchTreeNode
QString makeSearchString();

//! checks whether the node tree is valid against supplied attributes
bool checkAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes );
//! @note optional geom parameter added in 1.5
bool checkAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes, QgsGeometry* geom = 0 );

//! checks if there were errors during evaluation
bool hasError() { return ( !mError.isEmpty() ); }
Expand All @@ -136,6 +137,7 @@ class CORE_EXPORT QgsSearchTreeNode
const QString& errorMsg() { return mError; }

//! wrapper around valueAgainst()
//! @note added in 1.4
bool getValue( QgsSearchTreeValue& value, QgsSearchTreeNode* node,
const QgsFieldMap& fields, const QgsAttributeMap& attributes, QgsGeometry* geom = 0 );

Expand Down

0 comments on commit 9ff72e1

Please sign in to comment.