getsentry / sentry-symfony

The official Symfony SDK for Sentry (sentry.io)
https://sentry.io
MIT License
689 stars 171 forks source link

Fatal error with `doctrine/dbal` 4.x #806

Closed ddebin closed 6 months ago

ddebin commented 7 months ago

How do you use Sentry?

Sentry SaaS (sentry.io)

SDK version

3.6.0

Steps to reproduce

Install "sentry/sentry-symfony": "^4.0" along "doctrine/dbal": "^4.0"

Expected result

composer install works with no error

Actual result

composer install (more specifically composer hook script cache:clear) crash with

!!  
!!  Fatal error: Declaration of Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingStatementForV3::bindValue($param, $value, $type = Doctrine\DBAL\ParameterType::STRING): bool must be compatible with Doctrine\DBAL\Driver\Statement::bindValue(string|int $param, mixed $value, Doctrine\DBAL\ParameterType $type): void in /Users/ddebin/Dropbox (Personal)/Dev/VM/com.refurb-tracker.symfony4/vendor/sentry/sentry-symfony/src/Tracing/Doctrine/DBAL/TracingStatementForV3.php on line 20
!!  PHP Fatal error:  Declaration of Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingStatementForV3::bindValue($param, $value, $type = Doctrine\DBAL\ParameterType::STRING): bool must be compatible with Doctrine\DBAL\Driver\Statement::bindValue(string|int $param, mixed $value, Doctrine\DBAL\ParameterType $type): void in /Users/ddebin/Dropbox (Personal)/Dev/VM/com.refurb-tracker.symfony4/vendor/sentry/sentry-symfony/src/Tracing/Doctrine/DBAL/TracingStatementForV3.php on line 20
ddebin commented 7 months ago

See doctrine/orm 3.0.0 & doctrine/dbal 4.0.0

Jean85 commented 7 months ago

Are you using DBAL 3 or 4?

ddebin commented 7 months ago

Are you using DBAL 3 or 4?

DBAL 4.x, it's more of a problem with doctrine/dbal 4

Jean85 commented 7 months ago

Return type switched from bool to void, I don't think we can make the interface cross compatible...

bindValue($param, $value, $type = Doctrine\DBAL\ParameterType::STRING): bool
bindValue(string|int $param, mixed $value, Doctrine\DBAL\ParameterType $type): void

We need to create another one, and this is probably not even the only BC that we need to handle.

ddebin commented 7 months ago

Related to https://github.com/getsentry/sentry-symfony/issues/579

cleptric commented 7 months ago

We'll add support for DBAL v4; I can't give you a timeline at this point.

tacman commented 7 months ago

When creating a new symfony project with --webapp, composer.json adds "doctrine/orm:^3.0" to the requires section. I wish instead it were "^2.1||^3.0", and let composer figure out which version to use based on what the dependencies support.

That would help in this case, as well as for API Platform https://github.com/api-platform/core/issues/6150

ste93cry commented 7 months ago

Unfortunately, since Doctrine is an optional dependency of this package, we don't require it in composer.json besides for development purposes, hence we have no way to prevent the installation of an unsupported version. This is one of the reasons for which I strongly believe that:

alexislefebvre commented 7 months ago

@ste93cry What about declaring a conflict with the unsupported version, until it is supported?

Jean85 commented 7 months ago

@ste93cry What about declaring a conflict with the unsupported version, until it is supported?

That would prevent users to use the whole bundle if they use DBAL 4, which is an issue only if you enable tracing.

ddebin commented 7 months ago

Could anyone point out how to disable tracing ? 🙂

ste93cry commented 7 months ago

You can disable tracing as a whole using:

sentry:
  tracing:
    enabled: false

or you can disable tracing specifically for DBAL using:

sentry:
  tracing:
    dbal:
      enabled: false
msphn commented 7 months ago

Until resolved I solved that by going with orm 3.* but constraining dbal.

"doctrine/dbal": "3.*",
"doctrine/orm": "^3.0.0",
ddebin commented 6 months ago

@ste93cry What about declaring a conflict with the unsupported version, until it is supported?

That would prevent users to use the whole bundle if they use DBAL 4, which is an issue only if you enable tracing.

@Jean85 Can't use the whole bundle with DBAL 4, even with tracing disabled.

BenMorel commented 6 months ago

Can't use the whole bundle with DBAL 4, even with tracing disabled.

Indeed, even with the whole bundle disabled, the application still fails with:

Fatal error: Declaration of Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingStatementForV3::bindValue($param, $value, $type = Doctrine\DBAL\ParameterType::STRING): bool must be compatible with Doctrine\DBAL\Driver\Statement::bindValue(string|int $param, mixed $value, Doctrine\DBAL\ParameterType $type): void in /app/vendor/sentry/sentry-symfony/src/Tracing/Doctrine/DBAL/TracingStatementForV3.php on line 20

ste93cry commented 6 months ago

I believe that at this point, a conflict is the only viable solution until support for the newer version is worked on @Jean85

cleptric commented 6 months ago

It is being worked on.

cleptric commented 6 months ago

8h2jr6

Support for doctrine/dbal v4.0 was added in 4.14.0.