Documentation
¶
Index ¶
- Constants
- Variables
- func Registration(driverName string, getter Getter)
- type Client
- type Config
- type Getter
- type Limiter
- func (l *Limiter) Close() error
- func (l *Limiter) Exec(s string, i ...interface{}) (sql.Result, error)
- func (l *Limiter) ExecContext(ctx context.Context, s string, i ...interface{}) (sql.Result, error)
- func (l *Limiter) Name() string
- func (l *Limiter) Process(ctx context.Context) error
- func (l *Limiter) Query(s string, i ...interface{}) (*sql.Rows, error)
- func (l *Limiter) QueryContext(ctx context.Context, s string, i ...interface{}) (*sql.Rows, error)
- func (l *Limiter) QueryRow(s string, i ...interface{}) *sql.Row
- func (l *Limiter) QueryRowContext(ctx context.Context, s string, i ...interface{}) *sql.Row
- type Logger
- func (l *Logger) Close() error
- func (l *Logger) Exec(s string, i ...interface{}) (sql.Result, error)
- func (l *Logger) ExecContext(ctx context.Context, s string, i ...interface{}) (sql.Result, error)
- func (l *Logger) Query(s string, i ...interface{}) (*sql.Rows, error)
- func (l *Logger) QueryContext(ctx context.Context, s string, i ...interface{}) (*sql.Rows, error)
- func (l *Logger) QueryRow(s string, i ...interface{}) *sql.Row
- func (l *Logger) QueryRowContext(ctx context.Context, s string, i ...interface{}) *sql.Row
Constants ¶
const DriverFieldName = "db.driver"
DriverFieldName — имя поля для драйвера БД.
Variables ¶
var Component = compogo.Component{ Init: compogo.StepFunc(func(container compogo.Container) error { return container.Provides( NewConfig, NewClient, ) }), BindFlags: compogo.BindFlags(func(flagSet flag.FlagSet, container compogo.Container) error { return container.Invoke(func(config *Config) { allDrivers := drivers.Keys() if len(allDrivers) == 1 { DriverDefault = allDrivers[0] } flagSet.StringVar(&config.Driver, DriverFieldName, DriverDefault, fmt.Sprintf("db client driver. Available drivers: [%s]", strings.Join(allDrivers, ","))) }) }), Configuration: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(Configuration) }), Stop: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(func(c Client) error { return c.Close() }) }), }
Component — компонент клиента БД для Compogo. Регистрирует конфигурацию и клиент в DI-контейнере.
Пример подключения:
app.AddComponents(&db_client.Component)
var client db_client.Client
container.Invoke(func(c db_client.Client) { client = c })
rows, err := client.Query("SELECT * FROM users")
var DriverDefault = ""
DriverDefault — драйвер по умолчанию (пустая строка, требует явного указания).
Functions ¶
func Registration ¶
Registration регистрирует драйвер БД. Должна вызываться в init() каждого пакета драйвера.
Пример регистрации MySQL-драйвера:
func init() {
db_client.Registration("mysql", func(container compogo.Container) (db_client.Client, error) {
var config *mysql.Config
container.Invoke(func(c *mysql.Config) { config = c })
return mysql.NewClient(config)
})
}
Types ¶
type Client ¶
type Client interface {
io.Closer
Query(string, ...interface{}) (*sql.Rows, error)
QueryRow(string, ...interface{}) *sql.Row
Exec(string, ...interface{}) (sql.Result, error)
QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
QueryRowContext(context.Context, string, ...interface{}) *sql.Row
ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
SQL() *sql.DB
DriverName() string
}
Client — интерфейс для работы с БД. Объединяет стандартные методы database/sql с поддержкой контекста.
Поддерживает:
- Выполнение запросов (Query, QueryRow, Exec)
- Контекстные версии (QueryContext, QueryRowContext, ExecContext)
- Доступ к *sql.DB для низкоуровневых операций
- Graceful shutdown через io.Closer
type Config ¶
type Config struct {
Driver string
}
Config содержит конфигурацию клиента БД.
func Configuration ¶
func Configuration(config *Config, configurator compogo.Configurator) (*Config, error)
Configuration загружает конфигурацию из Configurator. Проверяет, что драйвер указан и зарегистрирован.
type Getter ¶
Getter — фабричная функция для создания клиента БД. Принимает DI-контейнер для получения зависимостей драйвера.
type Limiter ¶
type Limiter struct {
Client
// contains filtered or unexported fields
}
Limiter — обёртка над Client с ограничением на количество ошибок соединения. При превышении лимита ошибок (соединений) переходит в режим ожидания.
Используется для защиты БД от "штурма" недоступным соединением.
func NewLimiter ¶
NewLimiter создаёт новый Limiter.
func (*Limiter) ExecContext ¶
func (*Limiter) QueryContext ¶
type Logger ¶
type Logger struct {
Client
// contains filtered or unexported fields
}
Logger — обёртка над Client с логированием всех запросов. Логирует на уровне Debug все SQL-запросы и их аргументы.