public function testCollectionRangingCreatesLimitClause() { MySql::executeStatement("TRUNCATE TABLE tblCompany"); for ($x = 1; $x <= 20; $x++) { $company = new Company(); $company->CompanyName = $x; $company->save(); } $collection = new Collection("Rhubarb\\Stem\\Tests\\Fixtures\\Company"); $collection->setRange(10, 4); $size = sizeof($collection); $this->assertEquals(20, $size); $statement = MySql::getPreviousStatement(true); $this->assertContains("SQL_CALC_FOUND_ROWS", $statement); $this->assertContains("LIMIT 10, 4", $statement); }
public function testLimits() { MySql::executeStatement("TRUNCATE TABLE tblCompany"); $company = new Company(); $repos = $company->getRepository(); $repos->clearObjectCache(); $company = new Company(); $company->CompanyName = "A"; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->save(); $company = new Company(); $company->CompanyName = "C"; $company->save(); $company = new Company(); $company->CompanyName = "D"; $company->save(); $list = new Collection("\\Rhubarb\\Stem\\Tests\\Fixtures\\Company"); $list->setRange(2, 6); $this->assertCount(6, $list); $this->assertEquals("C", $list[2]->CompanyName); $sql = MySql::getPreviousStatement(true); $this->assertContains("LIMIT 2, 6", $sql); // Sorting by a computed column should mean that limits are no longer used. $list->addSort("CompanyIDSquared", true); $this->assertCount(6, $list); $this->assertEquals("C", $list[2]->CompanyName); $sql = MySql::getPreviousStatement(); $this->assertNotContains("LIMIT 2, 6", $sql); $sql = MySql::getPreviousStatement(true); $this->assertNotContains("LIMIT 2, 6", $sql); }