Dashboard tags: add dashboard_uid and org_id (#98500)
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
. "github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
func addDashboardMigration(mg *Migrator) {
|
||||
@@ -244,4 +247,56 @@ func addDashboardMigration(mg *Migrator) {
|
||||
Cols: []string{"deleted"},
|
||||
Type: IndexType,
|
||||
}))
|
||||
|
||||
mg.AddMigration("Add column dashboard_uid in dashboard_tag", NewAddColumnMigration(dashboardTagV1, &Column{
|
||||
Name: "dashboard_uid", Type: DB_NVarchar, Length: 40, Nullable: true,
|
||||
}))
|
||||
mg.AddMigration("Add column org_id in dashboard_tag", NewAddColumnMigration(dashboardTagV1, &Column{
|
||||
Name: "org_id", Type: DB_BigInt, Nullable: true, Default: "1",
|
||||
}))
|
||||
|
||||
mg.AddMigration("Add missing dashboard_uid and org_id to dashboard_tag", &FillDashbordUIDAndOrgIDMigration{})
|
||||
}
|
||||
|
||||
type FillDashbordUIDAndOrgIDMigration struct {
|
||||
MigrationBase
|
||||
}
|
||||
|
||||
func (m *FillDashbordUIDAndOrgIDMigration) SQL(dialect Dialect) string {
|
||||
return "code migration"
|
||||
}
|
||||
|
||||
func (m *FillDashbordUIDAndOrgIDMigration) Exec(sess *xorm.Session, mg *Migrator) error {
|
||||
return RunDashboardTagMigrations(sess, mg.Dialect.DriverName())
|
||||
}
|
||||
|
||||
func RunDashboardTagMigrations(sess *xorm.Session, driverName string) error {
|
||||
// sqlite
|
||||
sql := `UPDATE dashboard_tag
|
||||
SET
|
||||
dashboard_uid = (SELECT uid FROM dashboard WHERE dashboard.id = dashboard_tag.dashboard_id),
|
||||
org_id = (SELECT org_id FROM dashboard WHERE dashboard.id = dashboard_tag.dashboard_id)
|
||||
WHERE
|
||||
(dashboard_uid IS NULL OR org_id IS NULL)
|
||||
AND EXISTS (SELECT 1 FROM dashboard WHERE dashboard.id = dashboard_tag.dashboard_id);`
|
||||
if driverName == Postgres {
|
||||
sql = `UPDATE dashboard_tag
|
||||
SET dashboard_uid = dashboard.uid,
|
||||
org_id = dashboard.org_id
|
||||
FROM dashboard
|
||||
WHERE dashboard_tag.dashboard_id = dashboard.id
|
||||
AND (dashboard_tag.dashboard_uid IS NULL OR dashboard_tag.org_id IS NULL);`
|
||||
} else if driverName == MySQL {
|
||||
sql = `UPDATE dashboard_tag
|
||||
LEFT JOIN dashboard ON dashboard_tag.dashboard_id = dashboard.id
|
||||
SET dashboard_tag.dashboard_uid = dashboard.uid,
|
||||
dashboard_tag.org_id = dashboard.org_id
|
||||
WHERE dashboard_tag.dashboard_uid IS NULL OR dashboard_tag.org_id IS NULL;`
|
||||
}
|
||||
|
||||
if _, err := sess.Exec(sql); err != nil {
|
||||
return fmt.Errorf("failed to set dashboard_uid and org_id in dashboard_tag: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user