<?php
namespace eMapper\SQLite;
use eMapper\AbstractQueryTest;
use eMapper\Engine\SQLite\SQLiteDriver;
use eMapper\Reflection\Profiler;
use eMapper\Query\Builder\SelectQueryBuilder;
use eMapper\Query\Attr;
/**
* SQLite query test
* @author emaphp
* @group sqlite
* @group query
*/
class QueryTest extends AbstractQueryTest {
public function build() {
$this->driver = new SQLiteDriver(SQLiteTest::$filename);
$this->profile = Profiler::getClassProfile('Acme\Entity\Product');
}
//SELECT icontains
public function testSelectIContains() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->icontains('GFX'));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/^SELECT \* FROM @@products WHERE product_code LIKE #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('%GFX%', $args[$index]);
}
public function testSelectNotIContains() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->icontains('GFX', false));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/^SELECT \* FROM @@products WHERE product_code NOT LIKE #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('%GFX%', $args[$index]);
}
//SELECT istartswith
public function testSelectIStartsWith() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->istartswith('IND'));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code LIKE #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('IND%', $args[$index]);
}
public function testSelectNotIStartsWith() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->istartswith('IND', false));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code NOT LIKE #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('IND%', $args[$index]);
}
//SELECT iendswith
public function testSelectIEndsWith() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->iendswith('232'));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code LIKE #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('%232', $args[$index]);
}
public function testSelectNotIEndsWith() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->iendswith('232', false));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code NOT LIKE #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('%232', $args[$index]);
}
//SELECT regex
public function testRegex() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->matches('^(An?|The) +'));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code REGEXP #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('^(An?|The) +', $args[$index]);
}
public function testNotRegex() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->matches('^(An?|The) +', false));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code NOT REGEXP #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('^(An?|The) +', $args[$index]);
}
//SELECT iregex
public function testIRegex() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->imatches('^(an?|the) +'));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code REGEXP #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('(?i)^(an?|the) +', $args[$index]);
}
public function testNotIRegex() {
$query = new SelectQueryBuilder($this->profile);
$query->setCondition(Attr::code()->imatches('^(an?|the) +', false));
list($query, $args) = $query->build($this->driver, []);
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code NOT REGEXP #\{([\w]+)\}/", $query, $matches);
$index = $matches[1];
$this->assertArrayHasKey($index, $args);
$this->assertEquals('(?i)^(an?|the) +', $args[$index]);
}
}
?>
|