549{
550 const char * fname = "OksQueryExpression::CheckSyntax()";
551
554 if(!((OksComparator *)this)->attribute && !((OksComparator *)this)->value) {
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) {
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) {
570 << "OksRelationshipExpression: Can't execute query for nil relationship\n";
571 return false;
572 }
573 else if(!((OksRelationshipExpression *)this)->p_expression) {
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) {
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) {
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) {
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:
627 <<
"Unexpected query type " << (
int)
p_type << std::endl;
628
629 return false;
630 }
631}
static std::ostream & error_msg(const char *)