]> source.dussan.org Git - gitea.git/commitdiff
Upgrade xorm to new version which supported update join for all supported databases...
authorLunny Xiao <xiaolunwen@gmail.com>
Sun, 31 Dec 2023 05:00:35 +0000 (13:00 +0800)
committerGitHub <noreply@github.com>
Sun, 31 Dec 2023 05:00:35 +0000 (05:00 +0000)
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.

go.mod
go.sum
models/issues/comment.go
tests/integration/migrate_test.go

diff --git a/go.mod b/go.mod
index 54a56086701c30da5356f4a5ccd54d7ca9769a43..c08010a916c7149300e50e3c65713aa804cd1071 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -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 (
diff --git a/go.sum b/go.sum
index 348fc86da4142da3e914599f01e8c7ebab7777d5..69b2556dd3d38d7563a669f73dfe4b2fd5a4d388 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -1510,5 +1510,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=
index d92e49a444d746f647d46040b6b0e5d4c86256ba..7b068d49831acc964862afdc432ebbfd6a55b99f 100644 (file)
@@ -1161,14 +1161,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,
index f25329f66bcee2d4c8b8b741ed46b5ac911caeda..2f44de8a4f0c629752dfbaabcbe74f8d58331c17 100644 (file)
@@ -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)
+}