| 1142 | |
| 1143 | == Refactored the Creation and Introspection modules of the database backends == |
| 1144 | |
| 1145 | In [8296], the creation and introspection modules of the database backends received a major refactoring. This refactoring introduced a consistent class-based interface to the database backend, and isolated SQL and database-specific code behind the relevant database backends. The refactoring also removed several `DatabaseFeature` entries in favor of subclassing methods on the creation interface. |
| 1146 | |
| 1147 | Most users will not be affected by this change. However, any user that is manually calling features of the creation and/or introspection modules of the database will need to modify the way they access those modules: |
| 1148 | |
| 1149 | * The creation module, previously provided using `django.db.get_creation_module()`, is now available on the database connection as the attribute `connection.creation`. |
| 1150 | * The introspection module, previously provided using `django.db.get_introspection_module()` is now available on the database connection as the attribute `connection.introspection`. |
| 1151 | * The DB shell, previously accessed using `django.db.runshell()` is now available on the database connection as`connection.client.runshell()`. |
| 1152 | |
| 1153 | In addition, any user that is maintaining an external database backend will need to update their code to use the new interface. The new class-based approach should make backend development much easier, as common behavior can be inherited from the base classes in django.db.backends; only database-specific behavior should require implementation. |