sortedQuery() public method

If you have applied a limit to the query but need to know the full size of the unfiltered set, you must set $check_full_set_size to true to gather this information at the expense of a second database query.
public sortedQuery ( SortedQuery $query, boolean $check_full_set_size = false, boolean $use_cache = true ) : QueryResult
$query Bravo3\Orm\Query\SortedQuery
$check_full_set_size boolean
$use_cache boolean
return Bravo3\Orm\Query\QueryResult
コード例 #1
0
ファイル: RefTest.php プロジェクト: bravo3/orm
 /**
  * @dataProvider entityManagerDataProvider
  * @param EntityManager $em
  */
 public function testRefs(EntityManager $em)
 {
     $members = $em->getDriver()->getMultiValueIndex($em->getKeyScheme()->getEntityRefKey('leaf', 'leaf1'));
     $this->assertCount(0, $members);
     $leaf = (new Leaf())->setId('leaf1');
     $owner = (new Owner())->setId('owner1')->setLeaf([$leaf]);
     $em->persist($leaf)->persist($owner)->flush();
     $members = $em->getDriver()->getMultiValueIndex($em->getKeyScheme()->getEntityRefKey('leaf', 'leaf1'));
     $this->assertCount(1, $members);
     $ref = new Ref(Owner::class, 'owner1', 'leaf');
     $this->assertEquals((string) $ref, $members[0]);
     $leaves = $em->sortedQuery(new SortedQuery($owner, 'leaf', 'id'));
     $this->assertCount(1, $leaves);
     $em->refresh($owner);
     $em->refresh($leaf);
     $leaf->setPublished(false);
     $em->persist($leaf)->flush();
     $leaves = $em->sortedQuery(new SortedQuery($owner, 'leaf', 'id'));
     $this->assertCount(0, $leaves);
     $leaf->setPublished(true);
     $em->persist($leaf)->flush();
     $leaves = $em->sortedQuery(new SortedQuery($owner, 'leaf', 'id'));
     $this->assertCount(1, $leaves);
     $em->delete($leaf)->flush();
     $leaves = $em->sortedQuery(new SortedQuery($owner, 'leaf', 'id'));
     $this->assertCount(0, $leaves);
 }
コード例 #2
0
ファイル: SortedTableTest.php プロジェクト: bravo3/orm
 /**
  * @dataProvider entityManagerDataProvider
  * @param EntityManager $em
  */
 public function testTableSorting(EntityManager $em)
 {
     $user1 = new SortedUser();
     $user1->setId(1)->setName('User 1')->setActive(true);
     $user2 = new SortedUser();
     $user2->setId(2)->setName('User 2')->setActive(false);
     $user3 = new SortedUser();
     $user3->setId(3)->setName('User 3')->setActive(true);
     $em->persist($user1)->persist($user2)->persist($user3)->flush();
     $query = $em->sortedQuery(new SortedTableQuery(SortedUser::class, 'name_all'));
     $this->assertEquals(3, $query->count());
     $this->assertEquals('User 1', $query[0]->getName());
     $this->assertEquals('User 2', $query[1]->getName());
     $this->assertEquals('User 3', $query[2]->getName());
     $query = $em->sortedQuery(new SortedTableQuery(SortedUser::class, 'name_active'));
     $this->assertEquals(2, $query->count());
     $this->assertEquals('User 1', $query[0]->getName());
     $this->assertEquals('User 3', $query[1]->getName());
 }
コード例 #3
0
 /**
  * @dataProvider entityManagerDataProvider
  * @param EntityManager $em
  * @expectedException \Bravo3\Orm\Exceptions\CorruptedEntityException
  */
 public function testSortedQueryThrowsNotFoundException(EntityManager $em)
 {
     $category = (new Category())->setId(5000);
     $article1 = (new Article())->setId(5001)->setTitle('A');
     $article2 = (new Article())->setId(5002)->setTitle('B');
     $article3 = (new Article())->setId(5003)->setTitle('C');
     $category->addArticle($article1);
     $category->addArticle($article2);
     $category->addArticle($article3);
     $em->persist($article1)->persist($article2)->persist($article3)->persist($category)->flush();
     // Forcefully break the relationship via the driver manually
     $em->getDriver()->delete($em->getKeyScheme()->getEntityKey('article', '5001'));
     $em->getDriver()->flush();
     $category = $em->retrieve(Category::class, 5000, false);
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date'));
     // Iterating through these results should trigger an exception
     foreach ($results as $result) {
     }
 }
コード例 #4
0
ファイル: OrmCachePool.php プロジェクト: bravo3/cache
 /**
  * Deletes all items in the pool.
  *
  * @return PoolInterface
  */
 public function clear()
 {
     $items = $this->em->sortedQuery(new SortedTableQuery($this->entity_class, 'key'), false, false);
     $index = 0;
     $items->rewind();
     while ($items->valid()) {
         try {
             $item = $items->current();
             $this->em->delete($item);
             if (++$index % 100 == 0) {
                 $this->em->flush();
             }
         } catch (NotFoundException $e) {
             // Assume item expired, skip
         }
         $items->next();
     }
     $this->em->flush();
     return $this;
 }
コード例 #5
0
ファイル: SortedQueryTest.php プロジェクト: bravo3/orm
 /**
  * @dataProvider entityManagerDataProvider
  * @param EntityManager $em
  */
 public function testSortOrder(EntityManager $em)
 {
     $category = new Category();
     $category->setId(600);
     $em->persist($category);
     for ($i = 0; $i < 15; $i++) {
         $article = new Article();
         $article->setId(601 + $i);
         $article->setTitle('Art ' . (601 + $i));
         $time = new \DateTime();
         $time->modify('+' . ($i + 1) . ' minutes');
         $article->setSortDate($time);
         $article->setCanonicalCategory($category);
         $em->persist($article);
     }
     $em->flush();
     /** @var Article $article */
     // Date sorting -
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date'));
     $this->assertCount(15, $results);
     $article = $results[0];
     $this->assertEquals('Art 601', $article->getTitle());
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::DESC()));
     $this->assertCount(15, $results);
     $this->assertEquals(15, $results->getFullSize());
     $article = $results[0];
     $this->assertEquals('Art 615', $article->getTitle());
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::DESC(), 5, -6), true);
     $this->assertCount(5, $results);
     $this->assertEquals(15, $results->getFullSize());
     $article = $results[0];
     $this->assertEquals('Art 610', $article->getTitle());
     $article = $results[4];
     $this->assertEquals('Art 606', $article->getTitle());
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::ASC(), 2, 5));
     $this->assertCount(4, $results);
     $this->assertNull($results->getFullSize());
     $article = $results[0];
     $this->assertEquals('Art 603', $article->getTitle());
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::ASC(), 20, 29));
     $this->assertCount(0, $results);
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'title'));
     $this->assertCount(15, $results);
     $article = $results[0];
     $this->assertEquals('Art 601', $article->getTitle());
     // Lexicographic sorting -
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'title'));
     $this->assertCount(15, $results);
     $article = $results[0];
     $this->assertEquals('Art 601', $article->getTitle());
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'title', Direction::DESC()));
     $this->assertCount(15, $results);
     $article = $results[0];
     $this->assertEquals('Art 615', $article->getTitle());
     // Modify an entity's sort-by column
     $article = $em->retrieve(Article::class, 609);
     $time = $article->getSortDate();
     $time->modify('+1 day');
     $article->setSortDate($time);
     $em->persist($article)->flush();
     $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::DESC()));
     $this->assertCount(15, $results);
     $article = $results[0];
     $this->assertEquals('Art 609', $article->getTitle());
 }
コード例 #6
0
ファイル: ConditionalTest.php プロジェクト: bravo3/orm
 /**
  * @dataProvider entityManagerDataProvider
  * @param EntityManager $em
  */
 public function testReverseConditionalRelationship(EntityManager $em)
 {
     $category = new Category();
     $category->setId(2000)->setName('Conditional Category');
     $em->persist($category)->flush();
     for ($i = 65; $i < 76; $i++) {
         $article = new Article();
         $article->setId($i)->setTitle('Conditional Article #' . $i);
         if ($i == 73) {
             $article->setPublished(false);
         } else {
             $article->setPublished(true);
         }
         $article->setCategory($category);
         $em->persist($article);
     }
     for ($i = 65; $i < 76; $i++) {
         $asset = new Asset();
         $asset->setId($i)->setTitle('Conditional Asset #' . $i);
         if ($i == 73) {
             $asset->setPublished(false);
         } else {
             $asset->setPublished(true);
         }
         $asset->setCategory($category);
         $em->persist($asset);
     }
     $em->flush();
     $articles = $em->sortedQuery(new SortedQuery($category, 'articles', 'last_modified'));
     $this->assertCount(10, $articles);
     $articles = $em->sortedQuery(new SortedQuery($category, 'articles', 'id'));
     $this->assertCount(11, $articles);
     $assets = $em->sortedQuery(new SortedQuery($category, 'assets', 'last_modified'));
     $this->assertCount(10, $assets);
     $assets = $em->sortedQuery(new SortedQuery($category, 'assets', 'id'));
     $this->assertCount(11, $assets);
 }