From a87a6fc2c51a8b272dae4113768311263b433e36 Mon Sep 17 00:00:00 2001
From: marco <marco@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Tue, 23 Mar 2010 18:17:56 +0000
Subject: [PATCH] fix query evaluation bug affecting nested within expressions

The evaluation bug caused query statements like
(8.0 <> [cname=A] and cname!=A) or 8.0 <> ([cname=B] and cname!=B)
to be misinterpreted. Fixes BZDNG-95.

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1875 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/mol/base/src/impl/query_ast.cc  | 6 +++++-
 modules/mol/base/src/impl/query_impl.cc | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/modules/mol/base/src/impl/query_ast.cc b/modules/mol/base/src/impl/query_ast.cc
index 1cf0133ea..9c602c124 100644
--- a/modules/mol/base/src/impl/query_ast.cc
+++ b/modules/mol/base/src/impl/query_ast.cc
@@ -93,8 +93,12 @@ bool WithinParam::HasValidRef() const {
 WithinParam::WithinParam()
   : center_(geom::Vec3(0,0,0)), radius_(0.0), lazily_bound_ref_(-1) {
 }
+
 bool WithinParam::operator==(const WithinParam& p) const {
-  return center_ == p.center_ && p.radius_==radius_;
+  if (lazily_bound_ref_>-1) {
+    return lazily_bound_ref_==p.lazily_bound_ref_ && p.radius_==radius_;
+  }
+  return center_==p.center_;
 }
 
 float WithinParam::GetRadiusSquare() const {
diff --git a/modules/mol/base/src/impl/query_impl.cc b/modules/mol/base/src/impl/query_impl.cc
index c0c2f5454..411f1d9bc 100644
--- a/modules/mol/base/src/impl/query_impl.cc
+++ b/modules/mol/base/src/impl/query_impl.cc
@@ -988,7 +988,7 @@ Node* QueryImpl::ParseWithinExpr(QueryLexer& lexer) {
     // index of the query for later access.
     QueryImplP q(new QueryImpl(rhs));
     bracketed_expr_.push_back(q);
-    ParamType pt(WithinParam(bracketed_expr_.size()-1, rv*rv));
+    ParamType pt(WithinParam(bracketed_expr_.size()-1, rv*rv));    
     inversion_stack_.pop_back();    
     CompOP comp_op= COP_LE;
     if (inversion_stack_.back())
-- 
GitLab