From e610a6e1b55fa05bc992e79fa8626e906e123f65 Mon Sep 17 00:00:00 2001 From: Sumit Paul Date: Thu, 20 Jun 2024 02:08:32 +0530 Subject: [PATCH 1/7] Change column data type to numeric to accomodate large numbers --- models/migrations/migrations.go | 2 ++ models/migrations/v1_23/v300.go | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 models/migrations/v1_23/v300.go diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 08882fb1195cc..aa178eb6caa77 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -591,6 +591,8 @@ var migrations = []Migration{ // v299 -> v300 NewMigration("Add content version to issue and comment table", v1_23.AddContentVersionToIssueAndComment), + // v300 -> v301 + NewMigration("Chnage original_author_id of issue, comments, release, reaction and review table to accomodate OAuth2 UserId", v1_23.changeOriginalAuthorIDDataTypeToNumeric), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_23/v300.go b/models/migrations/v1_23/v300.go new file mode 100644 index 0000000000000..771555b2e5e4e --- /dev/null +++ b/models/migrations/v1_23/v300.go @@ -0,0 +1,23 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_23 //nolint + +import ( + "strings" + + "xorm.io/xorm" +) + +func changeOriginalAuthorIDDataTypeToNumeric(x *xorm.Engine) error { + sql := strings.Join([]string{ + "ALTER TABLE `issue` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", + "ALTER TABLE `comment` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", + "ALTER TABLE `release` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", + "ALTER TABLE `reaction` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", + "ALTER TABLE `review` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", + }, "; ") + + _, err := x.Exec(sql) + return err +} From 7a7b4583dc9fa0af55e4f3a93f9c2fa7d34de499 Mon Sep 17 00:00:00 2001 From: Sumit Paul Date: Thu, 20 Jun 2024 03:14:17 +0530 Subject: [PATCH 2/7] Convert original_author_id column data type to numeric --- models/migrations/migrations.go | 2 +- models/migrations/v1_23/v300.go | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index aa178eb6caa77..b1357de876b38 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -592,7 +592,7 @@ var migrations = []Migration{ // v299 -> v300 NewMigration("Add content version to issue and comment table", v1_23.AddContentVersionToIssueAndComment), // v300 -> v301 - NewMigration("Chnage original_author_id of issue, comments, release, reaction and review table to accomodate OAuth2 UserId", v1_23.changeOriginalAuthorIDDataTypeToNumeric), + NewMigration("Convert original_author_id of issue, comments, release, reaction and review table to numeric", v1_23.ConvertAuthorIDToNumeric), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_23/v300.go b/models/migrations/v1_23/v300.go index 771555b2e5e4e..a268ae7dcd60e 100644 --- a/models/migrations/v1_23/v300.go +++ b/models/migrations/v1_23/v300.go @@ -6,17 +6,22 @@ package v1_23 //nolint import ( "strings" + "code.gitea.io/gitea/modules/setting" "xorm.io/xorm" ) -func changeOriginalAuthorIDDataTypeToNumeric(x *xorm.Engine) error { +func ConvertAuthorIDToNumeric(x *xorm.Engine) error { + // Google OAuth2 provider may give very long user IDs + if !setting.Database.Type.IsPostgreSQL() { + return nil + } sql := strings.Join([]string{ - "ALTER TABLE `issue` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", - "ALTER TABLE `comment` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", - "ALTER TABLE `release` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", - "ALTER TABLE `reaction` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", - "ALTER TABLE `review` ALTER COLUMN `original_author_id` TYPE NUMERIC USING `original_author_id`::NUMERIC", - }, "; ") + "ALTER TABLE issue ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE comment ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE release ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE reaction ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE review ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + }, " ") _, err := x.Exec(sql) return err From b2d0c502ff13560eed15901de2aa73320d82e31c Mon Sep 17 00:00:00 2001 From: Sumit Paul Date: Thu, 20 Jun 2024 03:18:41 +0530 Subject: [PATCH 3/7] fmt changes --- models/migrations/v1_23/v300.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models/migrations/v1_23/v300.go b/models/migrations/v1_23/v300.go index a268ae7dcd60e..b9a88fc5b0888 100644 --- a/models/migrations/v1_23/v300.go +++ b/models/migrations/v1_23/v300.go @@ -7,6 +7,7 @@ import ( "strings" "code.gitea.io/gitea/modules/setting" + "xorm.io/xorm" ) From 8547ab59ebb77f40b71196abac2726aa30657adb Mon Sep 17 00:00:00 2001 From: Sumit Paul Date: Thu, 20 Jun 2024 08:43:28 +0530 Subject: [PATCH 4/7] Convert UID to String --- models/issues/comment.go | 2 +- models/issues/issue_update.go | 4 ++-- models/issues/reaction.go | 4 ++-- models/issues/review.go | 4 ++-- models/issues/review_list.go | 6 +++--- models/migrations/migrations.go | 2 +- models/migrations/v1_23/v300.go | 17 ++++++----------- models/repo/release.go | 2 +- modules/structs/issue.go | 2 +- modules/structs/issue_comment.go | 2 +- 10 files changed, 20 insertions(+), 25 deletions(-) diff --git a/models/issues/comment.go b/models/issues/comment.go index c6c5dc24321d1..37e402fa063f1 100644 --- a/models/issues/comment.go +++ b/models/issues/comment.go @@ -1187,7 +1187,7 @@ func UpdateCommentsMigrationsByType(ctx context.Context, tp structs.GitServiceTy Update(map[string]any{ "poster_id": posterID, "original_author": "", - "original_author_id": 0, + "original_author_id": "0", }) return err } diff --git a/models/issues/issue_update.go b/models/issues/issue_update.go index 31d76be5e0aea..559e7ca49876f 100644 --- a/models/issues/issue_update.go +++ b/models/issues/issue_update.go @@ -623,7 +623,7 @@ func UpdateIssuesMigrationsByType(ctx context.Context, gitServiceType api.GitSer Update(map[string]any{ "poster_id": posterID, "original_author": "", - "original_author_id": 0, + "original_author_id": "0", }) return err } @@ -636,7 +636,7 @@ func UpdateReactionsMigrationsByType(ctx context.Context, gitServiceType api.Git Update(map[string]any{ "user_id": userID, "original_author": "", - "original_author_id": 0, + "original_author_id": "0", }) return err } diff --git a/models/issues/reaction.go b/models/issues/reaction.go index eb7faefc796b9..cde0744ca866e 100644 --- a/models/issues/reaction.go +++ b/models/issues/reaction.go @@ -130,7 +130,7 @@ func (opts *FindReactionsOptions) toConds() builder.Cond { if opts.UserID > 0 { cond = cond.And(builder.Eq{ "reaction.user_id": opts.UserID, - "reaction.original_author_id": 0, + "reaction.original_author_id": "0", }) } if opts.Reaction != "" { @@ -249,7 +249,7 @@ func DeleteReaction(ctx context.Context, opts *ReactionOptions) error { CommentID: opts.CommentID, } - sess := db.GetEngine(ctx).Where("original_author_id = 0") + sess := db.GetEngine(ctx).Where("original_author_id = '0'") if opts.CommentID == -1 { reaction.CommentID = 0 sess.MustCols("comment_id") diff --git a/models/issues/review.go b/models/issues/review.go index ca6fd6035b130..2b5ff80ebd0b0 100644 --- a/models/issues/review.go +++ b/models/issues/review.go @@ -514,7 +514,7 @@ func GetReviewByIssueIDAndUserID(ctx context.Context, issueID, userID int64) (*R has, err := db.GetEngine(ctx).Where( builder.In("type", ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest). - And(builder.Eq{"issue_id": issueID, "reviewer_id": userID, "original_author_id": 0})). + And(builder.Eq{"issue_id": issueID, "reviewer_id": userID, "original_author_id": "0"})). Desc("id"). Get(review) if err != nil { @@ -1050,7 +1050,7 @@ func UpdateReviewsMigrationsByType(ctx context.Context, tp structs.GitServiceTyp Update(map[string]any{ "reviewer_id": posterID, "original_author": "", - "original_author_id": 0, + "original_author_id": "0", }) return err } diff --git a/models/issues/review_list.go b/models/issues/review_list.go index 7b8c3d319c35a..551a0fc088726 100644 --- a/models/issues/review_list.go +++ b/models/issues/review_list.go @@ -134,7 +134,7 @@ func GetReviewersFromOriginalAuthorsByIssueID(ctx context.Context, issueID int64 reviews := make([]*Review, 0, 10) // Get latest review of each reviewer, sorted in order they were made - if err := db.GetEngine(ctx).SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND original_author_id <> 0 GROUP BY issue_id, original_author_id) ORDER BY review.updated_unix ASC", + if err := db.GetEngine(ctx).SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND original_author_id <> '0' GROUP BY issue_id, original_author_id) ORDER BY review.updated_unix ASC", issueID, ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest). Find(&reviews); err != nil { return nil, err @@ -150,14 +150,14 @@ func GetReviewsByIssueID(ctx context.Context, issueID int64) (ReviewList, error) sess := db.GetEngine(ctx) // Get latest review of each reviewer, sorted in order they were made - if err := sess.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND dismissed = ? AND original_author_id = 0 GROUP BY issue_id, reviewer_id) ORDER BY review.updated_unix ASC", + if err := sess.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND dismissed = ? AND original_author_id = '0' GROUP BY issue_id, reviewer_id) ORDER BY review.updated_unix ASC", issueID, ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest, false). Find(&reviews); err != nil { return nil, err } teamReviewRequests := make([]*Review, 0, 5) - if err := sess.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id <> 0 AND original_author_id = 0 GROUP BY issue_id, reviewer_team_id) ORDER BY review.updated_unix ASC", + if err := sess.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id <> 0 AND original_author_id = '0' GROUP BY issue_id, reviewer_team_id) ORDER BY review.updated_unix ASC", issueID). Find(&teamReviewRequests); err != nil { return nil, err diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index b1357de876b38..0eb897e5df01d 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -592,7 +592,7 @@ var migrations = []Migration{ // v299 -> v300 NewMigration("Add content version to issue and comment table", v1_23.AddContentVersionToIssueAndComment), // v300 -> v301 - NewMigration("Convert original_author_id of issue, comments, release, reaction and review table to numeric", v1_23.ConvertAuthorIDToNumeric), + NewMigration("Convert original_author_id of issue, comments, release, reaction and review table to string", v1_23.ConvertAuthorIDToString), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_23/v300.go b/models/migrations/v1_23/v300.go index b9a88fc5b0888..eb762034a519f 100644 --- a/models/migrations/v1_23/v300.go +++ b/models/migrations/v1_23/v300.go @@ -6,22 +6,17 @@ package v1_23 //nolint import ( "strings" - "code.gitea.io/gitea/modules/setting" - "xorm.io/xorm" ) -func ConvertAuthorIDToNumeric(x *xorm.Engine) error { +func ConvertAuthorIDToString(x *xorm.Engine) error { // Google OAuth2 provider may give very long user IDs - if !setting.Database.Type.IsPostgreSQL() { - return nil - } sql := strings.Join([]string{ - "ALTER TABLE issue ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - "ALTER TABLE comment ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - "ALTER TABLE release ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - "ALTER TABLE reaction ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - "ALTER TABLE review ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE issue ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", + "ALTER TABLE comment ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", + "ALTER TABLE release ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", + "ALTER TABLE reaction ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", + "ALTER TABLE review ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", }, " ") _, err := x.Exec(sql) diff --git a/models/repo/release.go b/models/repo/release.go index a9f65f6c3e886..3b27bfc4597f4 100644 --- a/models/repo/release.go +++ b/models/repo/release.go @@ -432,7 +432,7 @@ func UpdateReleasesMigrationsByType(ctx context.Context, gitServiceType structs. Update(map[string]any{ "publisher_id": posterID, "original_author": "", - "original_author_id": 0, + "original_author_id": "0", }) return err } diff --git a/modules/structs/issue.go b/modules/structs/issue.go index 3c06e383560a3..98774827e01f0 100644 --- a/modules/structs/issue.go +++ b/modules/structs/issue.go @@ -50,7 +50,7 @@ type Issue struct { Index int64 `json:"number"` Poster *User `json:"user"` OriginalAuthor string `json:"original_author"` - OriginalAuthorID int64 `json:"original_author_id"` + OriginalAuthorID string `json:"original_author_id"` Title string `json:"title"` Body string `json:"body"` Ref string `json:"ref"` diff --git a/modules/structs/issue_comment.go b/modules/structs/issue_comment.go index 9e8f5c4bf3321..55245a5652aad 100644 --- a/modules/structs/issue_comment.go +++ b/modules/structs/issue_comment.go @@ -15,7 +15,7 @@ type Comment struct { IssueURL string `json:"issue_url"` Poster *User `json:"user"` OriginalAuthor string `json:"original_author"` - OriginalAuthorID int64 `json:"original_author_id"` + OriginalAuthorID string `json:"original_author_id"` Body string `json:"body"` Attachments []*Attachment `json:"assets"` // swagger:strfmt date-time From 4bca32c2f2b7093bf16649882828faeea3807eb4 Mon Sep 17 00:00:00 2001 From: Sumit Paul Date: Thu, 20 Jun 2024 09:21:31 +0530 Subject: [PATCH 5/7] Revert "Convert UID to String" This reverts commit 8547ab59ebb77f40b71196abac2726aa30657adb. --- models/issues/comment.go | 2 +- models/issues/issue_update.go | 4 ++-- models/issues/reaction.go | 4 ++-- models/issues/review.go | 4 ++-- models/issues/review_list.go | 6 +++--- models/migrations/migrations.go | 2 +- models/migrations/v1_23/v300.go | 17 +++++++++++------ models/repo/release.go | 2 +- modules/structs/issue.go | 2 +- modules/structs/issue_comment.go | 2 +- 10 files changed, 25 insertions(+), 20 deletions(-) diff --git a/models/issues/comment.go b/models/issues/comment.go index 37e402fa063f1..c6c5dc24321d1 100644 --- a/models/issues/comment.go +++ b/models/issues/comment.go @@ -1187,7 +1187,7 @@ func UpdateCommentsMigrationsByType(ctx context.Context, tp structs.GitServiceTy Update(map[string]any{ "poster_id": posterID, "original_author": "", - "original_author_id": "0", + "original_author_id": 0, }) return err } diff --git a/models/issues/issue_update.go b/models/issues/issue_update.go index 559e7ca49876f..31d76be5e0aea 100644 --- a/models/issues/issue_update.go +++ b/models/issues/issue_update.go @@ -623,7 +623,7 @@ func UpdateIssuesMigrationsByType(ctx context.Context, gitServiceType api.GitSer Update(map[string]any{ "poster_id": posterID, "original_author": "", - "original_author_id": "0", + "original_author_id": 0, }) return err } @@ -636,7 +636,7 @@ func UpdateReactionsMigrationsByType(ctx context.Context, gitServiceType api.Git Update(map[string]any{ "user_id": userID, "original_author": "", - "original_author_id": "0", + "original_author_id": 0, }) return err } diff --git a/models/issues/reaction.go b/models/issues/reaction.go index cde0744ca866e..eb7faefc796b9 100644 --- a/models/issues/reaction.go +++ b/models/issues/reaction.go @@ -130,7 +130,7 @@ func (opts *FindReactionsOptions) toConds() builder.Cond { if opts.UserID > 0 { cond = cond.And(builder.Eq{ "reaction.user_id": opts.UserID, - "reaction.original_author_id": "0", + "reaction.original_author_id": 0, }) } if opts.Reaction != "" { @@ -249,7 +249,7 @@ func DeleteReaction(ctx context.Context, opts *ReactionOptions) error { CommentID: opts.CommentID, } - sess := db.GetEngine(ctx).Where("original_author_id = '0'") + sess := db.GetEngine(ctx).Where("original_author_id = 0") if opts.CommentID == -1 { reaction.CommentID = 0 sess.MustCols("comment_id") diff --git a/models/issues/review.go b/models/issues/review.go index 2b5ff80ebd0b0..ca6fd6035b130 100644 --- a/models/issues/review.go +++ b/models/issues/review.go @@ -514,7 +514,7 @@ func GetReviewByIssueIDAndUserID(ctx context.Context, issueID, userID int64) (*R has, err := db.GetEngine(ctx).Where( builder.In("type", ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest). - And(builder.Eq{"issue_id": issueID, "reviewer_id": userID, "original_author_id": "0"})). + And(builder.Eq{"issue_id": issueID, "reviewer_id": userID, "original_author_id": 0})). Desc("id"). Get(review) if err != nil { @@ -1050,7 +1050,7 @@ func UpdateReviewsMigrationsByType(ctx context.Context, tp structs.GitServiceTyp Update(map[string]any{ "reviewer_id": posterID, "original_author": "", - "original_author_id": "0", + "original_author_id": 0, }) return err } diff --git a/models/issues/review_list.go b/models/issues/review_list.go index 551a0fc088726..7b8c3d319c35a 100644 --- a/models/issues/review_list.go +++ b/models/issues/review_list.go @@ -134,7 +134,7 @@ func GetReviewersFromOriginalAuthorsByIssueID(ctx context.Context, issueID int64 reviews := make([]*Review, 0, 10) // Get latest review of each reviewer, sorted in order they were made - if err := db.GetEngine(ctx).SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND original_author_id <> '0' GROUP BY issue_id, original_author_id) ORDER BY review.updated_unix ASC", + if err := db.GetEngine(ctx).SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND original_author_id <> 0 GROUP BY issue_id, original_author_id) ORDER BY review.updated_unix ASC", issueID, ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest). Find(&reviews); err != nil { return nil, err @@ -150,14 +150,14 @@ func GetReviewsByIssueID(ctx context.Context, issueID int64) (ReviewList, error) sess := db.GetEngine(ctx) // Get latest review of each reviewer, sorted in order they were made - if err := sess.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND dismissed = ? AND original_author_id = '0' GROUP BY issue_id, reviewer_id) ORDER BY review.updated_unix ASC", + if err := sess.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND dismissed = ? AND original_author_id = 0 GROUP BY issue_id, reviewer_id) ORDER BY review.updated_unix ASC", issueID, ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest, false). Find(&reviews); err != nil { return nil, err } teamReviewRequests := make([]*Review, 0, 5) - if err := sess.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id <> 0 AND original_author_id = '0' GROUP BY issue_id, reviewer_team_id) ORDER BY review.updated_unix ASC", + if err := sess.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id <> 0 AND original_author_id = 0 GROUP BY issue_id, reviewer_team_id) ORDER BY review.updated_unix ASC", issueID). Find(&teamReviewRequests); err != nil { return nil, err diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 0eb897e5df01d..b1357de876b38 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -592,7 +592,7 @@ var migrations = []Migration{ // v299 -> v300 NewMigration("Add content version to issue and comment table", v1_23.AddContentVersionToIssueAndComment), // v300 -> v301 - NewMigration("Convert original_author_id of issue, comments, release, reaction and review table to string", v1_23.ConvertAuthorIDToString), + NewMigration("Convert original_author_id of issue, comments, release, reaction and review table to numeric", v1_23.ConvertAuthorIDToNumeric), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_23/v300.go b/models/migrations/v1_23/v300.go index eb762034a519f..b9a88fc5b0888 100644 --- a/models/migrations/v1_23/v300.go +++ b/models/migrations/v1_23/v300.go @@ -6,17 +6,22 @@ package v1_23 //nolint import ( "strings" + "code.gitea.io/gitea/modules/setting" + "xorm.io/xorm" ) -func ConvertAuthorIDToString(x *xorm.Engine) error { +func ConvertAuthorIDToNumeric(x *xorm.Engine) error { // Google OAuth2 provider may give very long user IDs + if !setting.Database.Type.IsPostgreSQL() { + return nil + } sql := strings.Join([]string{ - "ALTER TABLE issue ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", - "ALTER TABLE comment ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", - "ALTER TABLE release ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", - "ALTER TABLE reaction ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", - "ALTER TABLE review ALTER COLUMN original_author_id TYPE VARCHAR(255) USING original_author_id::VARCHAR;", + "ALTER TABLE issue ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE comment ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE release ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE reaction ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", + "ALTER TABLE review ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", }, " ") _, err := x.Exec(sql) diff --git a/models/repo/release.go b/models/repo/release.go index 3b27bfc4597f4..a9f65f6c3e886 100644 --- a/models/repo/release.go +++ b/models/repo/release.go @@ -432,7 +432,7 @@ func UpdateReleasesMigrationsByType(ctx context.Context, gitServiceType structs. Update(map[string]any{ "publisher_id": posterID, "original_author": "", - "original_author_id": "0", + "original_author_id": 0, }) return err } diff --git a/modules/structs/issue.go b/modules/structs/issue.go index 98774827e01f0..3c06e383560a3 100644 --- a/modules/structs/issue.go +++ b/modules/structs/issue.go @@ -50,7 +50,7 @@ type Issue struct { Index int64 `json:"number"` Poster *User `json:"user"` OriginalAuthor string `json:"original_author"` - OriginalAuthorID string `json:"original_author_id"` + OriginalAuthorID int64 `json:"original_author_id"` Title string `json:"title"` Body string `json:"body"` Ref string `json:"ref"` diff --git a/modules/structs/issue_comment.go b/modules/structs/issue_comment.go index 55245a5652aad..9e8f5c4bf3321 100644 --- a/modules/structs/issue_comment.go +++ b/modules/structs/issue_comment.go @@ -15,7 +15,7 @@ type Comment struct { IssueURL string `json:"issue_url"` Poster *User `json:"user"` OriginalAuthor string `json:"original_author"` - OriginalAuthorID string `json:"original_author_id"` + OriginalAuthorID int64 `json:"original_author_id"` Body string `json:"body"` Attachments []*Attachment `json:"assets"` // swagger:strfmt date-time From 9cf1bf8cd10a14942ef98a8f72bd7fd1e48c2369 Mon Sep 17 00:00:00 2001 From: Sumit Paul Date: Thu, 20 Jun 2024 09:30:06 +0530 Subject: [PATCH 6/7] return if parse fails --- models/migrations/migrations.go | 2 -- models/migrations/v1_23/v300.go | 29 ----------------------------- services/externalaccount/user.go | 6 ++++++ 3 files changed, 6 insertions(+), 31 deletions(-) delete mode 100644 models/migrations/v1_23/v300.go diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index b1357de876b38..08882fb1195cc 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -591,8 +591,6 @@ var migrations = []Migration{ // v299 -> v300 NewMigration("Add content version to issue and comment table", v1_23.AddContentVersionToIssueAndComment), - // v300 -> v301 - NewMigration("Convert original_author_id of issue, comments, release, reaction and review table to numeric", v1_23.ConvertAuthorIDToNumeric), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_23/v300.go b/models/migrations/v1_23/v300.go deleted file mode 100644 index b9a88fc5b0888..0000000000000 --- a/models/migrations/v1_23/v300.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2024 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package v1_23 //nolint - -import ( - "strings" - - "code.gitea.io/gitea/modules/setting" - - "xorm.io/xorm" -) - -func ConvertAuthorIDToNumeric(x *xorm.Engine) error { - // Google OAuth2 provider may give very long user IDs - if !setting.Database.Type.IsPostgreSQL() { - return nil - } - sql := strings.Join([]string{ - "ALTER TABLE issue ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - "ALTER TABLE comment ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - "ALTER TABLE release ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - "ALTER TABLE reaction ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - "ALTER TABLE review ALTER COLUMN original_author_id TYPE NUMERIC USING original_author_id::NUMERIC;", - }, " ") - - _, err := x.Exec(sql) - return err -} diff --git a/services/externalaccount/user.go b/services/externalaccount/user.go index e2de41da188e5..57ac6742d3e96 100644 --- a/services/externalaccount/user.go +++ b/services/externalaccount/user.go @@ -5,6 +5,7 @@ package externalaccount import ( "context" + "strconv" "strings" "code.gitea.io/gitea/models/auth" @@ -82,6 +83,11 @@ func UpdateExternalUser(ctx context.Context, user *user_model.User, gothUser got // UpdateMigrationsByType updates all migrated repositories' posterid from gitServiceType to replace originalAuthorID to posterID func UpdateMigrationsByType(ctx context.Context, tp structs.GitServiceType, externalUserID string, userID int64) error { + // Dont update if externalUserID is not a number + if _, err := strconv.ParseInt(externalUserID, 10, 64); err != nil { + return nil + } + if err := issues_model.UpdateIssuesMigrationsByType(ctx, tp, externalUserID, userID); err != nil { return err } From c949e039728857353b09a8d1aed5711bec239c76 Mon Sep 17 00:00:00 2001 From: Sumit Paul Date: Thu, 20 Jun 2024 09:33:12 +0530 Subject: [PATCH 7/7] update comment --- services/externalaccount/user.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/externalaccount/user.go b/services/externalaccount/user.go index 57ac6742d3e96..3cfd8c81f9fc7 100644 --- a/services/externalaccount/user.go +++ b/services/externalaccount/user.go @@ -83,7 +83,7 @@ func UpdateExternalUser(ctx context.Context, user *user_model.User, gothUser got // UpdateMigrationsByType updates all migrated repositories' posterid from gitServiceType to replace originalAuthorID to posterID func UpdateMigrationsByType(ctx context.Context, tp structs.GitServiceType, externalUserID string, userID int64) error { - // Dont update if externalUserID is not a number + // Skip update if externalUserID is not a valid numeric ID or exceeds int64 if _, err := strconv.ParseInt(externalUserID, 10, 64); err != nil { return nil }