OpenDDS  Snapshot(2023/04/28-20:55)
QueryConditionImpl.cpp
Go to the documentation of this file.
1 /*
2  *
3  *
4  * Distributed under the OpenDDS License.
5  * See: http://www.opendds.org/license.html
6  */
7 
8 #include "DCPS/DdsDcps_pch.h" //Only the _pch include should start with DCPS/
9 
10 #ifndef OPENDDS_NO_QUERY_CONDITION
11 #include "QueryConditionImpl.h"
12 #include "DataReaderImpl.h"
13 
15 
16 namespace OpenDDS {
17 namespace DCPS {
18 
22  const char* query_expression)
23  : ReadConditionImpl(dr, sample_states, view_states, instance_states)
24  , query_expression_(query_expression)
25  , evaluator_(query_expression, true)
26 {
27  if (DCPS_debug_level > 5) {
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 }
34 
36 {
38 }
39 
42 {
44  query_parameters = query_parameters_;
45  return DDS::RETCODE_OK;
46 }
47 
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) {
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 }
70 
71 std::vector<OPENDDS_STRING>
73 {
74  return evaluator_.getOrderBys();
75 }
76 
77 bool
79 {
80  return evaluator_.hasFilter();
81 }
82 
85 {
86  if (hasFilter()) {
91  } else {
93  }
94 }
95 
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 }
103 
104 } // namespace DCPS
105 } // namespace OpenDDS
106 
108 
109 #endif // OPENDDS_NO_QUERY_CONDITION
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:72
#define ACE_DEBUG(X)
#define ACE_ERROR(X)
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:72
virtual DDS::TopicDescription_ptr get_topicdescription()
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
unsigned long InstanceStateMask
OpenDDS::DCPS::TypeSupport_ptr get_type_support()
DDS::ReturnCode_t get_query_parameters(DDS::StringSeq &query_parameters)
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:72
char * string_dup(const char *)
LM_DEBUG
ACE_CDR::Boolean Boolean
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
Implements the DDS::DataReader interface.
ACE_Recursive_Thread_Mutex sample_lock_
lock protecting sample container as well as statuses.
std::vector< OPENDDS_STRING > getOrderBys() const
DDS::SampleStateMask sample_states_
unsigned long SampleStateMask
ACE_TEXT("TCP_Factory")
QueryConditionImpl(DataReaderImpl *dr, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states, const char *query_expression)
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
Implements the DDS::TopicDescription interface.
DDS::InstanceStateMask instance_states_
const ReturnCode_t RETCODE_ERROR
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t set_query_parameters(const DDS::StringSeq &query_parameters)
TypeSupportImpl * get_type_support() const
LM_ERROR
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
unsigned long ViewStateMask
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50