543{
544 const char* fname = "OksQueryExpression::CheckSyntax()";
545
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:
613
614 return false;
615 }
616}
static std::ostream & error_msg(const char *)