Fix #250 -- Don't consider partial index creation as making a column not nullable.

This commit is contained in:
David Wobrock authored and David Wobrock committed 2023-07-03 20:41:03 +02:00
1 parent b6acc1dd22
commit 97a1f5c6c9
3 files changed
+16 -1

No files matched your search

+10
View File
@@ -4,8 +4,18 @@
Instead, the linter crashes and lets the `sqlmigrate` error raise, in order to avoid letting a problematic migration pass.
One common reason for such an error is the SQL generation which requires the database to be actually migrated in order to fetch actual constraint names from it.
The crash is a sign to double-check the migration. But if you are certain the migration is safe, you can ignore it (issue #209)
Features:
- Fixed `RunPython` model import check when using a `through` object like `MyModel.many_to_many.through.objects.filter(...)` (issue #218)
- Mark the `IgnoreMigration` operation as `elidable=True`
Bug:
- Don't detect not nullable field on partial index creation (issue #250)
Miscellaneous:
- Add support for Python 3.11
- Add support for Django 4.1
- Add support for Django 4.2
+2 -1
View File
@@ -40,7 +40,8 @@ def has_not_null_column(sql_statements: list[str], **kwargs) -> bool:
ends_with_default = False
return (
any(
re.search("(?<!DROP )NOT NULL", sql) and not sql.startswith("CREATE TABLE")
re.search("(?<!DROP )NOT NULL", sql)
and not (sql.startswith("CREATE TABLE") or sql.startswith("CREATE INDEX"))
for sql in sql_statements
)
and ends_with_default is False
+4
View File
@@ -297,6 +297,10 @@ class PostgresqlAnalyserTestCase(SqlAnalyserTestCase):
sql = "CREATE UNIQUE INDEX CONCURRENTLY title_idx ON films (title);"
self.assertValidSql(sql)
def test_create_index_concurrently_where(self):
sql = 'CREATE INDEX CONCURRENTLY "index_name" ON "table_name" ("a_column") WHERE ("some_column" IS NOT NULL);'
self.assertValidSql(sql)
def test_drop_index_non_concurrently(self):
sql = "DROP INDEX ON films"
self.assertWarningSql(sql)