diff options
author | Jeremy Benoist <jeremy.benoist@gmail.com> | 2017-12-12 12:14:40 +0100 |
---|---|---|
committer | Jeremy Benoist <jeremy.benoist@gmail.com> | 2017-12-12 12:14:40 +0100 |
commit | a1661af17c9054a6c399dd9d5220f8d6a5091fa2 (patch) | |
tree | 126a64f79b8b840b9b4c2b876f4da64eb5dc3f03 | |
parent | f209798368de66b4acd8b892fe71018ebb30c2da (diff) | |
download | wallabag-a1661af17c9054a6c399dd9d5220f8d6a5091fa2.tar.gz wallabag-a1661af17c9054a6c399dd9d5220f8d6a5091fa2.tar.zst wallabag-a1661af17c9054a6c399dd9d5220f8d6a5091fa2.zip |
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..b49166f2 --- /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 | if ('public' !== $sequence['schemaname']) { | ||
22 | $sequenceName = $sequence['schemaname'] . '.' . $sequence['relname']; | ||
23 | } else { | ||
24 | $sequenceName = $sequence['relname']; | ||
25 | } | ||
26 | |||
27 | $query = 'SELECT min_value, increment_by FROM ' . $this->_platform->quoteIdentifier($sequenceName); | ||
28 | |||
29 | // patch for PostgreSql >= 10 | ||
30 | if ((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 | } | ||