OpenDDS  Snapshot(2023/04/28-20:55)
Public Member Functions | Private Member Functions | Private Attributes | List of all members
OpenDDS::DCPS::QueryConditionImpl Class Reference

#include <QueryConditionImpl.h>

Inheritance diagram for OpenDDS::DCPS::QueryConditionImpl:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::QueryConditionImpl:
Collaboration graph
[legend]

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_STRINGgetOrderBys () const
 
bool hasFilter () const
 
template<typename Sample >
bool filter (const Sample &s, bool sample_only_has_key_fields) const
 
- Public Member Functions inherited from DDS::QueryCondition
ReturnCode_t get_query_parameters (inout StringSeq query_parameters)
 
ReturnCode_t set_query_parameters (in StringSeq query_parameters)
 
- Public Member Functions inherited from OpenDDS::DCPS::LocalObjectBase
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
virtual CORBA::ULong _refcount_value () const
 
- Public Member Functions inherited from CORBA::LocalObject
virtual ~LocalObject (void)
 
virtual CORBA::Boolean _non_existent (void)
 
virtual char * _repository_id (void)
 
virtual CORBA::InterfaceDef_ptr _get_interface (void)
 
virtual CORBA::Object_ptr _get_component (void)
 
virtual void _create_request (CORBA::Context_ptr ctx, const char *operation, CORBA::NVList_ptr arg_list, CORBA::NamedValue_ptr result, CORBA::Request_ptr &request, CORBA::Flags req_flags)
 
virtual void _create_request (CORBA::Context_ptr ctx, const char *operation, CORBA::NVList_ptr arg_list, CORBA::NamedValue_ptr result, CORBA::ExceptionList_ptr exclist, CORBA::ContextList_ptr ctxtlist, CORBA::Request_ptr &request, CORBA::Flags req_flags)
 
virtual CORBA::Request_ptr _request (const char *operation)
 
CORBA::Policy_ptr _get_policy (CORBA::PolicyType type)
 
CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type)
 
CORBA::Object_ptr _set_policy_overrides (const CORBA::PolicyList &policies, CORBA::SetOverrideType set_add)
 
CORBA::PolicyList_get_policy_overrides (const CORBA::PolicyTypeSeq &types)
 
CORBA::Boolean _validate_connection (CORBA::PolicyList_out inconsistent_policies)
 
virtual CORBA::ULong _hash (CORBA::ULong maximum)
 
virtual CORBA::Boolean _is_equivalent (CORBA::Object_ptr other_obj)
 
virtual CORBA::ORB_ptr _get_orb (void)
 
virtual TAO::ObjectKey_key (void)
 
- Public Member Functions inherited from CORBA::Object
virtual ~Object (void)
 
virtual TAO_Abstract_ServantBase_servant (void) const
 
virtual CORBA::Boolean _is_collocated (void) const
 
virtual CORBA::Boolean _is_local (void) const
 
 Object (TAO_Stub *p, CORBA::Boolean collocated=false, TAO_Abstract_ServantBase *servant=0, TAO_ORB_Core *orb_core=0)
 
 Object (IOP::IOR *ior, TAO_ORB_Core *orb_core)
 
virtual TAO_Stub_stubobj (void) const
 
virtual TAO_Stub_stubobj (void)
 
virtual void _proxy_broker (TAO::Object_Proxy_Broker *proxy_broker)
 
virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr)
 
CORBA::Boolean is_evaluated (void) const
 
TAO_ORB_Coreorb_core (void) const
 
IOP::IORsteal_ior (void)
 
const IOP::IORior (void) const
 
virtual bool can_convert_to_ior (void) const
 
virtual char * convert_to_ior (bool use_omg_ior_format, const char *ior_prefix) const
 
void _decr_refcount (void)
 
virtual CORBA::Boolean _is_a (const char *logical_type_id)
 
virtual const char * _interface_repository_id (void) const
 
CORBA::Policy_ptr _get_policy (CORBA::PolicyType type)
 
CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type)
 
CORBA::Object_ptr _set_policy_overrides (const CORBA::PolicyList &policies, CORBA::SetOverrideType set_add)
 
CORBA::PolicyList_get_policy_overrides (const CORBA::PolicyTypeSeq &types)
 
CORBA::Boolean _validate_connection (CORBA::PolicyList_out inconsistent_policies)
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 
- Public Member Functions inherited from OpenDDS::DCPS::ReadConditionImpl
 ReadConditionImpl (DataReaderImpl *dr, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
 
virtual ~ReadConditionImpl ()
 
CORBA::Boolean get_trigger_value ()
 
DDS::SampleStateMask get_sample_state_mask ()
 
DDS::ViewStateMask get_view_state_mask ()
 
DDS::InstanceStateMask get_instance_state_mask ()
 
DDS::DataReader_ptr get_datareader ()
 
- Public Member Functions inherited from OpenDDS::DCPS::ConditionImpl
DDS::ReturnCode_t attach_to_ws (DDS::WaitSet_ptr ws)
 
DDS::ReturnCode_t detach_from_ws (DDS::WaitSet_ptr ws)
 
void signal_all ()
 

Private Member Functions

TypeSupportImplget_type_support () const
 

Private Attributes

CORBA::String_var query_expression_
 
DDS::StringSeq query_parameters_
 
FilterEvaluator evaluator_
 
ACE_Recursive_Thread_Mutex lock_
 Concurrent access to query_parameters_. More...
 

Additional Inherited Members

- Public Types inherited from OpenDDS::DCPS::LocalObject< DDS::QueryCondition >
typedef DDS::QueryCondition ::_ptr_type _ptr_type
 
typedef DDS::QueryCondition ::_var_type _var_type
 
- Public Types inherited from CORBA::LocalObject
typedef LocalObject_ptr _ptr_type
 
typedef LocalObject_var _var_type
 
typedef LocalObject_out _out_type
 
- Public Types inherited from CORBA::Object
typedef Object_ptr _ptr_type
 
typedef Object_var _var_type
 
typedef Object_out _out_type
 
- Public Types inherited from OpenDDS::DCPS::LocalObject< DDS::ReadCondition >
typedef DDS::ReadCondition ::_ptr_type _ptr_type
 
typedef DDS::ReadCondition ::_var_type _var_type
 
- Public Types inherited from OpenDDS::DCPS::LocalObject< DDS::Condition >
typedef DDS::Condition ::_ptr_type _ptr_type
 
typedef DDS::Condition ::_var_type _var_type
 
- Static Public Member Functions inherited from OpenDDS::DCPS::LocalObject< DDS::QueryCondition >
static _ptr_type _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from CORBA::LocalObject
static LocalObject_ptr _duplicate (LocalObject_ptr obj)
 
static LocalObject_ptr _nil (void)
 
static LocalObject_ptr _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from CORBA::Object
static CORBA::Boolean marshal (const Object_ptr x, TAO_OutputCDR &cdr)
 
static void _tao_any_destructor (void *)
 
static CORBA::Boolean is_nil_i (CORBA::Object_ptr obj)
 
static void tao_object_initialize (Object *)
 
static CORBA::Object_ptr _duplicate (CORBA::Object_ptr obj)
 
static CORBA::Object_ptr _nil (void)
 
static CORBA::Object_ptr _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from OpenDDS::DCPS::LocalObject< DDS::ReadCondition >
static _ptr_type _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from OpenDDS::DCPS::LocalObject< DDS::Condition >
static _ptr_type _narrow (CORBA::Object_ptr obj)
 
- Protected Member Functions inherited from CORBA::LocalObject
 LocalObject (void)
 
- Protected Member Functions inherited from CORBA::Object
 Object (int dummy=0)
 
TAO::Object_Proxy_Brokerproxy_broker () const
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 
- Protected Member Functions inherited from OpenDDS::DCPS::ConditionImpl
 ConditionImpl ()
 
virtual ~ConditionImpl ()
 
typedef OPENDDS_SET (OpenDDS::DCPS::WeakRcHandle< DDS::WaitSet >) WaitSetSet
 
- Protected Attributes inherited from CORBA::Object
ACE_Atomic_Op< TAO_SYNCH_MUTEX, unsigned long > refcount_
 
- Protected Attributes inherited from OpenDDS::DCPS::ReadConditionImpl
DataReaderImplparent_
 
DDS::SampleStateMask sample_states_
 
DDS::ViewStateMask view_states_
 
DDS::InstanceStateMask instance_states_
 
- Protected Attributes inherited from OpenDDS::DCPS::ConditionImpl
WaitSetSet waitsets_
 
ACE_Recursive_Thread_Mutex lock_
 

Detailed Description

Definition at line 32 of file QueryConditionImpl.h.

Constructor & Destructor Documentation

◆ QueryConditionImpl()

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_DEBUG, ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, evaluator_, LM_DEBUG, and OpenDDS::DCPS::FilterEvaluator::number_parameters().

24  , query_expression_(query_expression)
25  , evaluator_(query_expression, true)
26 {
27  if (DCPS_debug_level > 5) {
28  ACE_DEBUG((LM_DEBUG,
29  ACE_TEXT("(%P|%t) QueryConditionImpl::QueryConditionImpl() - ")
30  ACE_TEXT("Creating qc with query <%C> which requires <%d> parameters\n"),
31  query_expression, evaluator_.number_parameters()));
32  }
33 }
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:72
#define ACE_DEBUG(X)
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:72
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:72
ReadConditionImpl(DataReaderImpl *dr, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
ACE_TEXT("TCP_Factory")
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30

◆ ~QueryConditionImpl()

virtual OpenDDS::DCPS::QueryConditionImpl::~QueryConditionImpl ( )
inlinevirtual

Definition at line 40 of file QueryConditionImpl.h.

40 {}

Member Function Documentation

◆ filter()

template<typename Sample >
bool OpenDDS::DCPS::QueryConditionImpl::filter ( const Sample s,
bool  sample_only_has_key_fields 
) const
inline

Returns true if the sample matches the query.

Definition at line 59 of file QueryConditionImpl.h.

References ACE_DEBUG, ACE_GUARD_RETURN, ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, LM_DEBUG, and lock_.

Referenced by OpenDDS::DCPS::RakeResults< MessageType >::insert_sample().

60  {
62  /*
63  * Omit the sample from results if the query references non-key fields
64  * and the sample only has key fields.
65  */
66  TypeSupportImpl* const ts = get_type_support();
67  if (!ts || (sample_only_has_key_fields && evaluator_.has_non_key_fields(*ts))) {
68  if (DCPS_debug_level > 8) {
69  ACE_DEBUG((LM_DEBUG,
70  ACE_TEXT("(%P|%t) QueryConditionImpl::filter: ")
71  ACE_TEXT("Sample has been filtered because the query ")
72  ACE_TEXT("references fields that are not readable\n")
73  ));
74  }
75  return false;
76  }
78  }
#define ACE_DEBUG(X)
ACE_Recursive_Thread_Mutex lock_
Concurrent access to query_parameters_.
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
ACE_TEXT("TCP_Factory")
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
bool eval(const T &sample, const DDS::StringSeq &params) const
TypeSupportImpl * get_type_support() const
bool has_non_key_fields(const TypeSupportImpl &ts) const

◆ get_query_expression()

char * OpenDDS::DCPS::QueryConditionImpl::get_query_expression ( )

Implements DDS::QueryCondition.

Definition at line 35 of file QueryConditionImpl.cpp.

References query_expression_, and CORBA::string_dup().

36 {
38 }
char * string_dup(const char *)

◆ get_query_parameters()

DDS::ReturnCode_t OpenDDS::DCPS::QueryConditionImpl::get_query_parameters ( DDS::StringSeq query_parameters)

Definition at line 41 of file QueryConditionImpl.cpp.

References ACE_GUARD_RETURN, lock_, query_parameters_, and DDS::RETCODE_OK.

42 {
44  query_parameters = query_parameters_;
45  return DDS::RETCODE_OK;
46 }
ACE_Recursive_Thread_Mutex lock_
Concurrent access to query_parameters_.
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
const ReturnCode_t RETCODE_OK

◆ get_trigger_value()

CORBA::Boolean OpenDDS::DCPS::QueryConditionImpl::get_trigger_value ( )

Implements DDS::Condition.

Definition at line 84 of file QueryConditionImpl.cpp.

References ACE_GUARD_RETURN, OpenDDS::DCPS::DataReaderImpl::contains_sample_filtered(), evaluator_, OpenDDS::DCPS::ReadConditionImpl::get_trigger_value(), 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_.

85 {
86  if (hasFilter()) {
91  } else {
93  }
94 }
ACE_Recursive_Thread_Mutex lock_
Concurrent access to query_parameters_.
virtual bool contains_sample_filtered(DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states, const FilterEvaluator &evaluator, const DDS::StringSeq &params)=0
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
ACE_Recursive_Thread_Mutex sample_lock_
lock protecting sample container as well as statuses.
DDS::SampleStateMask sample_states_
DDS::InstanceStateMask instance_states_

◆ get_type_support()

TypeSupportImpl * OpenDDS::DCPS::QueryConditionImpl::get_type_support ( ) const
private

Definition at line 96 of file QueryConditionImpl.cpp.

References OpenDDS::DCPS::DataReaderImpl::get_topicdescription(), OpenDDS::DCPS::TopicDescriptionImpl::get_type_support(), OPENDDS_END_VERSIONED_NAMESPACE_DECL, and OpenDDS::DCPS::ReadConditionImpl::parent_.

97 {
98  DDS::TopicDescription_var td = parent_->get_topicdescription();
99  TopicDescriptionImpl* const tdi = dynamic_cast<TopicDescriptionImpl*>(td.in());
100  TypeSupport* const ts = tdi ? tdi->get_type_support() : 0;
101  return dynamic_cast<TypeSupportImpl*>(ts);
102 }
virtual DDS::TopicDescription_ptr get_topicdescription()
sequence<<%SCOPED%><%TYPE%><%SEQ%> local interface<%TYPE%> TypeSupport
Definition: IDLTemplate.txt:4

◆ getOrderBys()

std::vector< OPENDDS_STRING > OpenDDS::DCPS::QueryConditionImpl::getOrderBys ( ) const

Definition at line 72 of file QueryConditionImpl.cpp.

References evaluator_.

Referenced by OpenDDS::DCPS::RakeResults< MessageType >::RakeResults().

73 {
74  return evaluator_.getOrderBys();
75 }

◆ hasFilter()

bool OpenDDS::DCPS::QueryConditionImpl::hasFilter ( ) const

◆ set_query_parameters()

DDS::ReturnCode_t OpenDDS::DCPS::QueryConditionImpl::set_query_parameters ( const DDS::StringSeq query_parameters)

Definition at line 49 of file QueryConditionImpl.cpp.

References ACE_ERROR, ACE_GUARD_RETURN, 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.

50 {
52 
53  // Check sequence of strings that give values to the ‘parameters’ (i.e., "%n" tokens)
54  // in the query_expression matches the size of the parameter sequence.
55  // The tokens start with 0 which means that when the maximum number used is 1 we need
56  // two parameters, (zero and one)
57  if (query_parameters.length() != evaluator_.number_parameters()) {
58  if (DCPS_debug_level > 1) {
59  ACE_ERROR((LM_ERROR,
60  ACE_TEXT("(%P|%t) QueryConditionImpl::set_expression_parameters() - ")
61  ACE_TEXT("passed incorrect set of query parameters, expected %d received %d\n"),
62  evaluator_.number_parameters (), query_parameters.length()));
63  }
64  return DDS::RETCODE_ERROR;
65  }
66 
67  query_parameters_ = query_parameters;
68  return DDS::RETCODE_OK;
69 }
#define ACE_ERROR(X)
ACE_Recursive_Thread_Mutex lock_
Concurrent access to query_parameters_.
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
ACE_TEXT("TCP_Factory")
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK

Member Data Documentation

◆ evaluator_

FilterEvaluator OpenDDS::DCPS::QueryConditionImpl::evaluator_
private

◆ lock_

ACE_Recursive_Thread_Mutex OpenDDS::DCPS::QueryConditionImpl::lock_
mutableprivate

Concurrent access to query_parameters_.

Definition at line 87 of file QueryConditionImpl.h.

Referenced by get_query_parameters(), get_trigger_value(), and set_query_parameters().

◆ query_expression_

CORBA::String_var OpenDDS::DCPS::QueryConditionImpl::query_expression_
private

Definition at line 83 of file QueryConditionImpl.h.

Referenced by get_query_expression().

◆ query_parameters_

DDS::StringSeq OpenDDS::DCPS::QueryConditionImpl::query_parameters_
private

The documentation for this class was generated from the following files: