Commit 3a801894 authored by Baptiste Mispelon's avatar Baptiste Mispelon
Browse files

[1.7.x] Fixed #23303 -- Added BEGIN and COMMIT statements to the output of sqlmigrate.

Backport of 5853c87a from master.

Conflicts:
	django/core/management/commands/sqlmigrate.py
	tests/user_commands/tests.py
parent 126606c5
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -19,6 +19,14 @@ class Command(BaseCommand):
    )

    help = "Prints the SQL statements for the named migration."
    output_transaction = True

    def execute(self, *args, **options):
        # sqlmigrate doesn't support coloring its output but we need to force
        # no_color=True so that the BEGIN/COMMIT statements added by
        # output_transaction don't get colored either.
        options['no_color'] = True
        return super(Command, self).execute(*args, **options)

    def handle(self, *args, **options):

@@ -50,5 +58,4 @@ class Command(BaseCommand):
        # for it
        plan = [(executor.loader.graph.nodes[targets[0]], options.get("backwards", False))]
        sql_statements = executor.collect_sql(plan)
        for statement in sql_statements:
            self.stdout.write(statement)
        return '\n'.join(sql_statements)
+2 −0
Original line number Diff line number Diff line
@@ -480,6 +480,7 @@ readability):

.. code-block:: sql

    BEGIN;
    CREATE TABLE polls_question (
        "id" serial NOT NULL PRIMARY KEY,
        "question_text" varchar(200) NOT NULL,
@@ -500,6 +501,7 @@ readability):
        FOREIGN KEY ("question_id")
        REFERENCES "polls_question" ("id")
        DEFERRABLE INITIALLY DEFERRED;
    COMMIT;


Note the following:
+2 −0
Original line number Diff line number Diff line
@@ -285,6 +285,7 @@ This command should produce the following output:

.. code-block:: sql

    BEGIN;
    CREATE TABLE "world_worldborder" (
        "id" serial NOT NULL PRIMARY KEY,
        "name" varchar(50) NOT NULL,
@@ -302,6 +303,7 @@ This command should produce the following output:
    )
    ;
    CREATE INDEX "world_worldborder_mpoly_id" ON "world_worldborder" USING GIST ( "mpoly" );
    COMMIT;

.. note::

+2 −0
Original line number Diff line number Diff line
@@ -1127,6 +1127,8 @@ Prints the SQL for the named migration. This requires an active database
connection, which it will use to resolve constraint names; this means you must
generate the SQL against a copy of the database you wish to later apply it on.

Note that ``sqlmigrate`` doesn't colorize its output.

The :djadminopt:`--database` option can be used to specify the database for
which to generate the SQL.

+7 −0
Original line number Diff line number Diff line
@@ -93,6 +93,13 @@ class MigrateTests(MigrationTestBase):
        """
        Makes sure that sqlmigrate does something.
        """
        # Make sure the output is wrapped in a transaction
        stdout = six.StringIO()
        call_command("sqlmigrate", "migrations", "0001", stdout=stdout)
        output = stdout.getvalue().lower()
        self.assertIn("begin;", output)
        self.assertIn("commit;", output)

        # Test forwards. All the databases agree on CREATE TABLE, at least.
        stdout = six.StringIO()
        call_command("sqlmigrate", "migrations", "0001", stdout=stdout)
Loading