-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
Fixed query cache id generation: added platform to hash #1075
Conversation
Hello, thank you for creating this pull request. I have automatically opened an issue http://www.doctrine-project.org/jira/browse/DDC-3198 We use Jira to track the state of pull requests and the versions they got |
@vilartoni are you using the same cache across different connections on purpose? |
@Ocramius Yes. We're using a common cache server for all cached queries. |
Can you check if the travis failure here is related to your change? |
Sure. I'd say it is not. It's something to do with the MOD() dql function failing in postgresql. |
restarted that worker |
All green. |
return md5( | ||
$this->getDql() . serialize($this->_hints) . | ||
$this->getDql() . serialize($this->_hints) . $platform . |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you add it as a new line and use &platform=
? Looking good otherwise.
Fixed query cache id generation: added platform to hash
There's an issue with the query cache id generation in
Doctrine\ORM\Query::_getQueryCacheId()
.If you happen to use different connections to different platforms on the same project and you're using the query cache, you will get an exception the moment you try to execute a query which SQL is different depending on the platform and it has been previously cached for the other platform, as they will share the same cache id.
In order to reproduce the bug it is sufficient with using the Doctrine Paginator in a query:
If we run the query for the first time with an empty cache in an Oracle connection and later on we try to run the same query in a MySQL connection, we get the following exception:
As it's trying to execute the SQL for Oracle in the MySQL connection due to the same cache id.
This issue can be easily fixed just by taking the platform type into account in the cache id generation.