Files
grafana/pkg/services/sqlstore/migrator/conditions.go
T
Will Assis 545b7bf8ff fix: file and file_meta migrations (#112611)
* fix file and file_meta migrations to check the database state to decide which migration to run
2025-10-21 12:46:32 -04:00

74 lines
1.8 KiB
Go

package migrator
type MigrationCondition interface {
SQL(dialect Dialect) (string, []interface{})
IsFulfilled(results []map[string][]byte) bool
}
type ExistsMigrationCondition struct{}
func (c *ExistsMigrationCondition) IsFulfilled(results []map[string][]byte) bool {
return len(results) >= 1
}
type NotExistsMigrationCondition struct{}
func (c *NotExistsMigrationCondition) IsFulfilled(results []map[string][]byte) bool {
return len(results) == 0
}
type IfIndexExistsCondition struct {
ExistsMigrationCondition
TableName string
IndexName string
}
func (c *IfIndexExistsCondition) SQL(dialect Dialect) (string, []interface{}) {
return dialect.IndexCheckSQL(c.TableName, c.IndexName)
}
type IfIndexNotExistsCondition struct {
NotExistsMigrationCondition
TableName string
IndexName string
}
func (c *IfIndexNotExistsCondition) SQL(dialect Dialect) (string, []interface{}) {
return dialect.IndexCheckSQL(c.TableName, c.IndexName)
}
type IfColumnNotExistsCondition struct {
NotExistsMigrationCondition
TableName string
ColumnName string
}
func (c *IfColumnNotExistsCondition) SQL(dialect Dialect) (string, []interface{}) {
return dialect.ColumnCheckSQL(c.TableName, c.ColumnName)
}
type IfColumnExistsCondition struct {
ExistsMigrationCondition
TableName string
ColumnName string
}
func (c *IfColumnExistsCondition) SQL(dialect Dialect) (string, []interface{}) {
return dialect.ColumnCheckSQL(c.TableName, c.ColumnName)
}
type IfPrimaryKeyNotExistsCondition struct {
NotExistsMigrationCondition
TableName string
ColumnName string
}
func (c *IfPrimaryKeyNotExistsCondition) SQL(dialect Dialect) (string, []interface{}) {
// only use it with mysql
if dialect.DriverName() == "mysql" {
return "SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME=? AND COLUMN_KEY='PRI'", []interface{}{c.TableName}
}
return "", nil
}