mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[4.0.x] Fixed #33194 -- Fixed migrations when altering a field with functional indexes/unique constraints on SQLite.
This adjusts Expressions.rename_table_references() to only update alias when needed. Regression in83fcfc9ec8. Co-authored-by: Simon Charette <charettes@users.noreply.github.com> Backport of86971c4090from main
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							f5fd03aebe
						
					
				
				
					commit
					00aa3e0b9b
				
			| @@ -2106,6 +2106,25 @@ class OperationTests(OperationTestBase): | ||||
|         self.assertEqual(definition[1], []) | ||||
|         self.assertEqual(definition[2], {'model_name': 'Pony', 'name': index_name}) | ||||
|  | ||||
|     @skipUnlessDBFeature('supports_expression_indexes') | ||||
|     def test_alter_field_with_func_index(self): | ||||
|         app_label = 'test_alfuncin' | ||||
|         index_name = f'{app_label}_pony_idx' | ||||
|         table_name = f'{app_label}_pony' | ||||
|         project_state = self.set_up_test_model( | ||||
|             app_label, | ||||
|             indexes=[models.Index(Abs('pink'), name=index_name)], | ||||
|         ) | ||||
|         operation = migrations.AlterField('Pony', 'pink', models.IntegerField(null=True)) | ||||
|         new_state = project_state.clone() | ||||
|         operation.state_forwards(app_label, new_state) | ||||
|         with connection.schema_editor() as editor: | ||||
|             operation.database_forwards(app_label, editor, project_state, new_state) | ||||
|         self.assertIndexNameExists(table_name, index_name) | ||||
|         with connection.schema_editor() as editor: | ||||
|             operation.database_backwards(app_label, editor, new_state, project_state) | ||||
|         self.assertIndexNameExists(table_name, index_name) | ||||
|  | ||||
|     def test_alter_field_with_index(self): | ||||
|         """ | ||||
|         Test AlterField operation with an index to ensure indexes created via | ||||
| @@ -2664,6 +2683,26 @@ class OperationTests(OperationTestBase): | ||||
|             'name': 'covering_pink_constraint_rm', | ||||
|         }) | ||||
|  | ||||
|     def test_alter_field_with_func_unique_constraint(self): | ||||
|         app_label = 'test_alfuncuc' | ||||
|         constraint_name = f'{app_label}_pony_uq' | ||||
|         table_name = f'{app_label}_pony' | ||||
|         project_state = self.set_up_test_model( | ||||
|             app_label, | ||||
|             constraints=[models.UniqueConstraint('pink', 'weight', name=constraint_name)] | ||||
|         ) | ||||
|         operation = migrations.AlterField('Pony', 'pink', models.IntegerField(null=True)) | ||||
|         new_state = project_state.clone() | ||||
|         operation.state_forwards(app_label, new_state) | ||||
|         with connection.schema_editor() as editor: | ||||
|             operation.database_forwards(app_label, editor, project_state, new_state) | ||||
|         if connection.features.supports_expression_indexes: | ||||
|             self.assertIndexNameExists(table_name, constraint_name) | ||||
|         with connection.schema_editor() as editor: | ||||
|             operation.database_backwards(app_label, editor, new_state, project_state) | ||||
|         if connection.features.supports_expression_indexes: | ||||
|             self.assertIndexNameExists(table_name, constraint_name) | ||||
|  | ||||
|     def test_add_func_unique_constraint(self): | ||||
|         app_label = 'test_adfuncuc' | ||||
|         constraint_name = f'{app_label}_pony_abs_uq' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user