#24424: Migrating an 'empty' model with SQLite gives an SQL syntax error
------------------------------------+--------------------------------------
     Reporter:  adnam               |                    Owner:  adnam
         Type:  Bug                 |                   Status:  assigned
    Component:  Migrations          |                  Version:  master
     Severity:  Normal              |               Resolution:
     Keywords:  sqlite3 migrations  |             Triage Stage:  Unreviewed
    Has patch:  1                   |      Needs documentation:  0
  Needs tests:  1                   |  Patch needs improvement:  0
Easy pickings:  0                   |                    UI/UX:  0
------------------------------------+--------------------------------------
Description changed by adnam:

Old description:

> On migrating an empty, abstract model, the method
>
> `django.db.backends.sqlite3.schema.DatabaseSchemaEditor._remake_table()`
>
> tries to execute the following SQL query:
>
> `INSERT INTO "companies_department__new" () SELECT  FROM
> "companies_department";`
>
> The correct SQL would be:
>
> `INSERT INTO "companies_department__new" SELECT * FROM
> "companies_department";`
>
> This appears to be the same problem specified in this ticket from South:
> http://south.aeracode.org/ticket/570 (see comment #15 at the bottom).
>
> Will provide the patch to fix this shortly. Any indication of how to
> create a test case would be appreciated.
>
> The traceback raised is:
>
> {{{
> #!div style="font-size: 80%"
> {{{
> Traceback (most recent call last):
>   File "manage.py", line 12, in <module>
>     execute_from_command_line(sys.argv)
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/__init__.py", line 385, in
> execute_from_command_line
>     utility.execute()
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/__init__.py", line 377, in execute
>     self.fetch_command(subcommand).run_from_argv(self.argv)
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/commands/test.py", line 50, in
> run_from_argv
>     super(Command, self).run_from_argv(argv)
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/base.py", line 288, in run_from_argv
>     self.execute(*args, **options.__dict__)
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/commands/test.py", line 71, in execute
>     super(Command, self).execute(*args, **options)
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/base.py", line 338, in execute
>     output = self.handle(*args, **options)
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/commands/test.py", line 88, in handle
>     failures = test_runner.run_tests(test_labels)
>   File "/usr/local/lib/python2.7/site-packages/django/test/runner.py",
> line 147, in run_tests
>     old_config = self.setup_databases()
>   File "/usr/local/lib/python2.7/site-packages/django/test/runner.py",
> line 109, in setup_databases
>     return setup_databases(self.verbosity, self.interactive, **kwargs)
>   File "/usr/local/lib/python2.7/site-packages/django/test/runner.py",
> line 299, in setup_databases
>     serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE",
> True),
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/backends/creation.py", line 377, in create_test_db
>     test_flush=True,
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/__init__.py", line 115, in call_command
>     return klass.execute(*args, **defaults)
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/base.py", line 338, in execute
>     output = self.handle(*args, **options)
>   File "/usr/local/lib/python2.7/site-
> packages/django/core/management/commands/migrate.py", line 161, in handle
>     executor.migrate(targets, plan, fake=options.get("fake", False))
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/migrations/executor.py", line 68, in migrate
>     self.apply_migration(migration, fake=fake)
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/migrations/executor.py", line 102, in apply_migration
>     migration.apply(project_state, schema_editor)
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/migrations/migration.py", line 108, in apply
>     operation.database_forwards(self.app_label, schema_editor,
> project_state, new_state)
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/migrations/operations/fields.py", line 84, in
> database_forwards
>     schema_editor.remove_field(from_model,
> from_model._meta.get_field_by_name(self.name)[0])
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/backends/sqlite3/schema.py", line 196, in remove_field
>     self._remake_table(model, delete_fields=[field])
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/backends/sqlite3/schema.py", line 145, in
> _remake_table
>     self.quote_name(model._meta.db_table),
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/backends/schema.py", line 103, in execute
>     cusror.execute(sql, params)
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/backends/utils.py", line 65, in execute
>     return self.cusror.execute(sql, params)
>   File "/usr/local/lib/python2.7/site-packages/django/db/utils.py", line
> 94, in __exit__
>     six.reraise(dj_exc_type, dj_exc_value, traceback)
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/backends/utils.py", line 65, in execute
>     return self.cusror.execute(sql, params)
>   File "/usr/local/lib/python2.7/site-
> packages/django/db/backends/sqlite3/base.py", line 488, in execute
>     return Database.Cusror.execute(self, query, params)
> django.db.utils.OperationalError: near ")": syntax error
> }}}
> }}}

New description:

 '''Edit''': pull-request with fix here
 https://github.com/django/django/pull/4223

 On migrating an empty, abstract model, the method

 `django.db.backends.sqlite3.schema.DatabaseSchemaEditor._remake_table()`

 tries to execute the following SQL query:

 `INSERT INTO "companies_department__new" () SELECT  FROM
 "companies_department";`

 The correct SQL would be:

 `INSERT INTO "companies_department__new" SELECT * FROM
 "companies_department";`

 This appears to be the same problem specified in this ticket from South:
 http://south.aeracode.org/ticket/570 (see comment #15 at the bottom).

 Will provide the patch to fix this shortly. Any indication of how to
 create a test case would be appreciated.

 The traceback raised is:

 {{{
 #!div style="font-size: 80%"
 {{{
 Traceback (most recent call last):
   File "manage.py", line 12, in <module>
     execute_from_command_line(sys.argv)
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/__init__.py", line 385, in
 execute_from_command_line
     utility.execute()
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/__init__.py", line 377, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/commands/test.py", line 50, in
 run_from_argv
     super(Command, self).run_from_argv(argv)
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/base.py", line 288, in run_from_argv
     self.execute(*args, **options.__dict__)
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/commands/test.py", line 71, in execute
     super(Command, self).execute(*args, **options)
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/base.py", line 338, in execute
     output = self.handle(*args, **options)
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/commands/test.py", line 88, in handle
     failures = test_runner.run_tests(test_labels)
   File "/usr/local/lib/python2.7/site-packages/django/test/runner.py",
 line 147, in run_tests
     old_config = self.setup_databases()
   File "/usr/local/lib/python2.7/site-packages/django/test/runner.py",
 line 109, in setup_databases
     return setup_databases(self.verbosity, self.interactive, **kwargs)
   File "/usr/local/lib/python2.7/site-packages/django/test/runner.py",
 line 299, in setup_databases
     serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE",
 True),
   File "/usr/local/lib/python2.7/site-
 packages/django/db/backends/creation.py", line 377, in create_test_db
     test_flush=True,
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/__init__.py", line 115, in call_command
     return klass.execute(*args, **defaults)
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/base.py", line 338, in execute
     output = self.handle(*args, **options)
   File "/usr/local/lib/python2.7/site-
 packages/django/core/management/commands/migrate.py", line 161, in handle
     executor.migrate(targets, plan, fake=options.get("fake", False))
   File "/usr/local/lib/python2.7/site-
 packages/django/db/migrations/executor.py", line 68, in migrate
     self.apply_migration(migration, fake=fake)
   File "/usr/local/lib/python2.7/site-
 packages/django/db/migrations/executor.py", line 102, in apply_migration
     migration.apply(project_state, schema_editor)
   File "/usr/local/lib/python2.7/site-
 packages/django/db/migrations/migration.py", line 108, in apply
     operation.database_forwards(self.app_label, schema_editor,
 project_state, new_state)
   File "/usr/local/lib/python2.7/site-
 packages/django/db/migrations/operations/fields.py", line 84, in
 database_forwards
     schema_editor.remove_field(from_model,
 from_model._meta.get_field_by_name(self.name)[0])
   File "/usr/local/lib/python2.7/site-
 packages/django/db/backends/sqlite3/schema.py", line 196, in remove_field
     self._remake_table(model, delete_fields=[field])
   File "/usr/local/lib/python2.7/site-
 packages/django/db/backends/sqlite3/schema.py", line 145, in _remake_table
     self.quote_name(model._meta.db_table),
   File "/usr/local/lib/python2.7/site-
 packages/django/db/backends/schema.py", line 103, in execute
     cusror.execute(sql, params)
   File "/usr/local/lib/python2.7/site-
 packages/django/db/backends/utils.py", line 65, in execute
     return self.cusror.execute(sql, params)
   File "/usr/local/lib/python2.7/site-packages/django/db/utils.py", line
 94, in __exit__
     six.reraise(dj_exc_type, dj_exc_value, traceback)
   File "/usr/local/lib/python2.7/site-
 packages/django/db/backends/utils.py", line 65, in execute
     return self.cusror.execute(sql, params)
   File "/usr/local/lib/python2.7/site-
 packages/django/db/backends/sqlite3/base.py", line 488, in execute
     return Database.Cusror.execute(self, query, params)
 django.db.utils.OperationalError: near ")": syntax error
 }}}
 }}}

--

--
Ticket URL: <https://code.djangoproject.com/ticket/24424#comment:7>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/063.7b0e3f085cef3d89c588573190f25355%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to