DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::oks::OksQueryExpression Class Reference

OKS query expression class. More...

#include <query.hpp>

Inheritance diagram for dunedaq::oks::OksQueryExpression:
[legend]

Public Member Functions

virtual ~OksQueryExpression ()
OksQuery::QueryType type () const
bool CheckSyntax () const
bool operator== (const class OksQueryExpression &e) const

Protected Member Functions

 OksQueryExpression (OksQuery::QueryType qet=OksQuery::unknown_type)

Private Attributes

const OksQuery::QueryType p_type

Friends

std::ostream & operator<< (std::ostream &s, const OksQueryExpression &qe)

Detailed Description

OKS query expression class.

The abstract class provides interface to OKS query expression. A query expression has type and method to check its correctness.

Definition at line 112 of file query.hpp.

Constructor & Destructor Documentation

◆ ~OksQueryExpression()

virtual dunedaq::oks::OksQueryExpression::~OksQueryExpression ( )
inlinevirtual

Definition at line 117 of file query.hpp.

117{;}

◆ OksQueryExpression()

dunedaq::oks::OksQueryExpression::OksQueryExpression ( OksQuery::QueryType qet = OksQuery::unknown_type)
inlineprotected

Definition at line 126 of file query.hpp.

126: p_type (qet) {};
const OksQuery::QueryType p_type
Definition query.hpp:131

Member Function Documentation

◆ CheckSyntax()

bool dunedaq::oks::OksQueryExpression::CheckSyntax ( ) const

Definition at line 548 of file query.cpp.

549{
550 const char * fname = "OksQueryExpression::CheckSyntax()";
551
552 switch(p_type) {
554 if(!((OksComparator *)this)->attribute && !((OksComparator *)this)->value) {
555 Oks::error_msg(fname)
556 << "OksComparator: Can't execute query for nil attribute or nil object-id\n";
557 return false;
558 }
559 else if(!((OksComparator *)this)->m_comp_f) {
560 Oks::error_msg(fname)
561 << "OksComparator: Can't execute query for nil compare function\n";
562 return false;
563 }
564
565 return true;
566
568 if(!((OksRelationshipExpression *)this)->relationship) {
569 Oks::error_msg(fname)
570 << "OksRelationshipExpression: Can't execute query for nil relationship\n";
571 return false;
572 }
573 else if(!((OksRelationshipExpression *)this)->p_expression) {
574 Oks::error_msg(fname)
575 << "OksRelationshipExpression: Can't execute query for nil query expression\n";
576 return false;
577 }
578 else
579 return (((OksRelationshipExpression *)this)->p_expression)->CheckSyntax();
580
582 if(!((OksNotExpression *)this)->p_expression) {
583 Oks::error_msg(fname)
584 << "OksNotExpression: Can't execute \'not\' for nil query expression\n";
585 return false;
586 }
587
588 return (((OksNotExpression *)this)->p_expression)->CheckSyntax();
589
591 if(((OksAndExpression *)this)->p_expressions.size() < 2) {
592 Oks::error_msg(fname)
593 << "OksAndExpression: Can't execute \'and\' for "
594 << ((OksAndExpression *)this)->p_expressions.size() << " argument\n"
595 "Two or more arguments are required\n";
596 return false;
597 }
598 else {
599 std::list<OksQueryExpression *> & elist = ((OksAndExpression *)this)->p_expressions;
600
601 for(std::list<OksQueryExpression *>::iterator i = elist.begin(); i != elist.end(); ++i)
602 if((*i)->CheckSyntax() == false) return false;
603
604 return true;
605 }
606
608 if(((OksOrExpression *)this)->p_expressions.size() < 2) {
609 Oks::error_msg(fname)
610 << "OksOrExpression: Can't execute \'or\' for "
611 << ((OksOrExpression *)this)->p_expressions.size() << " argument\n"
612 "Two or more arguments are required\n";
613
614 return false;
615 }
616 else {
617 std::list<OksQueryExpression *> & elist = ((OksOrExpression *)this)->p_expressions;
618
619 for(std::list<OksQueryExpression *>::iterator i = elist.begin(); i != elist.end(); ++i)
620 if((*i)->CheckSyntax() == false) return false;
621
622 return true;
623 }
624
625 default:
626 Oks::error_msg(fname)
627 << "Unexpected query type " << (int)p_type << std::endl;
628
629 return false;
630 }
631}
static std::ostream & error_msg(const char *)
Definition kernel.cpp:561

◆ operator==()

bool dunedaq::oks::OksQueryExpression::operator== ( const class OksQueryExpression & e) const
inline

Definition at line 121 of file query.hpp.

121{return (this == &e);}

◆ type()

OksQuery::QueryType dunedaq::oks::OksQueryExpression::type ( ) const
inline

Definition at line 119 of file query.hpp.

119{return p_type;}

◆ operator<<

std::ostream & operator<< ( std::ostream & s,
const OksQueryExpression & qe )
friend

Definition at line 783 of file query.cpp.

785{
786 s << '(';
787
788 switch(qe.type()) {
790 OksComparator *cmpr = (OksComparator *)&qe;
791 const OksAttribute *a = cmpr->GetAttribute();
792 OksData *v = cmpr->GetValue();
793 OksQuery::Comparator f = cmpr->GetFunction();
794
795 if(a) {
796 s << '\"' << a->get_name() << "\" ";
797 }
798 else if(v) {
799 s << OksQuery::OID << ' ';
800 }
801 else {
802 s << "(null) ";
803 }
804
805 if(v) {
806 s << *v << ' ';
807 }
808 else {
809 s << "(null) ";
810 }
811
812 if(f) {
814 else if(f == OksQuery::not_equal_cmp) s << OksQuery::NE;
815 else if(f == OksQuery::reg_exp_cmp) s << OksQuery::RE;
818 else if(f == OksQuery::less_cmp) s << OksQuery::LS;
819 else if(f == OksQuery::greater_cmp) s << OksQuery::GT;
820 }
821 else
822 s << "(null)";
823
824 break; }
825
827 OksRelationshipExpression *re = (OksRelationshipExpression *)&qe;
828 const OksRelationship *r = re->GetRelationship();
829 bool b = re->IsCheckAllObjects();
830 OksQueryExpression *rqe = re->get();
831
832 if(r)
833 s << '\"' << r->get_name() << "\" ";
834 else
835 s << "(null) ";
836
837 s << (b == true ? OksQuery::ALL_SUBCLASSES : OksQuery::SOME) << ' ';
838
839 if(rqe) s << *rqe;
840 else s << "(null)";
841
842 break; }
843
845 s << OksQuery::NOT << ' ' << *(((OksNotExpression *)&qe)->get());
846
847 break;
848
849 case OksQuery::and_type: {
850 s << OksQuery::AND << ' ';
851
852 const std::list<OksQueryExpression *> & elist = ((OksAndExpression *)&qe)->expressions();
853
854 if(!elist.empty()) {
855 const OksQueryExpression * last = elist.back();
856
857 for(std::list<OksQueryExpression *>::const_iterator i = elist.begin(); i != elist.end(); ++i) {
858 s << *(*i);
859 if(*i != last) s << ' ';
860 }
861 }
862
863 break;
864 }
865
866 case OksQuery::or_type: {
867 s << OksQuery::OR << ' ';
868
869 const std::list<OksQueryExpression *> & elist = ((OksOrExpression *)&qe)->expressions();
870
871 if(!elist.empty()) {
872 const OksQueryExpression * last = elist.back();
873
874 for(std::list<OksQueryExpression *>::const_iterator i = elist.begin(); i != elist.end(); ++i) {
875 s << *(*i);
876 if(*i != last) s << ' ';
877 }
878 }
879
880 break;
881 }
882
884 s << "(unknown)";
885
886 break;
887 }
888 }
889
890 s << ')';
891
892 return s;
893}
OksQueryExpression(OksQuery::QueryType qet=OksQuery::unknown_type)
Definition query.hpp:126
static const char * ALL_SUBCLASSES
Definition query.hpp:72
static bool equal_cmp(const OksData *, const OksData *)
Definition query.cpp:56
static bool reg_exp_cmp(const OksData *, const OksData *regexp)
Definition query.cpp:62
static bool greater_cmp(const OksData *, const OksData *)
Definition query.cpp:61
static const char * OR
Definition query.hpp:67
static const char * RE
Definition query.hpp:76
static const char * OID
Definition query.hpp:73
static bool less_or_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:58
static bool not_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:57
static const char * GT
Definition query.hpp:80
static const char * NOT
Definition query.hpp:69
static const char * SOME
Definition query.hpp:70
static const char * GE
Definition query.hpp:78
static const char * AND
Definition query.hpp:68
static bool greater_or_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:59
static const char * EQ
Definition query.hpp:74
static bool less_cmp(const OksData *, const OksData *)
Definition query.cpp:60
static const char * LE
Definition query.hpp:77
static const char * NE
Definition query.hpp:75
bool(* Comparator)(const OksData *, const OksData *)
Definition query.hpp:93
static const char * LS
Definition query.hpp:79
default char v[0]

Member Data Documentation

◆ p_type

const OksQuery::QueryType dunedaq::oks::OksQueryExpression::p_type
private

Definition at line 131 of file query.hpp.


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