Merge pull request #2702 from wallabag/add-index-uuid

Added index on entry.uuid
This commit is contained in:
Nicolas Lœuillet 2016-12-29 10:54:07 +01:00 committed by GitHub
commit 8527238846
6 changed files with 85 additions and 29 deletions

View File

@ -27,8 +27,7 @@ build: ## Run grunt
@grunt
test: ## Launch wallabag testsuite
@if [ ! -d "vendor/phpunit" ]; then composer install; fi
@ant prepare && vendor/phpunit/phpunit/phpunit -v
@ant prepare && bin/simple-phpunit -v
release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`).
ifndef VERSION

View File

@ -31,10 +31,11 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf($entryTable->hasColumn('uuid'), 'It seems that you already played this migration.');
$this->skipIf($entryTable->hasColumn('uid'), 'It seems that you already played this migration.');
$entryTable->addColumn('uuid', 'guid', [
$entryTable->addColumn('uid', 'string', [
'notnull' => false,
'length' => 23,
]);
$this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('share_public', '1', 'entry')");
}
@ -45,7 +46,7 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
public function down(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$entryTable->dropColumn('uuid');
$entryTable->dropColumn('uid');
$this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'share_public'");
}

View File

@ -0,0 +1,53 @@
<?php
namespace Application\Migrations;
use Doctrine\DBAL\Migrations\AbstractMigration;
use Doctrine\DBAL\Schema\Schema;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added index on wallabag_entry.uid
*/
class Version20161214094403 extends AbstractMigration implements ContainerAwareInterface
{
/**
* @var ContainerInterface
*/
private $container;
private $indexName = 'IDX_entry_uid';
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
public function up(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf($entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
$entryTable->addIndex(['uid'], $this->indexName);
}
/**
* @param Schema $schema
*/
public function down(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf(false === $entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
$entryTable->dropIndex($this->indexName);
}
}

View File

@ -539,8 +539,8 @@ class EntryController extends Controller
{
$this->checkUserAction($entry);
if (null === $entry->getUuid()) {
$entry->generateUuid();
if (null === $entry->getUid()) {
$entry->generateUid();
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
@ -548,7 +548,7 @@ class EntryController extends Controller
}
return $this->redirect($this->generateUrl('share_entry', [
'uuid' => $entry->getUuid(),
'uid' => $entry->getUid(),
]));
}
@ -565,7 +565,7 @@ class EntryController extends Controller
{
$this->checkUserAction($entry);
$entry->cleanUuid();
$entry->cleanUid();
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
@ -581,7 +581,7 @@ class EntryController extends Controller
*
* @param Entry $entry
*
* @Route("/share/{uuid}", requirements={"uuid" = ".+"}, name="share_entry")
* @Route("/share/{uid}", requirements={"uid" = ".+"}, name="share_entry")
* @Cache(maxage="25200", smaxage="25200", public=true)
*
* @return \Symfony\Component\HttpFoundation\Response

View File

@ -22,7 +22,10 @@ use Wallabag\AnnotationBundle\Entity\Annotation;
* @ORM\Table(
* name="`entry`",
* options={"collate"="utf8mb4_unicode_ci", "charset"="utf8mb4"},
* indexes={@ORM\Index(name="created_at", columns={"created_at"})}
* indexes={
* @ORM\Index(name="created_at", columns={"created_at"}),
* @ORM\Index(name="uid", columns={"uid"})
* }
* )
* @ORM\HasLifecycleCallbacks()
* @Hateoas\Relation("self", href = "expr('/api/entries/' ~ object.getId())")
@ -44,11 +47,11 @@ class Entry
/**
* @var string
*
* @ORM\Column(name="uuid", type="text", nullable=true)
* @ORM\Column(name="uid", type="string", length=23, nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $uuid;
private $uid;
/**
* @var string
@ -649,34 +652,34 @@ class Entry
/**
* @return string
*/
public function getUuid()
public function getUid()
{
return $this->uuid;
return $this->uid;
}
/**
* @param string $uuid
* @param string $uid
*
* @return Entry
*/
public function setUuid($uuid)
public function setUid($uid)
{
$this->uuid = $uuid;
$this->uid = $uid;
return $this;
}
public function generateUuid()
public function generateUid()
{
if (null === $this->uuid) {
if (null === $this->uid) {
// @see http://blog.kevingomez.fr/til/2015/07/26/why-is-uniqid-slow/ for true parameter
$this->uuid = uniqid('', true);
$this->uid = uniqid('', true);
}
}
public function cleanUuid()
public function cleanUid()
{
$this->uuid = null;
$this->uid = null;
}
/**

View File

@ -810,15 +810,15 @@ class EntryControllerTest extends WallabagCoreTestCase
->getRepository('WallabagCoreBundle:Entry')
->findOneByUser($this->getLoggedInUserId());
// no uuid
$client->request('GET', '/share/'.$content->getUuid());
// no uid
$client->request('GET', '/share/'.$content->getUid());
$this->assertEquals(404, $client->getResponse()->getStatusCode());
// generating the uuid
// generating the uid
$client->request('GET', '/share/'.$content->getId());
$this->assertEquals(302, $client->getResponse()->getStatusCode());
// follow link with uuid
// follow link with uid
$crawler = $client->followRedirect();
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$this->assertContains('max-age=25200', $client->getResponse()->headers->get('cache-control'));
@ -832,7 +832,7 @@ class EntryControllerTest extends WallabagCoreTestCase
// sharing is now disabled
$client->getContainer()->get('craue_config')->set('share_public', 0);
$client->request('GET', '/share/'.$content->getUuid());
$client->request('GET', '/share/'.$content->getUid());
$this->assertEquals(404, $client->getResponse()->getStatusCode());
$client->request('GET', '/view/'.$content->getId());
@ -843,7 +843,7 @@ class EntryControllerTest extends WallabagCoreTestCase
$this->assertEquals(302, $client->getResponse()->getStatusCode());
// share is now disable
$client->request('GET', '/share/'.$content->getUuid());
$client->request('GET', '/share/'.$content->getUid());
$this->assertEquals(404, $client->getResponse()->getStatusCode());
}