$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]);