$caught = true;
}
$t->ok($caught, 'throw an error for an unrecognised operator');
$clause1 = "user.enabled = ''";
$clause2 = "user.cat = 'admin'";
$clause3 = "user.cat = 'super'";
$clause4 = "org.enabled = 1";
$sql = "{$clause1} AND ({$clause2} OR {$clause3}) AND ({$clause4})";
$result = $ca->analyse($sql);
$g1 = new ClauseGroup();
$g1->addSubclause($clause1);
$g2 = new ClauseGroup();
$g2->addSubclause($clause2);
$g2->addSubclause($clause3);
$g2->setType(ClauseGroup::BOOLEAN_OR);
$g1->addClauseGroup($g2);
$g1->addSubclause($clause4);
$g1->setType(ClauseGroup::BOOLEAN_AND);
$t->ok($result->equal($g1), 'decode a valid bracketed string containing ANDs and ORs');
$clause1 = "person.age IN (17,18,19,20)";
$clause2 = "person.height IN (100, 101)";
$result = $ca->analyse($clause1);
$rClause1 = $result->getFirstSubclause();
$g = new ClauseGroup();
$g->addSubclause($rClause1);
$t->ok($result->equal($g), 'decode a simple IN statement');
try {
    $clause = $clause1 . ' OR ' . $clause2;
    $result = $ca->analyse($clause);
    $clauses = $result->getSubclauses();
    $g->addSubclause($clauses[1]);