Skip to content

Commit 502e38c

Browse files
authored
Increase size of the language column in language_stat (#12396)
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
1 parent 3585bb7 commit 502e38c

File tree

3 files changed

+62
-2
lines changed

3 files changed

+62
-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: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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+
12+
"xorm.io/xorm"
13+
)
14+
15+
func increaseLanguageField(x *xorm.Engine) error {
16+
type LanguageStat struct {
17+
Language string `xorm:"VARCHAR(50) UNIQUE(s) INDEX NOT NULL"`
18+
}
19+
20+
if err := x.Sync2(new(LanguageStat)); err != nil {
21+
return err
22+
}
23+
24+
if setting.Database.UseSQLite3 {
25+
// SQLite maps VARCHAR to TEXT without size so we're done
26+
return nil
27+
}
28+
29+
// need to get the correct type for the new column
30+
inferredTable, err := x.TableInfo(new(LanguageStat))
31+
if err != nil {
32+
return err
33+
}
34+
column := inferredTable.GetColumn("language")
35+
sqlType := x.Dialect().SQLType(column)
36+
37+
sess := x.NewSession()
38+
defer sess.Close()
39+
if err := sess.Begin(); err != nil {
40+
return err
41+
}
42+
43+
switch {
44+
case setting.Database.UseMySQL:
45+
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE language_stat MODIFY COLUMN language %s", sqlType)); err != nil {
46+
return err
47+
}
48+
case setting.Database.UseMSSQL:
49+
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE language_stat ALTER COLUMN language %s", sqlType)); err != nil {
50+
return err
51+
}
52+
case setting.Database.UsePostgreSQL:
53+
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE language_stat ALTER COLUMN language TYPE %s", sqlType)); err != nil {
54+
return err
55+
}
56+
}
57+
58+
return sess.Commit()
59+
}

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)