Problem/Motivation

Databases on different versions have different capabilities. There is not a consistent pattern for how to do this in the Core database abstraction layer DBTNG. This is a hard problem that we have ignored for Drupal 8's life cycle, and most likely an improvement for Drupal 9's life cycle.

The PDO layer has some constants to pass in when opening a connection, but some things are not detectable unless the database version is known and a query made to the database.

Being able to detect capabilities will be important for:

  • Adding JSON support to change data serialization so that SQLite can fallback or PostgreSQL can use native JSONB methods in queries.
  • Adding newer SQL functionality such as UPSERT for those drivers that support it.
  • Improving transaction isolation level support
  • ...

There are a few different scenarios:

  1. Capabilities prior to opening a connection (SSL, database string, SQLite placeholder limitation)
  2. Capabilities detectable when a connection is open (implicit commit support, driver extensions)
  3. Capabilities that allow for custom SQL schema and storage (JSON)
  4. Capabilities that allow for custom SQL language features (PostgreSQL JSONB conditions, MySQL Group By)

doctrine/dbal implements this by separating the "driver" from the "platform".

Proposed resolution

TBD

Remaining tasks

  • Break down the issue into relevant resolutions to solve use cases.
  • Consensus on the best approach for Drupal core going forward.
  • Write a patch

API changes

Yes.

Data model changes

Hopefully not.

Release notes snippet

Comments

mradcliffe created an issue. See original summary.

mradcliffe’s picture

Issue summary: View changes

I couldn't find an existing issue when searching for "feature" or "capability" or "detect" other than my comments in other issues so I'm opening up this. Also based on my ideas issue.

This could be more of a meta/discussion issue.

mondrake’s picture

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.1.x-dev

Drupal 8.9.0-beta1 was released on March 20, 2020. 8.9.x is the final, long-term support (LTS) minor release of Drupal 8, which means new developments and disruptive changes should now be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 9.1.x-dev » 9.2.x-dev

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 11.x-dev » main

Drupal core is now using the main branch as the primary development branch. New developments and disruptive changes should now be targeted to the main branch.

Read more in the announcement.