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 111 of file query.hpp.

Constructor & Destructor Documentation

◆ ~OksQueryExpression()

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

Definition at line 116 of file query.hpp.

116{ ; }

◆ OksQueryExpression()

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

Definition at line 123 of file query.hpp.

124 : p_type(qet) {};
const OksQuery::QueryType p_type
Definition query.hpp:127

Member Function Documentation

◆ CheckSyntax()

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

Definition at line 542 of file query.cpp.

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

◆ operator==()

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

Definition at line 120 of file query.hpp.

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

◆ type()

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

Definition at line 118 of file query.hpp.

118{ return p_type; }

◆ operator<<

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

Definition at line 760 of file query.cpp.

762{
763 s << '(';
764
765 switch (qe.type()) {
767 OksComparator* cmpr = (OksComparator*)&qe;
768 const OksAttribute* a = cmpr->GetAttribute();
769 OksData* v = cmpr->GetValue();
770 OksQuery::Comparator f = cmpr->GetFunction();
771
772 if (a) {
773 s << '\"' << a->get_name() << "\" ";
774 } else if (v) {
775 s << OksQuery::OID << ' ';
776 } else {
777 s << "(null) ";
778 }
779
780 if (v) {
781 s << *v << ' ';
782 } else {
783 s << "(null) ";
784 }
785
786 if (f) {
787 if (f == OksQuery::equal_cmp)
788 s << OksQuery::EQ;
789 else if (f == OksQuery::not_equal_cmp)
790 s << OksQuery::NE;
791 else if (f == OksQuery::reg_exp_cmp)
792 s << OksQuery::RE;
793 else if (f == OksQuery::less_or_equal_cmp)
794 s << OksQuery::LE;
795 else if (f == OksQuery::greater_or_equal_cmp)
796 s << OksQuery::GE;
797 else if (f == OksQuery::less_cmp)
798 s << OksQuery::LS;
799 else if (f == OksQuery::greater_cmp)
800 s << OksQuery::GT;
801 } else
802 s << "(null)";
803
804 break;
805 }
806
808 OksRelationshipExpression* re = (OksRelationshipExpression*)&qe;
809 const OksRelationship* r = re->GetRelationship();
810 bool b = re->IsCheckAllObjects();
811 OksQueryExpression* rqe = re->get();
812
813 if (r)
814 s << '\"' << r->get_name() << "\" ";
815 else
816 s << "(null) ";
817
818 s << (b == true ? OksQuery::ALL_SUBCLASSES : OksQuery::SOME) << ' ';
819
820 if (rqe)
821 s << *rqe;
822 else
823 s << "(null)";
824
825 break;
826 }
827
829 s << OksQuery::NOT << ' ' << *(((OksNotExpression*)&qe)->get());
830
831 break;
832
833 case OksQuery::and_type: {
834 s << OksQuery::AND << ' ';
835
836 const std::list<OksQueryExpression*>& elist = ((OksAndExpression*)&qe)->expressions();
837
838 if (!elist.empty()) {
839 const OksQueryExpression* last = elist.back();
840
841 for (std::list<OksQueryExpression*>::const_iterator i = elist.begin(); i != elist.end(); ++i) {
842 s << *(*i);
843 if (*i != last)
844 s << ' ';
845 }
846 }
847
848 break;
849 }
850
851 case OksQuery::or_type: {
852 s << OksQuery::OR << ' ';
853
854 const std::list<OksQueryExpression*>& elist = ((OksOrExpression*)&qe)->expressions();
855
856 if (!elist.empty()) {
857 const OksQueryExpression* last = elist.back();
858
859 for (std::list<OksQueryExpression*>::const_iterator i = elist.begin(); i != elist.end(); ++i) {
860 s << *(*i);
861 if (*i != last)
862 s << ' ';
863 }
864 }
865
866 break;
867 }
868
870 s << "(unknown)";
871
872 break;
873 }
874 }
875
876 s << ')';
877
878 return s;
879}
OksQueryExpression(OksQuery::QueryType qet=OksQuery::unknown_type)
Definition query.hpp:123
static const char * ALL_SUBCLASSES
Definition query.hpp:74
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:86
bool(*) Comparator(const OksData *, const OksData *)
Definition query.hpp:95
static bool greater_cmp(const OksData *, const OksData *)
Definition query.cpp:81
static const char * OR
Definition query.hpp:69
static const char * RE
Definition query.hpp:78
static const char * OID
Definition query.hpp:75
static bool less_or_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:66
static bool not_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:61
static const char * GT
Definition query.hpp:82
static const char * NOT
Definition query.hpp:71
static const char * SOME
Definition query.hpp:72
static const char * GE
Definition query.hpp:80
static const char * AND
Definition query.hpp:70
static bool greater_or_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:71
static const char * EQ
Definition query.hpp:76
static bool less_cmp(const OksData *, const OksData *)
Definition query.cpp:76
static const char * LE
Definition query.hpp:79
static const char * NE
Definition query.hpp:77
static const char * LS
Definition query.hpp:81
default char v[0]

Member Data Documentation

◆ p_type

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

Definition at line 127 of file query.hpp.


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