1 #ifndef __JDB_JSELECTOR__
2 #define __JDB_JSELECTOR__
13 #include "KM3NeTDBClient.h"
26 using KM3NeT::DB::Selector;
32 static const Selector::RelOp*
const OPERAND[] =
34 &Selector::RelOp::Equal,
35 &Selector::RelOp::Different,
36 &Selector::RelOp::Less,
37 &Selector::RelOp::LessEqual,
38 &Selector::RelOp::Greater,
39 &Selector::RelOp::GreaterEqual
55 inline const Selector::RelOp&
getOperand(
const int index)
75 static const char EOL =
';';
93 JSelector(
const std::string& key,
const T value,
const Selector::RelOp& operand = Selector::RelOp::Equal)
95 add(key, value, operand);
106 template<
class JClass_t,
class JType_t>
107 JSelector(JType_t JClass_t::*data_member,
const JType_t value,
const Selector::RelOp& operand = Selector::RelOp::Equal)
109 add(data_member, value, operand);
120 template<
class JClass_t>
121 JSelector(std::string JClass_t::*data_member,
const std::string value,
const Selector::RelOp& operand = Selector::RelOp::Equal)
123 add(data_member, value, operand);
137 copy(selection.begin(), selection.end(), back_inserter(*
this));
152 JSelector&
add(
const std::string& key,
const T value,
const Selector::RelOp& operand = Selector::RelOp::Equal)
160 push_back(Selector(key.c_str(), os.str().c_str(), operand));
174 template<
class JClass_t,
class JType_t>
175 inline JSelector&
add(JType_t JClass_t::*data_member,
const JType_t value,
const Selector::RelOp& operand = Selector::RelOp::Equal)
189 template<
class JClass_t>
190 inline JSelector&
add(std::string JClass_t::*data_member,
const std::string& value,
const Selector::RelOp& operand = Selector::RelOp::Equal)
216 string::size_type pos = buffer.find(
getOperand(i).Render());
218 if (pos != string::npos && (operand == -1 ||
getOperand(i).Render().length() >
getOperand(operand).Render().length())) {
225 string::size_type pos = buffer.find(
getOperand(operand).Render());
227 selector.push_back(Selector(
JPP::trim(buffer.substr(0, pos)).c_str(),
233 in.setstate(ios::badbit);
249 for (const_iterator i = selector.begin(); i != selector.end(); ++i) {
250 out << i->Name << i->RelationalOperator.Render() << i->Value <<
JSelector::EOL << std::endl;