Skip to content

Commit 437ab15

Browse files
committed
Increase size of the language column in language_stat
In #12379 it was discovered that enry v2 has a maximum language length of 34 characters which is larger than the 30 previously provided. This PR updates the language column to 50. Fix #12379 Signed-off-by: Andrew Thornton <[email protected]>
1 parent 1530069 commit 437ab15

File tree

3 files changed

+61
-2
lines changed

3 files changed

+61
-2
lines changed

models/migrations/migrations.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ var migrations = []Migration{
222222
NewMigration("recalculate Stars number for all user", recalculateStars),
223223
// v144 -> v145
224224
NewMigration("update Matrix Webhook http method to 'PUT'", updateMatrixWebhookHTTPMethod),
225+
// v145 -> v146
226+
NewMigration("Increase Language field to 50 in LanguageStats", increaseLanguageField),
225227
}
226228

227229
// GetCurrentDBVersion returns the current db version
@@ -464,7 +466,6 @@ func dropTableColumns(sess *xorm.Session, tableName string, columnNames ...strin
464466
sess.Rollback()
465467
return fmt.Errorf("Drop table `%s` columns %v: %v", tableName, columnNames, err)
466468
}
467-
468469
return sess.Commit()
469470
default:
470471
log.Fatal("Unrecognized DB")

models/migrations/v145.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// Copyright 2020 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package migrations
6+
7+
import (
8+
"fmt"
9+
10+
"code.gitea.io/gitea/modules/setting"
11+
"xorm.io/xorm"
12+
)
13+
14+
func increaseLanguageField(x *xorm.Engine) error {
15+
type LanguageStat struct {
16+
Language string `xorm:"VARCHAR(50) UNIQUE(s) INDEX NOT NULL"`
17+
}
18+
19+
if err := x.Sync2(new(LanguageStat)); err != nil {
20+
return err
21+
}
22+
23+
if setting.Database.UseSQLite3 {
24+
// SQLite maps VARCHAR to TEXT without size so we're done
25+
return nil
26+
}
27+
28+
// need to get the correct type for the new column
29+
inferredTable, err := x.TableInfo(new(LanguageStat))
30+
if err != nil {
31+
return err
32+
}
33+
column := inferredTable.GetColumn("language")
34+
sqlType := x.Dialect().SQLType(column)
35+
36+
sess := x.NewSession()
37+
defer sess.Close()
38+
if err := sess.Begin(); err != nil {
39+
return err
40+
}
41+
42+
switch {
43+
case setting.Database.UseMySQL:
44+
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE language_stat MODIFY COLUMN language %s", sqlType)); err != nil {
45+
return err
46+
}
47+
case setting.Database.UseMSSQL:
48+
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE language_stat ALTER COLUMN language %s", sqlType)); err != nil {
49+
return err
50+
}
51+
case setting.Database.UsePostgreSQL:
52+
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE language_stat ALTER COLUMN language %s", sqlType)); err != nil {
53+
return err
54+
}
55+
}
56+
57+
return sess.Commit()
58+
}

models/repo_language_stats.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type LanguageStat struct {
1919
RepoID int64 `xorm:"UNIQUE(s) INDEX NOT NULL"`
2020
CommitID string
2121
IsPrimary bool
22-
Language string `xorm:"VARCHAR(30) UNIQUE(s) INDEX NOT NULL"`
22+
Language string `xorm:"VARCHAR(50) UNIQUE(s) INDEX NOT NULL"`
2323
Percentage float32 `xorm:"-"`
2424
Size int64 `xorm:"NOT NULL DEFAULT 0"`
2525
Color string `xorm:"-"`

0 commit comments

Comments
 (0)