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); }