Documentation
¶
Overview ¶
* @Author: kamalyes 501893067@qq.com * @Date: 2025-11-11 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-11-23 13:05:48 * @FilePath: \go-toolbox\pkg\sqlbuilder\db\handler.go * @Description: 数据库处理器 - Handler 接口和 GORM 实现 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-11-30 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-11-30 09:01:19 * @FilePath: \go-toolbox\pkg\sqlbuilder\db\migrator.go * @Description: 通用数据库迁移器 - 支持自动迁移、索引创建、表注释 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
Index ¶
- func QuickAutoMigrate(db *gorm.DB, config *MigratorConfig) error
- func QuickMigrate(db *gorm.DB, models ...interface{}) error
- type ClickHouseTableDefinition
- type ColumnComment
- type GormHandler
- type Handler
- type IndexDefinition
- type Migrator
- func (m *Migrator) AddComments() error
- func (m *Migrator) AutoMigrate() error
- func (m *Migrator) CheckTablesExist(tables ...string) map[string]bool
- func (m *Migrator) CheckTablesExistWithModels(models ...interface{}) map[string]bool
- func (m *Migrator) CreateIndexes() error
- func (m *Migrator) DropTables(tables ...string) error
- func (m *Migrator) DropTablesWithModels(models ...interface{}) error
- func (m *Migrator) GetTableName(model interface{}) string
- func (m *Migrator) HasTable(table string) bool
- func (m *Migrator) HasTableWithModel(model interface{}) bool
- func (m *Migrator) MigrateMergeTreeTables() error
- func (m *Migrator) MigrateModels() error
- func (m *Migrator) SyncColumnComments(models ...interface{}) error
- func (m *Migrator) SyncColumnCommentsWithModels() error
- type MigratorConfig
- type TableComment
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func QuickAutoMigrate ¶
func QuickAutoMigrate(db *gorm.DB, config *MigratorConfig) error
QuickAutoMigrate 快速完整迁移
func QuickMigrate ¶
QuickMigrate 快速迁移(仅模型,无索引和注释)
Types ¶
type ClickHouseTableDefinition ¶
type ClickHouseTableDefinition struct {
TableName string // 表名(为空时从 Model 推断)
Columns string // 列定义 SQL 片段(不含外层括号,为空时从 Model 自动生成)
Model interface{} // GORM 模型(Columns 为空时从模型 tag 自动生成列定义,TableName 为空时从模型推断)
ColumnOverrides map[string]string // 列类型覆盖:字段名→ClickHouse 类型(优先级最高,用于 kind→LowCardinality(String) 等 CH 专属优化)
OrderBy string // ORDER BY 表达式(必填,MergeTree 引擎要求)
PartitionBy string // PARTITION BY 表达式(可选)
TTL string // TTL 表达式(可选)
Comment string // 表注释(可选)
}
ClickHouseTableDefinition ClickHouse MergeTree 建表定义 用于在 ClickHouse 上创建 MergeTree 引擎表,支持分区、排序、TTL、列覆盖与表注释
type ColumnComment ¶
type ColumnComment struct {
Table string // 表名
Column string // 列名
Comment string // 注释内容
Type string // 列类型(MySQL 需要)
}
ColumnComment 列注释定义
type GormHandler ¶
type GormHandler struct {
// contains filtered or unexported fields
}
GormHandler 标准 GORM 处理器实现
type Handler ¶
type Handler interface {
// GetDB 返回 GORM 数据库实例
GetDB() *gorm.DB
// IsConnected 检查数据库连接是否有效
IsConnected() bool
}
Handler 数据库处理器接口 所有 Repository 都基于这个接口工作,提供统一的数据库访问抽象
func MustNewGormHandler ¶
MustNewGormHandler 创建 GORM 处理器(panic 版本) 仅在确定 db 不为 nil 时使用,通常用于初始化阶段
type IndexDefinition ¶
type IndexDefinition struct {
Table string // 表名
Name string // 索引名(可选,为空时自动生成)
Columns string // 列定义(如 "(col1, col2)" 或 "col1 DESC")
Unique bool // 是否唯一索引
// ClickHouse 特有参数
ClickHouseType string // ClickHouse 索引类型(如 bloom_filter, minmax, set 等),默认 bloom_filter
ClickHouseGranularity int // ClickHouse 索引粒度,默认 1
// 覆盖索引/部分索引参数(TiDB、PostgreSQL 等支持)
Storing []string // STORING 子句列列表(覆盖索引,将附加列存入索引避免回表)
Where string // WHERE 条件(部分索引,仅索引满足条件的行)
// contains filtered or unexported fields
}
IndexDefinition 索引定义
func NewIndex ¶
func NewIndex(table string, columns ...string) IndexDefinition
NewIndex 创建普通索引定义(自动生成索引名) 示例: NewIndex("users", "email") => idx_users_email 示例: NewIndex("users", "user_id", "status") => idx_users_user_id_status
func NewIndexDesc ¶
func NewIndexDesc(table string, columns ...string) IndexDefinition
NewIndexDesc 创建带降序的索引定义 示例: NewIndexDesc("messages", "created_at") => INDEX idx_messages_created_at ON messages (created_at DESC)
func NewIndexWithName ¶
func NewIndexWithName(table, name, columns string, unique bool) IndexDefinition
NewIndexWithName 创建带自定义名称的索引定义
func NewUniqueIndex ¶
func NewUniqueIndex(table string, columns ...string) IndexDefinition
NewUniqueIndex 创建唯一索引定义(自动生成索引名) 示例: NewUniqueIndex("users", "email") => idx_users_email_unique
func (*IndexDefinition) GenerateIndexName ¶
func (idx *IndexDefinition) GenerateIndexName() string
GenerateIndexName 根据命名规范自动生成索引名 规范:idx_{表名}_{列名} 或 idx_{表名}_{列1}_{列2}_unique
func (IndexDefinition) WithStoring ¶
func (idx IndexDefinition) WithStoring(columns ...string) IndexDefinition
WithStoring 设置覆盖索引的 STORING 列(TiDB/PostgreSQL) 示例: NewIndex("t", "a").WithStoring("b", "c") => CREATE INDEX ... STORING (b, c)
func (IndexDefinition) WithWhere ¶
func (idx IndexDefinition) WithWhere(condition string) IndexDefinition
WithWhere 设置部分索引的 WHERE 条件 示例: NewIndex("t", "a").WithWhere("status = 3") => CREATE INDEX ... WHERE status = 3
type Migrator ¶
type Migrator struct {
// contains filtered or unexported fields
}
Migrator 数据库迁移器
func NewMigrator ¶
func NewMigrator(db *gorm.DB, config *MigratorConfig) *Migrator
NewMigrator 创建迁移器
func (*Migrator) AutoMigrate ¶
AutoMigrate 执行完整的自动迁移(表结构 + 索引 + 注释 + ClickHouse MergeTree 表)
func (*Migrator) CheckTablesExist ¶
CheckTablesExist 检查表是否存在 优先用单条 SQL 批量查询,避免 N 次 HasTable 往返;不支持的 dialector 回退到逐张检查
func (*Migrator) CheckTablesExistWithModels ¶
CheckTablesExistWithModels 根据模型检查表是否存在
func (*Migrator) DropTables ¶
DropTables 删除指定的表(危险操作) MySQL/PostgreSQL/ClickHouse 支持 DROP TABLE IF EXISTS t1, t2, t3 语法, 用一条 SQL 替代 N 次往返;SQLite 及其它 dialector 回退到逐张删除
func (*Migrator) DropTablesWithModels ¶
DropTablesWithModels 根据模型删除表(危险操作) 自动从模型中获取表名,支持 TableName() 方法
func (*Migrator) GetTableName ¶
GetTableName 获取模型对应的表名
func (*Migrator) HasTableWithModel ¶
HasTableWithModel 根据模型检查表是否存在
func (*Migrator) MigrateMergeTreeTables ¶
MigrateMergeTreeTables 创建所有 ClickHouse MergeTree 表 仅在 ClickHouse 方言下生效,其它方言直接跳过(便于在统一配置中携带定义而不报错)
func (*Migrator) SyncColumnComments ¶
SyncColumnComments 同步模型字段注释到数据库 检查所有字段的注释是否与 Model 中定义的一致,不一致则更新
func (*Migrator) SyncColumnCommentsWithModels ¶
SyncColumnCommentsWithModels 同步配置中所有模型的字段注释
type MigratorConfig ¶
type MigratorConfig struct {
// Models 需要迁移的模型列表
Models []interface{}
// Indexes 需要创建的索引列表
Indexes []IndexDefinition
// Comments 表注释列表
Comments []TableComment
// MergeTreeTables ClickHouse MergeTree 表定义列表(仅在 ClickHouse 方言下生效)
MergeTreeTables []ClickHouseTableDefinition
// Logger 日志记录器(可选,默认使用 go-toolbox/pkg/logger 创建新实例)
Logger logger.ILogger
// SkipIndexOnError 索引创建失败时是否跳过(默认 true)
SkipIndexOnError bool
// SkipCommentOnError 注释添加失败时是否跳过(默认 true)
SkipCommentOnError bool
// SkipMergeTreeOnError MergeTree 建表失败时是否跳过(默认 true)
SkipMergeTreeOnError bool
}
MigratorConfig 迁移器配置
type TableComment ¶
TableComment 表注释定义