Add Postgresql warning when using DROP INDEX without CONCURRENTLY keyword
This commit is contained in:
1 parent
70db245df3
commit
2bf87c0659
2 files changed
+20
-3
No files matched your search
@@ -13,4 +13,11 @@ class PostgresqlAnalyser(BaseAnalyser):
|
||||
"mode": "one_liner",
|
||||
"type": "warning",
|
||||
},
|
||||
{
|
||||
"code": "DROP_INDEX",
|
||||
"fn": lambda sql, **kw: re.search("DROP INDEX", sql) and not re.search("INDEX CONCURRENTLY", sql),
|
||||
"msg": "DROP INDEX locks table",
|
||||
"mode": "one_liner",
|
||||
"type": "warning",
|
||||
},
|
||||
]
|
||||
@@ -13,9 +13,11 @@ class SqlAnalyserTestCase(unittest.TestCase):
|
||||
sql_statements=sql, database_vendor=self.database_vendor
|
||||
)
|
||||
|
||||
def assertValidSql(self, sql):
|
||||
errors, _, _ = self.analyse_sql(sql)
|
||||
def assertValidSql(self, sql, allow_warnings=False):
|
||||
errors, _, warnings = self.analyse_sql(sql)
|
||||
self.assertEqual(0, len(errors), "Found errors in sql: {}".format(errors))
|
||||
if not allow_warnings:
|
||||
self.assertEqual(0, len(warnings), "Found warnings in sql: {}".format(errors))
|
||||
|
||||
def assertBackwardIncompatibleSql(self, sql):
|
||||
errors, _, _ = self.analyse_sql(sql)
|
||||
@@ -187,7 +189,7 @@ class PostgresqlAnalyserTestCase(SqlAnalyserTestCase):
|
||||
'CREATE INDEX "app_add_manytomany_field_b_many_to_many_b_id_953b185b" ON "app_add_manytomany_field_b_many_to_many"("b_id");',
|
||||
'CREATE INDEX "app_add_manytomany_field_b_many_to_many_a_id_4b44832a" ON "app_add_manytomany_field_b_many_to_many"("a_id");',
|
||||
]
|
||||
self.assertValidSql(sql)
|
||||
self.assertValidSql(sql, allow_warnings=True)
|
||||
|
||||
def test_make_column_not_null_with_django_default(self):
|
||||
sql = [
|
||||
@@ -219,3 +221,11 @@ class PostgresqlAnalyserTestCase(SqlAnalyserTestCase):
|
||||
self.assertValidSql(sql)
|
||||
sql = "CREATE UNIQUE INDEX CONCURRENTLY title_idx ON films (title);"
|
||||
self.assertValidSql(sql)
|
||||
|
||||
def test_drop_index_non_concurrently(self):
|
||||
sql = "DROP INDEX ON films"
|
||||
self.assertWarningSql(sql)
|
||||
|
||||
def test_drop_index_concurrently(self):
|
||||
sql = "DROP INDEX CONCURRENTLY ON films;"
|
||||
self.assertValidSql(sql)
|
||||
Reference in new issue
Block a user