db

package
v0.19.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 1, 2026 License: Apache-2.0, Apache-2.0 Imports: 9 Imported by: 0

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

Constants

This section is empty.

Variables

This section is empty.

Functions

func QuickAutoMigrate

func QuickAutoMigrate(db *gorm.DB, config *MigratorConfig) error

QuickAutoMigrate 快速完整迁移

func QuickMigrate

func QuickMigrate(db *gorm.DB, models ...interface{}) error

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 处理器实现

func (*GormHandler) GetDB

func (h *GormHandler) GetDB() *gorm.DB

DB 返回底层 GORM 实例

func (*GormHandler) IsConnected

func (h *GormHandler) IsConnected() bool

IsConnected 检查数据库连接是否有效

type Handler

type Handler interface {
	// GetDB 返回 GORM 数据库实例
	GetDB() *gorm.DB

	// IsConnected 检查数据库连接是否有效
	IsConnected() bool
}

Handler 数据库处理器接口 所有 Repository 都基于这个接口工作,提供统一的数据库访问抽象

func MustNewGormHandler

func MustNewGormHandler(db *gorm.DB) Handler

MustNewGormHandler 创建 GORM 处理器(panic 版本) 仅在确定 db 不为 nil 时使用,通常用于初始化阶段

func NewGormHandler

func NewGormHandler(db *gorm.DB) (Handler, error)

NewGormHandler 创建 GORM 处理器 返回 Handler 接口和可能的错误

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) AddComments

func (m *Migrator) AddComments() error

AddComments 添加所有表注释

func (*Migrator) AutoMigrate

func (m *Migrator) AutoMigrate() error

AutoMigrate 执行完整的自动迁移(表结构 + 索引 + 注释 + ClickHouse MergeTree 表)

func (*Migrator) CheckTablesExist

func (m *Migrator) CheckTablesExist(tables ...string) map[string]bool

CheckTablesExist 检查表是否存在 优先用单条 SQL 批量查询,避免 N 次 HasTable 往返;不支持的 dialector 回退到逐张检查

func (*Migrator) CheckTablesExistWithModels

func (m *Migrator) CheckTablesExistWithModels(models ...interface{}) map[string]bool

CheckTablesExistWithModels 根据模型检查表是否存在

func (*Migrator) CreateIndexes

func (m *Migrator) CreateIndexes() error

CreateIndexes 创建所有定义的索引

func (*Migrator) DropTables

func (m *Migrator) DropTables(tables ...string) error

DropTables 删除指定的表(危险操作) MySQL/PostgreSQL/ClickHouse 支持 DROP TABLE IF EXISTS t1, t2, t3 语法, 用一条 SQL 替代 N 次往返;SQLite 及其它 dialector 回退到逐张删除

func (*Migrator) DropTablesWithModels

func (m *Migrator) DropTablesWithModels(models ...interface{}) error

DropTablesWithModels 根据模型删除表(危险操作) 自动从模型中获取表名,支持 TableName() 方法

func (*Migrator) GetTableName

func (m *Migrator) GetTableName(model interface{}) string

GetTableName 获取模型对应的表名

func (*Migrator) HasTable

func (m *Migrator) HasTable(table string) bool

HasTable 检查单个表是否存在

func (*Migrator) HasTableWithModel

func (m *Migrator) HasTableWithModel(model interface{}) bool

HasTableWithModel 根据模型检查表是否存在

func (*Migrator) MigrateMergeTreeTables

func (m *Migrator) MigrateMergeTreeTables() error

MigrateMergeTreeTables 创建所有 ClickHouse MergeTree 表 仅在 ClickHouse 方言下生效,其它方言直接跳过(便于在统一配置中携带定义而不报错)

func (*Migrator) MigrateModels

func (m *Migrator) MigrateModels() error

MigrateModels 仅迁移模型表结构

func (*Migrator) SyncColumnComments

func (m *Migrator) SyncColumnComments(models ...interface{}) error

SyncColumnComments 同步模型字段注释到数据库 检查所有字段的注释是否与 Model 中定义的一致,不一致则更新

func (*Migrator) SyncColumnCommentsWithModels

func (m *Migrator) SyncColumnCommentsWithModels() error

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

type TableComment struct {
	Table   string // 表名
	Comment string // 注释内容
}

TableComment 表注释定义

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL