Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Library is not compatible with doctrine/dbal ^4 #2809

Closed
ramsey opened this issue Jun 1, 2024 · 4 comments
Closed

Library is not compatible with doctrine/dbal ^4 #2809

ramsey opened this issue Jun 1, 2024 · 4 comments

Comments

@ramsey
Copy link

ramsey commented Jun 1, 2024

Environment

Package

show

$ composer show --latest gedmo/doctrine-extensions
name     : gedmo/doctrine-extensions
descrip. : Doctrine behavioral extensions
keywords : Blameable, behaviors, doctrine, extensions, gedmo, loggable, nestedset, odm, orm, sluggable, sortable, timestampable, translatable, tree, uploadable
versions : * v3.14.0
released : 2023-12-03, 5 months ago
latest   : v3.15.0 released 2024-02-12, 3 months ago
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : http://gediminasm.org/
source   : [git] https://github.com/doctrine-extensions/DoctrineExtensions.git 3b5b5cba476b4ae32a55ef69ef2e59d64d5893cf
dist     : [zip] https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/3b5b5cba476b4ae32a55ef69ef2e59d64d5893cf 3b5b5cba476b4ae32a55ef69ef2e59d64d5893cf
path     : /Users/ramsey/Developer/Repos/ramsey/my-website/vendor/gedmo/doctrine-extensions
names    : gedmo/doctrine-extensions

support
email : gediminas.morkevicius@gmail.com
issues : https://github.com/doctrine-extensions/DoctrineExtensions/issues
source : https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.14.0
wiki : https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc

autoload
psr-4
Gedmo\ => src/

requires
behat/transliterator ^1.2
doctrine/annotations ^1.13 || ^2.0
doctrine/collections ^1.2 || ^2.0
doctrine/common ^2.13 || ^3.0
doctrine/event-manager ^1.2 || ^2.0
doctrine/persistence ^2.2 || ^3.0
php ^7.4 || ^8.0
psr/cache ^1 || ^2 || ^3
symfony/cache ^5.4 || ^6.0 || ^7.0
symfony/deprecation-contracts ^2.1 || ^3.0

requires (dev)
doctrine/cache ^1.11 || ^2.0
doctrine/dbal ^3.2
doctrine/doctrine-bundle ^2.3
doctrine/mongodb-odm ^2.3
doctrine/orm ^2.14.0
friendsofphp/php-cs-fixer ^3.14.0
nesbot/carbon ^2.71 || 3.x-dev as 3.0
phpstan/phpstan ^1.10.2
phpstan/phpstan-doctrine ^1.0
phpstan/phpstan-phpunit ^1.0
phpunit/phpunit ^9.6
rector/rector ^0.18
symfony/console ^5.4 || ^6.0 || ^7.0
symfony/phpunit-bridge ^6.0 || ^7.0
symfony/yaml ^5.4 || ^6.0 || ^7.0

suggests
doctrine/mongodb-odm to use the extensions with the MongoDB ODM
doctrine/orm to use the extensions with the ORM

conflicts
doctrine/dbal <3.2
doctrine/mongodb-odm <2.3
doctrine/orm <2.14.0 || 2.16.0 || 2.16.1
sebastian/comparator <2.0

Doctrine packages

show

$ composer show --latest 'doctrine/*'
Color legend:
- patch or minor release available - update recommended
- major release available - update possible
- up to date version

Direct dependencies required in composer.json:
doctrine/dbal                       4.0.2  4.0.2  Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.
doctrine/doctrine-bundle            2.12.0 2.12.0 Symfony DoctrineBundle
doctrine/doctrine-migrations-bundle 3.3.1  3.3.1  Symfony DoctrineMigrationsBundle
doctrine/orm                        3.2.0  3.2.0  Object-Relational-Mapper for PHP

Transitive dependencies not required in composer.json:
doctrine/annotations                2.0.1  2.0.1  Docblock Annotations Parser
doctrine/cache                      2.2.0  2.2.0  PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.
doctrine/collections                2.2.2  2.2.2  PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.
doctrine/common                     3.4.4  3.4.4  PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.
doctrine/deprecations               1.1.3  1.1.3  A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.
doctrine/event-manager              2.0.1  2.0.1  The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.
doctrine/inflector                  2.0.10 2.0.10 PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.
doctrine/instantiator               2.0.0  2.0.0  A small, lightweight utility to instantiate objects in PHP without invoking their constructors
doctrine/lexer                      3.0.1  3.0.1  PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.
doctrine/migrations                 3.7.4  3.7.4  PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very ea...
doctrine/persistence                3.3.2  3.3.2  The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.
doctrine/sql-formatter              1.4.0  1.4.0  a PHP SQL highlighting library

PHP version

$ php -v
PHP 8.3.4 (cli) (built: Mar 16 2024 22:18:14) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.4, Copyright (c), by Zend Technologies
    with Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethans

Subject

While attempting to use gedmo/doctrine-extensions in a project, specifically for Timestampable, I encountered an error that revealed gedmo/doctrine-extensions depends on doctrine/dbal but does not declare it in require in composer.json (it is only declared in require-dev for version ^3.2).

My project uses doctrine/dbal ^4, which defines Doctrine\DBAL\Driver::getDatabasePlatform() as requiring one argument: Doctrine\DBAL\ServerVersionProvider $versionProvider (see the source code for v4.0.2 here).

gedmo/doctrine-extensions calls this method in the following classes but does not provide an argument:

Minimal repository with the bug

n/a

Steps to reproduce

If necessary, I can create a separate repository to reproduce this bug and show it working. However, I'm not sure that's needed, since I'm able to point out what's causing the bug.

The bug is caused by use of doctrine/dbal version 4 with gedmo/doctrine-extensions version 3 and is the result of a changed interface between versions 3 and 4 of doctrine/dbal.

Expected results

gedmo/doctrine-extensions should disallow installation with doctrine/dbal version 4.

In other words, gedmo/doctrine-extensions should move "doctrine/dbal": "^3.2" from require-dev to require in its composer.json.

Alternately, gedmo/doctrine-extensions should update its code to work with both versions of doctrine/dbal, but in either case, doctrine/dbal should be promoted to the require list for the package (instead of remaining in require-dev).

Actual results

When responding to a Doctrine event:

Too few arguments to function Doctrine\DBAL\Driver\Middleware\AbstractDriverMiddleware::getDatabasePlatform(), 0 pa  
  ssed in /path/to/my-website/vendor/gedmo/doctrine-extensions/src/Timestampable/Mapping/  
  Event/Adapter/ORM.php on line 33 and exactly 1 expected     
@greg0ire
Copy link

greg0ire commented Jun 1, 2024

it is only declared in require-dev for version ^3.2

It is also defined in conflict:

"doctrine/dbal": "<3.2 || >=4.0",
, which is a common pattern to define constraints for optional dependencies.

However, in your first copy / paste, we can see 🤔

conflicts
doctrine/dbal <3.2
doctrine/mongodb-odm <2.3
doctrine/orm <2.14.0 || 2.16.0 || 2.16.1
sebastian/comparator <2.0

The bug can be reproduced with composer require doctrine/dbal gedmo/doctrine-extensions, but I can't help but notice how both you and me ended up with 3.14. I think the bug is already fixed and that you won't be able to install 3.15 and dbal 4.

@greg0ire
Copy link

greg0ire commented Jun 1, 2024

Fixed by #2759

@ramsey
Copy link
Author

ramsey commented Jun 1, 2024

Oh, I see. v3.14 doesn't have that conflict definition:

"doctrine/dbal": "<3.2",

So, since v3.15 defines >=4.0 as being in conflict, Composer chooses to use v3.14 because it has no conflict.

I don't think there's a way to fix this without deleting the v3.14.0 tag and creating it again with the conflict corrected in composer.json, which I wouldn't recommend.

Closing, since I don't think there's anything you can do. In the meantime, I've removed gedmo/doctrine-extensions. I'll reinstall it when there's a version that will work with doctrine/dbal version 4. 😃

@ramsey ramsey closed this as completed Jun 1, 2024
@mbabker
Copy link
Contributor

mbabker commented Jun 1, 2024

I'll reinstall it when there's a version that will work with doctrine/dbal version 4. 😃

Yeah, unfortunately, there is a lot of legacy stuff that either wasn't cleaned up fast enough (not having high version conflicts on the ORM and DBAL long before the new major versions were released) or has user data-related changes (#2502) which is going to make that a longer process to see through 😅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants