Backport #28590 by @lunny Fix https://github.com/go-gitea/gitea/pull/28547#issuecomment-1867740842 Since https://gitea.com/xorm/xorm/pulls/2383 merged, xorm now supports UPDATE JOIN. To keep consistent from different databases, xorm use `engine.Join().Update`, but the actural generated SQL are different between different databases. For MySQL, it's `UPDATE talbe1 JOIN table2 ON join_conditions SET xxx Where xxx`. For MSSQL, it's `UPDATE table1 SET xxx FROM TABLE1, TABLE2 WHERE join_conditions`. For SQLITE per https://www.sqlite.org/lang_update.html, sqlite support `UPDATE table1 SET xxx FROM table2 WHERE join conditions` from 3.33.0(2020-8-14). POSTGRES is the same as SQLITE. Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>tags/v1.21.4
@@ -121,7 +121,7 @@ require ( | |||
mvdan.cc/xurls/v2 v2.5.0 | |||
strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251 | |||
xorm.io/builder v0.3.13 | |||
xorm.io/xorm v1.3.4 | |||
xorm.io/xorm v1.3.6 | |||
) | |||
require ( |
@@ -1649,5 +1649,5 @@ strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251/go.mod h1: | |||
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= | |||
xorm.io/builder v0.3.13 h1:a3jmiVVL19psGeXx8GIurTp7p0IIgqeDmwhcR6BAOAo= | |||
xorm.io/builder v0.3.13/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= | |||
xorm.io/xorm v1.3.4 h1:vWFKzR3DhGUDl5b4srhUjhDwjxkZAc4C7BFszpu0swI= | |||
xorm.io/xorm v1.3.4/go.mod h1:qFJGFoVYbbIdnz2vaL5OxSQ2raleMpyRRalnq3n9OJo= | |||
xorm.io/xorm v1.3.6 h1:hfpWHkDIWWqUi8FRF2H2M9O8lO3Ov47rwFcS9gPzPkU= | |||
xorm.io/xorm v1.3.6/go.mod h1:qFJGFoVYbbIdnz2vaL5OxSQ2raleMpyRRalnq3n9OJo= |
@@ -1153,14 +1153,9 @@ func DeleteComment(ctx context.Context, comment *Comment) error { | |||
// UpdateCommentsMigrationsByType updates comments' migrations information via given git service type and original id and poster id | |||
func UpdateCommentsMigrationsByType(ctx context.Context, tp structs.GitServiceType, originalAuthorID string, posterID int64) error { | |||
_, err := db.GetEngine(ctx).Table("comment"). | |||
Where(builder.In("issue_id", | |||
builder.Select("issue.id"). | |||
From("issue"). | |||
InnerJoin("repository", "issue.repo_id = repository.id"). | |||
Where(builder.Eq{ | |||
"repository.original_service_type": tp, | |||
}), | |||
)). | |||
Join("INNER", "issue", "issue.id = comment.issue_id"). | |||
Join("INNER", "repository", "issue.repo_id = repository.id"). | |||
Where("repository.original_service_type = ?", tp). | |||
And("comment.original_author_id = ?", originalAuthorID). | |||
Update(map[string]any{ | |||
"poster_id": posterID, |
@@ -12,6 +12,8 @@ import ( | |||
"testing" | |||
auth_model "code.gitea.io/gitea/models/auth" | |||
"code.gitea.io/gitea/models/db" | |||
issues_model "code.gitea.io/gitea/models/issues" | |||
repo_model "code.gitea.io/gitea/models/repo" | |||
"code.gitea.io/gitea/models/unittest" | |||
user_model "code.gitea.io/gitea/models/user" | |||
@@ -99,3 +101,10 @@ func TestMigrateGiteaForm(t *testing.T) { | |||
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: migratedRepoName}) | |||
}) | |||
} | |||
func Test_UpdateCommentsMigrationsByType(t *testing.T) { | |||
assert.NoError(t, unittest.PrepareTestDatabase()) | |||
err := issues_model.UpdateCommentsMigrationsByType(db.DefaultContext, structs.GithubService, "1", 1) | |||
assert.NoError(t, err) | |||
} |