From 4128c4b0186a7f0e1051733a02fbf443d0d86927 Mon Sep 17 00:00:00 2001 From: David Wobrock Date: Mon, 29 Jul 2019 21:14:05 +0200 Subject: [PATCH] Add logic to detect DROP TABLE --- django_migration_linter/sql_analyser/base.py | 6 ++++++ django_migration_linter/sql_analyser/sqlite.py | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/django_migration_linter/sql_analyser/base.py b/django_migration_linter/sql_analyser/base.py index ade1ef8..20fa325 100644 --- a/django_migration_linter/sql_analyser/base.py +++ b/django_migration_linter/sql_analyser/base.py @@ -49,6 +49,12 @@ class BaseAnalyser(object): "err_msg": "DROPPING columns", "mode": "one_liner", }, + { + "code": "DROP_TABLE", + "fn": lambda sql, **kw: sql.startswith("DROP TABLE"), + "err_msg": "DROPPING table", + "mode": "one_liner", + }, { "code": "RENAME_COLUMN", "fn": lambda sql, **kw: re.search("ALTER TABLE .* CHANGE", sql) diff --git a/django_migration_linter/sql_analyser/sqlite.py b/django_migration_linter/sql_analyser/sqlite.py index 49b09e2..e4d8a91 100644 --- a/django_migration_linter/sql_analyser/sqlite.py +++ b/django_migration_linter/sql_analyser/sqlite.py @@ -25,6 +25,16 @@ class SqliteAnalyser(BaseAnalyser): and "__old" not in sql and "new__" not in sql, }, + { + "code": "DROP_TABLE", + # TODO: improve to detect that the table names overlap + "fn": lambda sql_statements, **kw: any( + sql.startswith("DROP TABLE") for sql in sql_statements + ) + and not any(sql.startswith("CREATE TABLE") for sql in sql_statements), + "err_msg": "DROPPING table", + "mode": "transaction", + }, { "code": "NOT_NULL", "fn": lambda sql_statements, **kw: any(