#include <QueryConditionImpl.h>
Public Member Functions | |
QueryConditionImpl (DataReaderImpl *dr, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states, const char *query_expression) | |
virtual | ~QueryConditionImpl () |
char * | get_query_expression () |
DDS::ReturnCode_t | get_query_parameters (DDS::StringSeq &query_parameters) |
DDS::ReturnCode_t | set_query_parameters (const DDS::StringSeq &query_parameters) |
CORBA::Boolean | get_trigger_value () |
std::vector< OPENDDS_STRING > | getOrderBys () const |
bool | hasFilter () const |
template<typename Sample > | |
bool | filter (const Sample &s) const |
Private Attributes | |
CORBA::String_var | query_expression_ |
DDS::StringSeq | query_parameters_ |
FilterEvaluator | evaluator_ |
ACE_Recursive_Thread_Mutex | lock_ |
Concurrent access to query_parameters_. |
Definition at line 31 of file QueryConditionImpl.h.
OpenDDS::DCPS::QueryConditionImpl::QueryConditionImpl | ( | DataReaderImpl * | dr, | |
DDS::SampleStateMask | sample_states, | |||
DDS::ViewStateMask | view_states, | |||
DDS::InstanceStateMask | instance_states, | |||
const char * | query_expression | |||
) |
Definition at line 19 of file QueryConditionImpl.cpp.
References ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, evaluator_, LM_DEBUG, and OpenDDS::DCPS::FilterEvaluator::number_parameters().
00023 : ReadConditionImpl(dr, sample_states, view_states, instance_states) 00024 , query_expression_(query_expression) 00025 , evaluator_(query_expression, true) 00026 { 00027 if (DCPS_debug_level > 5) { 00028 ACE_DEBUG((LM_DEBUG, 00029 ACE_TEXT("(%P|%t) QueryConditionImpl::QueryConditionImpl() - ") 00030 ACE_TEXT("Creating qc with query <%C> which requires <%d> parameters\n"), 00031 query_expression, evaluator_.number_parameters())); 00032 } 00033 }
virtual OpenDDS::DCPS::QueryConditionImpl::~QueryConditionImpl | ( | ) | [inline, virtual] |
Definition at line 39 of file QueryConditionImpl.h.
bool OpenDDS::DCPS::QueryConditionImpl::filter | ( | const Sample & | s | ) | const [inline] |
Definition at line 55 of file QueryConditionImpl.h.
Referenced by OpenDDS::DCPS::RakeResults< SampleSeq >::insert_sample().
00056 { 00057 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard, lock_, false); 00058 return evaluator_.eval(s, query_parameters_); 00059 }
char * OpenDDS::DCPS::QueryConditionImpl::get_query_expression | ( | ) |
Implements DDS::QueryCondition.
Definition at line 35 of file QueryConditionImpl.cpp.
References query_expression_, and FACE::string_dup().
00036 { 00037 return CORBA::string_dup(query_expression_); 00038 }
DDS::ReturnCode_t OpenDDS::DCPS::QueryConditionImpl::get_query_parameters | ( | DDS::StringSeq & | query_parameters | ) |
Definition at line 41 of file QueryConditionImpl.cpp.
References lock_, query_parameters_, and DDS::RETCODE_OK.
00042 { 00043 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard, lock_, false); 00044 query_parameters = query_parameters_; 00045 return DDS::RETCODE_OK; 00046 }
CORBA::Boolean OpenDDS::DCPS::QueryConditionImpl::get_trigger_value | ( | ) |
Reimplemented from OpenDDS::DCPS::ReadConditionImpl.
Definition at line 84 of file QueryConditionImpl.cpp.
References OpenDDS::DCPS::DataReaderImpl::contains_sample_filtered(), evaluator_, hasFilter(), OpenDDS::DCPS::ReadConditionImpl::instance_states_, lock_, OpenDDS::DCPS::ReadConditionImpl::parent_, query_parameters_, OpenDDS::DCPS::DataReaderImpl::sample_lock_, OpenDDS::DCPS::ReadConditionImpl::sample_states_, and OpenDDS::DCPS::ReadConditionImpl::view_states_.
00085 { 00086 if (hasFilter()) { 00087 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard2, parent_->sample_lock_, false); 00088 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard, lock_, false); 00089 return parent_->contains_sample_filtered(sample_states_, view_states_, 00090 instance_states_, evaluator_, query_parameters_); 00091 } else { 00092 return ReadConditionImpl::get_trigger_value(); 00093 } 00094 }
std::vector< OPENDDS_STRING > OpenDDS::DCPS::QueryConditionImpl::getOrderBys | ( | ) | const |
Definition at line 72 of file QueryConditionImpl.cpp.
References evaluator_.
Referenced by OpenDDS::DCPS::RakeResults< SampleSeq >::RakeResults().
00073 { 00074 return evaluator_.getOrderBys(); 00075 }
bool OpenDDS::DCPS::QueryConditionImpl::hasFilter | ( | ) | const |
Definition at line 78 of file QueryConditionImpl.cpp.
References evaluator_, and OpenDDS::DCPS::FilterEvaluator::hasFilter().
Referenced by get_trigger_value(), and OpenDDS::DCPS::RakeResults< SampleSeq >::RakeResults().
00079 { 00080 return evaluator_.hasFilter(); 00081 }
DDS::ReturnCode_t OpenDDS::DCPS::QueryConditionImpl::set_query_parameters | ( | const DDS::StringSeq & | query_parameters | ) |
Definition at line 49 of file QueryConditionImpl.cpp.
References ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, evaluator_, LM_ERROR, lock_, OpenDDS::DCPS::FilterEvaluator::number_parameters(), query_parameters_, DDS::RETCODE_ERROR, and DDS::RETCODE_OK.
00050 { 00051 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard, lock_, false); 00052 00053 // Check sequence of strings that give values to the ‘parameters’ (i.e., "%n" tokens) 00054 // in the query_expression matches the size of the parameter sequence. 00055 // The tokens start with 0 which means that when the maximum number used is 1 we need 00056 // two parameters, (zero and one) 00057 if (query_parameters.length() != evaluator_.number_parameters()) { 00058 if (DCPS_debug_level > 1) { 00059 ACE_ERROR((LM_ERROR, 00060 ACE_TEXT("(%P|%t) QueryConditionImpl::set_expression_parameters() - ") 00061 ACE_TEXT("passed incorrect set of query parameters, expected %d received %d\n"), 00062 evaluator_.number_parameters (), query_parameters.length())); 00063 } 00064 return DDS::RETCODE_ERROR; 00065 } 00066 00067 query_parameters_ = query_parameters; 00068 return DDS::RETCODE_OK; 00069 }
Definition at line 64 of file QueryConditionImpl.h.
Referenced by get_trigger_value(), getOrderBys(), hasFilter(), QueryConditionImpl(), and set_query_parameters().
ACE_Recursive_Thread_Mutex OpenDDS::DCPS::QueryConditionImpl::lock_ [mutable, private] |
Concurrent access to query_parameters_.
Reimplemented from OpenDDS::DCPS::ConditionImpl.
Definition at line 66 of file QueryConditionImpl.h.
Referenced by get_query_parameters(), get_trigger_value(), and set_query_parameters().
Definition at line 62 of file QueryConditionImpl.h.
Referenced by get_query_expression().
Definition at line 63 of file QueryConditionImpl.h.
Referenced by get_query_parameters(), get_trigger_value(), and set_query_parameters().