@@ -3268,14 +3268,15 @@ static msExprNode* BuildExprTree(tokenListNodeObjPtr node,
3268
3268
{
3269
3269
if ( node->next && node->next ->token == ' (' )
3270
3270
{
3271
+ int node_token = node->token ;
3271
3272
msExprNode* subExpr = BuildExprTree (node->next ->next , &node,
3272
3273
nParenthesisLevel + 1 );
3273
3274
if ( subExpr == NULL )
3274
3275
{
3275
3276
goto fail;
3276
3277
}
3277
3278
msExprNode* newNode = new msExprNode;
3278
- newNode->m_nToken = node-> token ;
3279
+ newNode->m_nToken = node_token ;
3279
3280
if ( subExpr->m_nToken == 0 )
3280
3281
{
3281
3282
newNode->m_aoChildren = subExpr->m_aoChildren ;
@@ -3393,6 +3394,8 @@ static msExprNode* BuildExprTree(tokenListNodeObjPtr node,
3393
3394
3394
3395
/* *********************************************************************
3395
3396
* msOGRExtractTopSpatialFilter()
3397
+ *
3398
+ * Recognize expressions like "Intersects([shape], wkt) == TRUE [AND ....]"
3396
3399
**********************************************************************/
3397
3400
static int msOGRExtractTopSpatialFilter ( msOGRFileInfo *info,
3398
3401
const msExprNode* expr,
@@ -3401,6 +3404,15 @@ static int msOGRExtractTopSpatialFilter( msOGRFileInfo *info,
3401
3404
if ( expr == NULL )
3402
3405
return MS_FALSE;
3403
3406
3407
+ if ( expr->m_nToken == MS_TOKEN_COMPARISON_EQ &&
3408
+ expr->m_aoChildren .size () == 2 &&
3409
+ expr->m_aoChildren [1 ]->m_nToken == MS_TOKEN_LITERAL_BOOLEAN &&
3410
+ expr->m_aoChildren [1 ]->m_dfVal == 1.0 )
3411
+ {
3412
+ return msOGRExtractTopSpatialFilter (info, expr->m_aoChildren [0 ],
3413
+ pSpatialFilterNode);
3414
+ }
3415
+
3404
3416
if ( expr->m_nToken == MS_TOKEN_COMPARISON_INTERSECTS &&
3405
3417
expr->m_aoChildren .size () == 2 &&
3406
3418
expr->m_aoChildren [1 ]->m_nToken == MS_TOKEN_LITERAL_SHAPE )
0 commit comments