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