From cd5c5114745bfee32ad536ef844115726e690bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Fri, 16 Dec 2022 12:33:01 +0100 Subject: [PATCH] fix: enable experimental column altering for cockroachdb (see #442) --- config/db_opts.go | 35 +++++++++++++++++++++++++++++++++++ main.go | 5 +---- models/summary.go | 2 +- models/user.go | 2 +- 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 config/db_opts.go diff --git a/config/db_opts.go b/config/db_opts.go new file mode 100644 index 0000000..9c25fec --- /dev/null +++ b/config/db_opts.go @@ -0,0 +1,35 @@ +package config + +import ( + "gorm.io/gorm" +) + +type WakapiDBOpts struct { + dbConfig *dbConfig +} + +func GetWakapiDBOpts(dbConfig *dbConfig) *WakapiDBOpts { + return &WakapiDBOpts{dbConfig: dbConfig} +} + +func (opts WakapiDBOpts) Apply(config *gorm.Config) error { + return nil +} + +func (opts WakapiDBOpts) AfterInitialize(db *gorm.DB) error { + // initial session variables + if opts.dbConfig.Type == "cockroach" { + // https://www.cockroachlabs.com/docs/stable/experimental-features.html#alter-column-types + if err := db.Exec("SET enable_experimental_alter_column_type_general = true;").Error; err != nil { + return err + } + } + + if opts.dbConfig.IsSQLite() { + if err := db.Exec("PRAGMA foreign_keys = ON;").Error; err != nil { + return err + } + } + + return nil +} diff --git a/main.go b/main.go index b389a40..f724c46 100644 --- a/main.go +++ b/main.go @@ -132,14 +132,11 @@ func main() { // Connect to database var err error - db, err = gorm.Open(config.Db.GetDialector(), &gorm.Config{Logger: gormLogger}) + db, err = gorm.Open(config.Db.GetDialector(), &gorm.Config{Logger: gormLogger}, conf.GetWakapiDBOpts(&config.Db)) if err != nil { logbuch.Error(err.Error()) logbuch.Fatal("could not open database") } - if config.Db.IsSQLite() { - db.Exec("PRAGMA foreign_keys = ON;") - } if config.IsDev() { db = db.Debug() diff --git a/models/summary.go b/models/summary.go index 8d2effe..ce38fd1 100644 --- a/models/summary.go +++ b/models/summary.go @@ -34,7 +34,7 @@ type Summary struct { Machines SummaryItems `json:"machines" gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` Labels SummaryItems `json:"labels" gorm:"-"` // labels are not persisted, but calculated at runtime, i.e. when summary is retrieved Branches SummaryItems `json:"branches" gorm:"-"` // branches are not persisted, but calculated at runtime in case a project filter is applied - NumHeartbeats int `json:"-" gorm:"default:0"` + NumHeartbeats int `json:"-"` } type SummaryItems []*SummaryItem diff --git a/models/user.go b/models/user.go index 3dd2d0f..5377b32 100644 --- a/models/user.go +++ b/models/user.go @@ -20,7 +20,7 @@ type User struct { Password string `json:"-"` CreatedAt CustomTime `gorm:"type:timestamp; default:CURRENT_TIMESTAMP" swaggertype:"string" format:"date" example:"2006-01-02 15:04:05.000"` LastLoggedInAt CustomTime `gorm:"type:timestamp; default:CURRENT_TIMESTAMP" swaggertype:"string" format:"date" example:"2006-01-02 15:04:05.000"` - ShareDataMaxDays int `json:"-" gorm:"default:0"` + ShareDataMaxDays int `json:"-"` ShareEditors bool `json:"-" gorm:"default:false; type:bool"` ShareLanguages bool `json:"-" gorm:"default:false; type:bool"` ShareProjects bool `json:"-" gorm:"default:false; type:bool"`