diff options
author | Jérémy Benoist <j0k3r@users.noreply.github.com> | 2017-12-13 13:50:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-13 13:50:15 +0100 |
commit | 70265817aee257e7e635eda79ce3e037e3b4a242 (patch) | |
tree | 597e166497ba87778f48053cb4c7747405e280b1 | |
parent | 08d6497c9cfeb107ff9781c46bac6368f3f92c9f (diff) | |
parent | 2e9747a59a6011622588829e4605af3710b61a21 (diff) | |
download | wallabag-70265817aee257e7e635eda79ce3e037e3b4a242.tar.gz wallabag-70265817aee257e7e635eda79ce3e037e3b4a242.tar.zst wallabag-70265817aee257e7e635eda79ce3e037e3b4a242.zip |
Merge pull request #3488 from wallabag/pg-10
Add custom driver & schema manager for PostgreSQL 10
-rw-r--r-- | app/config/config.yml | 1 | ||||
-rw-r--r-- | app/config/config_test.yml | 1 | ||||
-rw-r--r-- | app/config/parameters.yml.dist | 2 | ||||
-rw-r--r-- | app/config/tests/parameters_test.mysql.yml | 1 | ||||
-rw-r--r-- | app/config/tests/parameters_test.pgsql.yml | 1 | ||||
-rw-r--r-- | app/config/tests/parameters_test.sqlite.yml | 1 | ||||
-rw-r--r-- | src/Wallabag/CoreBundle/Doctrine/DBAL/Driver/CustomPostgreSQLDriver.php | 25 | ||||
-rw-r--r-- | src/Wallabag/CoreBundle/Doctrine/DBAL/Schema/CustomPostgreSqlSchemaManager.php | 38 |
8 files changed, 70 insertions, 0 deletions
diff --git a/app/config/config.yml b/app/config/config.yml index 08da4f8f..04d757c1 100644 --- a/app/config/config.yml +++ b/app/config/config.yml | |||
@@ -47,6 +47,7 @@ twig: | |||
47 | doctrine: | 47 | doctrine: |
48 | dbal: | 48 | dbal: |
49 | driver: "%database_driver%" | 49 | driver: "%database_driver%" |
50 | driver_class: "%database_driver_class%" | ||
50 | host: "%database_host%" | 51 | host: "%database_host%" |
51 | port: "%database_port%" | 52 | port: "%database_port%" |
52 | dbname: "%database_name%" | 53 | dbname: "%database_name%" |
diff --git a/app/config/config_test.yml b/app/config/config_test.yml index c620c359..fc067ff4 100644 --- a/app/config/config_test.yml +++ b/app/config/config_test.yml | |||
@@ -23,6 +23,7 @@ swiftmailer: | |||
23 | doctrine: | 23 | doctrine: |
24 | dbal: | 24 | dbal: |
25 | driver: "%test_database_driver%" | 25 | driver: "%test_database_driver%" |
26 | driver_class: "%test_database_driver_class%" | ||
26 | host: "%test_database_host%" | 27 | host: "%test_database_host%" |
27 | port: "%test_database_port%" | 28 | port: "%test_database_port%" |
28 | dbname: "%test_database_name%" | 29 | dbname: "%test_database_name%" |
diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist index b5b97950..6b0cb8e8 100644 --- a/app/config/parameters.yml.dist +++ b/app/config/parameters.yml.dist | |||
@@ -11,6 +11,8 @@ parameters: | |||
11 | # database_password: %env.database_password% | 11 | # database_password: %env.database_password% |
12 | 12 | ||
13 | database_driver: pdo_mysql | 13 | database_driver: pdo_mysql |
14 | database_driver_class: ~ | ||
15 | # database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver | ||
14 | database_host: 127.0.0.1 | 16 | database_host: 127.0.0.1 |
15 | database_port: ~ | 17 | database_port: ~ |
16 | database_name: wallabag | 18 | database_name: wallabag |
diff --git a/app/config/tests/parameters_test.mysql.yml b/app/config/tests/parameters_test.mysql.yml index 36b227fb..0b7b82eb 100644 --- a/app/config/tests/parameters_test.mysql.yml +++ b/app/config/tests/parameters_test.mysql.yml | |||
@@ -1,5 +1,6 @@ | |||
1 | parameters: | 1 | parameters: |
2 | test_database_driver: pdo_mysql | 2 | test_database_driver: pdo_mysql |
3 | test_database_driver_class: ~ | ||
3 | test_database_host: localhost | 4 | test_database_host: localhost |
4 | test_database_port: 3306 | 5 | test_database_port: 3306 |
5 | test_database_name: wallabag_test | 6 | test_database_name: wallabag_test |
diff --git a/app/config/tests/parameters_test.pgsql.yml b/app/config/tests/parameters_test.pgsql.yml index 60f51df6..ea249324 100644 --- a/app/config/tests/parameters_test.pgsql.yml +++ b/app/config/tests/parameters_test.pgsql.yml | |||
@@ -1,5 +1,6 @@ | |||
1 | parameters: | 1 | parameters: |
2 | test_database_driver: pdo_pgsql | 2 | test_database_driver: pdo_pgsql |
3 | test_database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver | ||
3 | test_database_host: localhost | 4 | test_database_host: localhost |
4 | test_database_port: | 5 | test_database_port: |
5 | test_database_name: wallabag_test | 6 | test_database_name: wallabag_test |
diff --git a/app/config/tests/parameters_test.sqlite.yml b/app/config/tests/parameters_test.sqlite.yml index 2b92d579..64cd984b 100644 --- a/app/config/tests/parameters_test.sqlite.yml +++ b/app/config/tests/parameters_test.sqlite.yml | |||
@@ -1,5 +1,6 @@ | |||
1 | parameters: | 1 | parameters: |
2 | test_database_driver: pdo_sqlite | 2 | test_database_driver: pdo_sqlite |
3 | test_database_driver_class: ~ | ||
3 | test_database_host: localhost | 4 | test_database_host: localhost |
4 | test_database_port: | 5 | test_database_port: |
5 | test_database_name: ~ | 6 | test_database_name: ~ |
diff --git a/src/Wallabag/CoreBundle/Doctrine/DBAL/Driver/CustomPostgreSQLDriver.php b/src/Wallabag/CoreBundle/Doctrine/DBAL/Driver/CustomPostgreSQLDriver.php new file mode 100644 index 00000000..eb5b203f --- /dev/null +++ b/src/Wallabag/CoreBundle/Doctrine/DBAL/Driver/CustomPostgreSQLDriver.php | |||
@@ -0,0 +1,25 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Doctrine\DBAL\Driver; | ||
4 | |||
5 | use Doctrine\DBAL\Connection; | ||
6 | use Doctrine\DBAL\Driver\PDOPgSql\Driver; | ||
7 | use Wallabag\CoreBundle\Doctrine\DBAL\Schema\CustomPostgreSqlSchemaManager; | ||
8 | |||
9 | /** | ||
10 | * This custom driver allow to use a different schema manager | ||
11 | * So we can fix the PostgreSQL 10 problem. | ||
12 | * | ||
13 | * @see https://github.com/wallabag/wallabag/issues/3479 | ||
14 | * @see https://github.com/doctrine/dbal/issues/2868 | ||
15 | */ | ||
16 | class CustomPostgreSQLDriver extends Driver | ||
17 | { | ||
18 | /** | ||
19 | * {@inheritdoc} | ||
20 | */ | ||
21 | public function getSchemaManager(Connection $conn) | ||
22 | { | ||
23 | return new CustomPostgreSqlSchemaManager($conn); | ||
24 | } | ||
25 | } | ||
diff --git a/src/Wallabag/CoreBundle/Doctrine/DBAL/Schema/CustomPostgreSqlSchemaManager.php b/src/Wallabag/CoreBundle/Doctrine/DBAL/Schema/CustomPostgreSqlSchemaManager.php new file mode 100644 index 00000000..439ae17d --- /dev/null +++ b/src/Wallabag/CoreBundle/Doctrine/DBAL/Schema/CustomPostgreSqlSchemaManager.php | |||
@@ -0,0 +1,38 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Doctrine\DBAL\Schema; | ||
4 | |||
5 | use Doctrine\DBAL\Schema\PostgreSqlSchemaManager; | ||
6 | use Doctrine\DBAL\Schema\Sequence; | ||
7 | |||
8 | /** | ||
9 | * This custom schema manager fix the PostgreSQL 10 problem. | ||
10 | * | ||
11 | * @see https://github.com/wallabag/wallabag/issues/3479 | ||
12 | * @see https://github.com/doctrine/dbal/issues/2868 | ||
13 | */ | ||
14 | class CustomPostgreSqlSchemaManager extends PostgreSqlSchemaManager | ||
15 | { | ||
16 | /** | ||
17 | * {@inheritdoc} | ||
18 | */ | ||
19 | protected function _getPortableSequenceDefinition($sequence) | ||
20 | { | ||
21 | $sequenceName = $sequence['relname']; | ||
22 | if ('public' !== $sequence['schemaname']) { | ||
23 | $sequenceName = $sequence['schemaname'] . '.' . $sequence['relname']; | ||
24 | } | ||
25 | |||
26 | $query = 'SELECT min_value, increment_by FROM ' . $this->_platform->quoteIdentifier($sequenceName); | ||
27 | |||
28 | // the `method_exists` is only to avoid test to fail: | ||
29 | // DAMA\DoctrineTestBundle\Doctrine\DBAL\StaticConnection doesn't support the `getServerVersion` | ||
30 | if (method_exists($this->_conn->getWrappedConnection(), 'getServerVersion') && (float) ($this->_conn->getWrappedConnection()->getServerVersion()) >= 10) { | ||
31 | $query = "SELECT min_value, increment_by FROM pg_sequences WHERE schemaname = 'public' AND sequencename = " . $this->_conn->quote($sequenceName); | ||
32 | } | ||
33 | |||
34 | $data = $this->_conn->fetchAll($query); | ||
35 | |||
36 | return new Sequence($sequenceName, $data[0]['increment_by'], $data[0]['min_value']); | ||
37 | } | ||
38 | } | ||