@@ -665,6 +665,30 @@ def create_sql(self, model, schema_editor, using="gin", **kwargs):
665
665
str (index .create_sql (CharFieldModel , editor )),
666
666
)
667
667
668
+ def test_custom_sql (self ):
669
+ class CustomSQLIndex (PostgresIndex ):
670
+ sql_create_index = "SELECT 1"
671
+ sql_delete_index = "SELECT 2"
672
+
673
+ def create_sql (self , model , schema_editor , using = "" , ** kwargs ):
674
+ kwargs .setdefault ("sql" , self .sql_create_index )
675
+ return super ().create_sql (model , schema_editor , using , ** kwargs )
676
+
677
+ def remove_sql (self , model , schema_editor , ** kwargs ):
678
+ kwargs .setdefault ("sql" , self .sql_delete_index )
679
+ return super ().remove_sql (model , schema_editor , ** kwargs )
680
+
681
+ index = CustomSQLIndex (fields = ["field" ], name = "custom_sql_idx" )
682
+
683
+ operations = [
684
+ (index .create_sql , CustomSQLIndex .sql_create_index ),
685
+ (index .remove_sql , CustomSQLIndex .sql_delete_index ),
686
+ ]
687
+ for operation , expected in operations :
688
+ with self .subTest (operation = operation .__name__ ):
689
+ with connection .schema_editor () as editor :
690
+ self .assertEqual (expected , str (operation (CharFieldModel , editor )))
691
+
668
692
def test_op_class (self ):
669
693
index_name = "test_op_class"
670
694
index = Index (
0 commit comments