mirror of https://github.com/go-gitea/gitea
Check primary keys for all tables and drop ForeignReference (#21721)
Some dbs require that all tables have primary keys, see - #16802 - #21086 We can add a test to keep it from being broken again. Edit: ~Added missing primary key for `ForeignReference`~ Dropped the `ForeignReference` table to satisfy the check, so it closes #21086. More context can be found in comments. Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: zeripath <art27@cantab.net>pull/21879/head^2
parent
41f0668da8
commit
71ca3067bc
@ -1 +0,0 @@ |
||||
[] # empty |
@ -1,52 +0,0 @@ |
||||
// Copyright 2022 Gitea. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package foreignreference |
||||
|
||||
import ( |
||||
"fmt" |
||||
|
||||
"code.gitea.io/gitea/modules/util" |
||||
) |
||||
|
||||
// ErrLocalIndexNotExist represents a "LocalIndexNotExist" kind of error.
|
||||
type ErrLocalIndexNotExist struct { |
||||
RepoID int64 |
||||
ForeignIndex int64 |
||||
Type string |
||||
} |
||||
|
||||
// ErrLocalIndexNotExist checks if an error is a ErrLocalIndexNotExist.
|
||||
func IsErrLocalIndexNotExist(err error) bool { |
||||
_, ok := err.(ErrLocalIndexNotExist) |
||||
return ok |
||||
} |
||||
|
||||
func (err ErrLocalIndexNotExist) Error() string { |
||||
return fmt.Sprintf("repository %d has no LocalIndex for ForeignIndex %d of type %s", err.RepoID, err.ForeignIndex, err.Type) |
||||
} |
||||
|
||||
func (err ErrLocalIndexNotExist) Unwrap() error { |
||||
return util.ErrNotExist |
||||
} |
||||
|
||||
// ErrForeignIndexNotExist represents a "ForeignIndexNotExist" kind of error.
|
||||
type ErrForeignIndexNotExist struct { |
||||
RepoID int64 |
||||
LocalIndex int64 |
||||
Type string |
||||
} |
||||
|
||||
// ErrForeignIndexNotExist checks if an error is a ErrForeignIndexNotExist.
|
||||
func IsErrForeignIndexNotExist(err error) bool { |
||||
_, ok := err.(ErrForeignIndexNotExist) |
||||
return ok |
||||
} |
||||
|
||||
func (err ErrForeignIndexNotExist) Error() string { |
||||
return fmt.Sprintf("repository %d has no ForeignIndex for LocalIndex %d of type %s", err.RepoID, err.LocalIndex, err.Type) |
||||
} |
||||
|
||||
func (err ErrForeignIndexNotExist) Unwrap() error { |
||||
return util.ErrNotExist |
||||
} |
@ -1,31 +0,0 @@ |
||||
// Copyright 2022 Gitea. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package foreignreference |
||||
|
||||
import ( |
||||
"code.gitea.io/gitea/models/db" |
||||
) |
||||
|
||||
// Type* are valid values for the Type field of ForeignReference
|
||||
const ( |
||||
TypeIssue = "issue" |
||||
TypePullRequest = "pull_request" |
||||
TypeComment = "comment" |
||||
TypeReview = "review" |
||||
TypeReviewComment = "review_comment" |
||||
TypeRelease = "release" |
||||
) |
||||
|
||||
// ForeignReference represents external references
|
||||
type ForeignReference struct { |
||||
// RepoID is the first column in all indices. now we only need 2 indices: (repo, local) and (repo, foreign, type)
|
||||
RepoID int64 `xorm:"UNIQUE(repo_foreign_type) INDEX(repo_local)" ` |
||||
LocalIndex int64 `xorm:"INDEX(repo_local)"` // the resource key inside Gitea, it can be IssueIndex, or some model ID.
|
||||
ForeignIndex string `xorm:"INDEX UNIQUE(repo_foreign_type)"` |
||||
Type string `xorm:"VARCHAR(16) INDEX UNIQUE(repo_foreign_type)"` |
||||
} |
||||
|
||||
func init() { |
||||
db.RegisterModel(new(ForeignReference)) |
||||
} |
@ -0,0 +1,15 @@ |
||||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package v1_19 //nolint
|
||||
|
||||
import ( |
||||
"xorm.io/xorm" |
||||
) |
||||
|
||||
func DropForeignReferenceTable(x *xorm.Engine) error { |
||||
// Drop the table introduced in `v211`, it's considered badly designed and doesn't look like to be used.
|
||||
// See: https://github.com/go-gitea/gitea/issues/21086#issuecomment-1318217453
|
||||
type ForeignReference struct{} |
||||
return x.DropTables(new(ForeignReference)) |
||||
} |
Loading…
Reference in new issue