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