dbtool

package
v1.2.0 Latest Latest
Warning

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

Go to latest
Published: Apr 16, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Overview

Package dbtool 提供独立的数据库调试工具模式, 通过加载 .pb (FileDescriptorSet) 文件发现所有 database_table 消息, 连接 Redis 并以可读方式打印数据。

protobuf.go 不依赖任何具体的 proto 扩展定义(如 database_table_options), 所有表索引的提取逻辑由业务方通过 TableExtractor 接口注入。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterDatabaseTableExtractor

func RegisterDatabaseTableExtractor(extractor TableExtractor)

func RegisterFlags

func RegisterFlags(flagSet *flag.FlagSet)

RegisterFlags 注册 dbtool 模式需要的 flag

func Start

func Start(flagSet *flag.FlagSet)

启动 dbtool

Types

type IndexType

type IndexType int32

IndexType 数据库索引类型

const (
	IndexTypeKV        IndexType = 0 // Key-Value
	IndexTypeKL        IndexType = 1 // Key-List
	IndexTypeSortedSet IndexType = 2 // Sorted Set
)

func (IndexType) String

func (t IndexType) String() string

type Querier

type Querier struct {
	// contains filtered or unexported fields
}

Querier 负责从 Redis 读取数据库表数据并格式化输出

func NewQuerier

func NewQuerier(client redis_interface.RedisClient, registry *Registry, recordPrefix string) *Querier

NewQuerier 创建查询器

func (*Querier) BuildRedisKey

func (q *Querier) BuildRedisKey(index *TableIndex, keyValues []string) string

BuildRedisKey 根据 table index 和 key values 构建 Redis key

func (*Querier) QueryKL

func (q *Querier) QueryKL(info *TableInfo, index *TableIndex, keyValues []string, listIndex int64) (string, error)

QueryKL 查询 KL (Key-List) 类型表

func (*Querier) QueryKV

func (q *Querier) QueryKV(info *TableInfo, index *TableIndex, keyValues []string) (string, error)

QueryKV 查询 KV 类型表

func (*Querier) QuerySortedSetByRank

func (q *Querier) QuerySortedSetByRank(index *TableIndex, keyValues []string, start, stop int64, reverse bool) (string, error)

QuerySortedSetByRank 按排名范围查询 SORTED_SET

func (*Querier) QuerySortedSetByScore

func (q *Querier) QuerySortedSetByScore(index *TableIndex, keyValues []string, min, max string, offset, count int64, reverse bool) (string, error)

QuerySortedSetByScore 按分数范围查询 SORTED_SET

func (*Querier) QuerySortedSetCount

func (q *Querier) QuerySortedSetCount(index *TableIndex, keyValues []string) (string, error)

QuerySortedSetCount 查询 SORTED_SET 数据量

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry 管理所有发现的数据库表消息

func NewRegistry

func NewRegistry(extractor TableExtractor) *Registry

NewRegistry 创建注册表。extractor 不能为 nil,由业务方提供具体实现。

func (*Registry) FindTableByShortName

func (r *Registry) FindTableByShortName(shortName string) *TableInfo

FindTableByShortName 按 message 短名查找(不含包名)

func (*Registry) GetAllTables

func (r *Registry) GetAllTables() []*TableInfo

GetAllTables 返回所有已发现的表信息列表(按 message 名排序)

func (*Registry) GetTable

func (r *Registry) GetTable(fullName string) *TableInfo

GetTable 按 message full name 获取表信息

func (*Registry) GetTableNames

func (r *Registry) GetTableNames() []string

GetTableNames 返回所有表的 message 名(短名,不含包名)

func (*Registry) LoadPBFile

func (r *Registry) LoadPBFile(pbFilePath string) error

LoadPBFile 加载 .pb (FileDescriptorSet) 文件并发现所有 database_table 消息

func (*Registry) NewDynamicMessage

func (r *Registry) NewDynamicMessage(info *TableInfo) *dynamicpb.Message

NewDynamicMessage 创建指定表的动态 proto message 实例

type Shell

type Shell struct {
	// contains filtered or unexported fields
}

Shell 提供 dbtool 的交互式命令行界面

func NewShell

func NewShell(querier *Querier, registry *Registry) *Shell

NewShell 创建交互式 Shell

func (*Shell) Run

func (s *Shell) Run() error

Run 启动交互式 readline 循环

type TableExtractor

type TableExtractor interface {
	// ExtractTableIndexes 检查 message 是否包含数据库表配置,
	// 如果有则返回索引列表,否则返回 nil。
	ExtractTableIndexes(md protoreflect.MessageDescriptor) []TableIndex
}

TableExtractor 从 protobuf MessageDescriptor 中提取数据库表索引配置的抽象接口。 业务方实现此接口以支持不同的 proto 扩展约定。

type TableIndex

type TableIndex struct {
	Name          string
	Type          IndexType
	EnableCAS     bool
	MaxListLength uint32
	KeyFields     []string
}

TableIndex 描述一个数据库表索引

type TableInfo

type TableInfo struct {
	MessageFullName protoreflect.FullName
	MessageDesc     protoreflect.MessageDescriptor
	Indexes         []TableIndex
}

TableInfo 描述一个包含数据库表配置的 proto message

Jump to

Keyboard shortcuts

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