public function testCondition()
 {
     $params = array();
     $f = new Field('test');
     $arr = array(1, 2, 3, 4, 5);
     $c = new Condition('in', $f, $arr);
     $this->assertEquals('`t0`.`test` IN (1, 2, 3, 4, 5)', $c->getSql($params));
     $this->assertEquals('in', $c->getComparison());
     $this->assertEquals(var_export($f, true), var_export($c->getLeft(), true));
     $this->assertEquals(var_export($arr, true), var_export($c->getRight(), true));
     try {
         $c = new Condition('in', new Field('test'), 'error');
         $this->fail('second parameter shoud be array-only, but string passed');
     } catch (InvalidArgumentException $e) {
     }
     try {
         $c = new Condition('in', new Field('test'), array('a'));
         $this->fail('second parameter shoud be array of integets, but array of strings passed');
     } catch (InvalidArgumentException $e) {
     }
 }
 private function compileCondition(Condition $criteria = null)
 {
     if (null === $criteria) {
         return null;
     }
     $operator = $criteria->getOperator();
     if ('regex' === $operator) {
         $operator = 'regexp';
     }
     $segments = [$this->processValue($criteria->getLeft(), $criteria->shouldEscapeLeft()), $operator, $this->processValue($criteria->getRight(), $criteria->shouldEscapeRight())];
     return implode(' ', $segments);
 }