* Revert "chore: add replDB to team service (#91799)" This reverts commitc6ae2d7999. * Revert "experiment: use read replica for Get and Find Dashboards (#91706)" This reverts commit54177ca619. * Revert "QuotaService: refactor to use ReplDB for Get queries (#91333)" This reverts commit299c142f6a. * Revert "refactor replCfg to look more like plugins/plugin config (#91142)" This reverts commitac0b4bb34d. * Revert "chore (replstore): fix registration with multiple sql drivers, again (#90990)" This reverts commitdaedb358dd. * Revert "Chore (sqlstore): add validation and testing for repl config (#90683)" This reverts commitaf19f039b6. * Revert "ReplStore: Add support for round robin load balancing between multiple read replicas (#90530)" This reverts commit27b52b1507. * Revert "DashboardStore: Use ReplDB and get dashboard quotas from the ReadReplica (#90235)" This reverts commit8a6107cd35. * Revert "accesscontrol service read replica (#89963)" This reverts commit77a4869fca. * Revert "Fix: add mapping for the new mysqlRepl driver (#89551)" This reverts commitab5a079bcc. * Revert "fix: sql instrumentation dual registration error (#89508)" This reverts commitd988f5c3b0. * Revert "Experimental Feature Toggle: databaseReadReplica (#89232)" This reverts commit50244ed4a1.
97 lines
3.4 KiB
Go
97 lines
3.4 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"xorm.io/core"
|
|
"xorm.io/xorm"
|
|
|
|
"github.com/grafana/grafana/pkg/services/sqlstore"
|
|
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
|
"github.com/grafana/grafana/pkg/services/sqlstore/session"
|
|
"github.com/grafana/grafana/pkg/services/sqlstore/sqlutil"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
type DB interface {
|
|
// WithTransactionalDbSession creates a new SQL transaction to ensure consistency
|
|
// for the database operations done within the [sqlstore.DBTransactionFunc].
|
|
// It's better to combine InTransaction and WithDbSession instead, as the context
|
|
// variable is not updated when using this method.
|
|
WithTransactionalDbSession(ctx context.Context, callback sqlstore.DBTransactionFunc) error
|
|
// WithDbSession runs database operations either in an existing transaction available
|
|
// through [context.Context] or if that's not present, as non-transactional database
|
|
// operations.
|
|
WithDbSession(ctx context.Context, callback sqlstore.DBTransactionFunc) error
|
|
// GetDialect returns an object that contains information about the peculiarities of
|
|
// the particular database type available to the runtime.
|
|
GetDialect() migrator.Dialect
|
|
// GetDBType returns the name of the database type available to the runtime.
|
|
GetDBType() core.DbType
|
|
// GetEngine returns the underlying xorm engine.
|
|
GetEngine() *xorm.Engine
|
|
// GetSqlxSession is an experimental extension to use sqlx instead of xorm to
|
|
// communicate with the database.
|
|
// NOTE: when using this session with mysql, the connection will *not* have:
|
|
// the expected parameters: "&sql_mode='ANSI_QUOTES" and "&parseTime=true"
|
|
// The sqlx session is useful, but be careful not to expect automagic date parsing
|
|
GetSqlxSession() *session.SessionDB
|
|
// InTransaction creates a new SQL transaction that is placed on the context.
|
|
// Use together with [DB.WithDbSession] to run database operations.
|
|
InTransaction(ctx context.Context, fn func(ctx context.Context) error) error
|
|
// Quote wraps an identifier so that it cannot be mistaken for an SQL keyword.
|
|
Quote(value string) string
|
|
// RecursiveQueriesAreSupported runs a dummy recursive query and it returns true
|
|
// if the query runs successfully or false if it fails with mysqlerr.ER_PARSE_ERROR error or any other error
|
|
RecursiveQueriesAreSupported() (bool, error)
|
|
}
|
|
|
|
type Session = sqlstore.DBSession
|
|
type InitTestDBOpt = sqlstore.InitTestDBOpt
|
|
|
|
var SetupTestDB = sqlstore.SetupTestDB
|
|
var CleanupTestDB = sqlstore.CleanupTestDB
|
|
var ProvideService = sqlstore.ProvideService
|
|
|
|
func InitTestDB(t sqlutil.ITestDB, opts ...InitTestDBOpt) *sqlstore.SQLStore {
|
|
db, _ := InitTestDBWithCfg(t, opts...)
|
|
return db
|
|
}
|
|
|
|
func InitTestDBWithCfg(t sqlutil.ITestDB, opts ...InitTestDBOpt) (*sqlstore.SQLStore, *setting.Cfg) {
|
|
return sqlstore.InitTestDB(t, opts...)
|
|
}
|
|
|
|
func IsTestDbSQLite() bool {
|
|
if db, present := os.LookupEnv("GRAFANA_TEST_DB"); !present || db == "sqlite" {
|
|
return true
|
|
}
|
|
|
|
return !IsTestDbMySQL() && !IsTestDbPostgres()
|
|
}
|
|
|
|
func IsTestDbMySQL() bool {
|
|
if db, present := os.LookupEnv("GRAFANA_TEST_DB"); present {
|
|
return db == migrator.MySQL
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func IsTestDbPostgres() bool {
|
|
if db, present := os.LookupEnv("GRAFANA_TEST_DB"); present {
|
|
return db == migrator.Postgres
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func IsTestDBMSSQL() bool {
|
|
if db, present := os.LookupEnv("GRAFANA_TEST_DB"); present {
|
|
return db == migrator.MSSQL
|
|
}
|
|
|
|
return false
|
|
}
|