Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

#27180 closed Bug (fixed)

Check for sql_mode fails during migration with special database connections

Reported by: Markus Gerards Owned by: nobody
Component: Database layer (models, ORM) Version: 1.10
Severity: Release blocker Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

I believe I found again a bug regarding some special database connections (like #26991):

Running migrate raises this error:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 359, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 294, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 342, in execute
    self.check()
  File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 374, in check
    include_deployment_checks=include_deployment_checks,
  File "/usr/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 61, in _run_checks
    issues = run_checks(tags=[Tags.database])
  File "/usr/local/lib/python2.7/site-packages/django/core/checks/registry.py", line 81, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/usr/local/lib/python2.7/site-packages/django/core/checks/database.py", line 10, in check_database_backends
    issues.extend(conn.validation.check(**kwargs))
  File "/usr/local/lib/python2.7/site-packages/django/db/backends/mysql/validation.py", line 9, in check
    issues.extend(self._check_sql_mode(**kwargs))
  File "/usr/local/lib/python2.7/site-packages/django/db/backends/mysql/validation.py", line 16, in _check_sql_mode
    modes = set(sql_mode[0].split(','))
TypeError: 'NoneType' object has no attribute '__getitem__'

The reason is, that SELECT @@sql_mode returns no results in my special case.

Just a little side note: migrate runs database checks against all database connections, no matter if a database is selected via the --database parameter or if migrations are not allowed because of a database router. I'm not quite sure if this works as intended.

Attachments (1)

27180.diff (1.1 KB ) - added by Markus Gerards 7 years ago.

Download all attachments as: .zip

Change History (11)

comment:1 by Tim Graham, 7 years ago

Component: MigrationsDatabase layer (models, ORM)
Severity: NormalRelease blocker
Triage Stage: UnreviewedAccepted

comment:2 by Claude Paroz, 7 years ago

Could we know a bit more about that special database connection, please?

comment:3 by Tim Graham, 7 years ago

From #26991, "I'm connecting via MySQL to an sphinxsearch database. It basically uses the MySQL query language but has some special features."

comment:4 by Claude Paroz, 7 years ago

I'm wondering if we should continue this way with this special usage. Wouldn't the right solution to subclass the MySQL backend and adapt the checks?

comment:5 by Tim Graham, 7 years ago

I'm not sure how much ongoing work it would add to support this but if the backend has otherwise been usable since some old version of Django, then it seem reasonable to try to continue that as long as only minor changes are needed. We could also demote such issues from release blockers and require people using these special connections to submit patches themselves.

by Markus Gerards, 7 years ago

Attachment: 27180.diff added

in reply to:  4 comment:6 by Markus Gerards, 7 years ago

Replying to claudep:

I'm wondering if we should continue this way with this special usage. Wouldn't the right solution to subclass the MySQL backend and adapt the checks?

This is for sure no problem for us if we run into another problems in future. But in this specific case I believe there can be other cases where this error could occur. I've attached a little patch, that works for us.

comment:7 by Claude Paroz, 7 years ago

@gerricom: thanks for the patch, could you provide it as a pull request on Github?

comment:8 by Markus Gerards, 7 years ago

comment:9 by Tim Graham <timograham@…>, 7 years ago

Resolution: fixed
Status: newclosed

In 2b64ff68:

Fixed #27180 -- Fixed a crash in MySQL checks where SELECT @@sql_mode doesn't return a result.

comment:10 by Tim Graham <timograham@…>, 7 years ago

In baa1790b:

[1.10.x] Fixed #27180 -- Fixed a crash in MySQL checks where SELECT @@sql_mode doesn't return a result.

Backport of 2b64ff68cc375b5688174b4087bf44be9edd2558 from master

Note: See TracTickets for help on using tickets.
Back to Top