@@ -26,6 +26,7 @@ import (
26
26
actions_module "code.gitea.io/gitea/modules/actions"
27
27
"code.gitea.io/gitea/modules/lfs"
28
28
"code.gitea.io/gitea/modules/log"
29
+ "code.gitea.io/gitea/modules/setting"
29
30
"code.gitea.io/gitea/modules/storage"
30
31
31
32
"xorm.io/builder"
@@ -125,9 +126,25 @@ func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, repoID
125
126
return err
126
127
}
127
128
128
- if _ , err := db .GetEngine (ctx ).In ("hook_id" , builder .Select ("id" ).From ("webhook" ).Where (builder.Eq {"webhook.repo_id" : repo .ID })).
129
- Delete (& webhook.HookTask {}); err != nil {
130
- return err
129
+ if setting .Database .Type .IsMySQL () {
130
+ // mariadb:10 does not use the hook_task KEY when using IN.
131
+ // https://codeberg.org/forgejo/forgejo/issues/3678
132
+ //
133
+ // Version 11 does support it, but is not available in debian yet.
134
+ // Version 11.4 LTS is not available yet (stable should be released mid 2024 https://mariadb.org/mariadb/all-releases/)
135
+
136
+ // Sqlite does not support the DELETE *** FROM *** syntax
137
+ // https://stackoverflow.com/q/24511153/3207406
138
+
139
+ // in the meantime, use a dedicated query for mysql...
140
+ if _ , err := db .Exec (ctx , "DELETE `hook_task` FROM `hook_task` INNER JOIN `webhook` ON `webhook`.id = `hook_task`.hook_id WHERE `webhook`.repo_id = ?" , repo .ID ); err != nil {
141
+ return err
142
+ }
143
+ } else {
144
+ if _ , err := db .GetEngine (ctx ).In ("hook_id" , builder .Select ("id" ).From ("webhook" ).Where (builder.Eq {"webhook.repo_id" : repo .ID })).
145
+ Delete (& webhook.HookTask {}); err != nil {
146
+ return err
147
+ }
131
148
}
132
149
133
150
if err := db .DeleteBeans (ctx ,
0 commit comments