Help us shape the future of Go! Take the 2026 Go Developer Survey

store

package
v1.8.0 Latest Latest
Warning

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

Go to latest
Published: Sep 11, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Overview

Package store 存储领域:领域模型(值对象)+ 存储接口 + SQLite 实现 + 自动迁移。

本包是唯一接触数据库(cydb DBCli)的领域,service 等上层只依赖 Store 接口与 本包的领域模型(通过类型别名引用)。未来切换 MySQL 等数据库只需修改本包实现。

分层约定:

  • types.go 领域模型(值对象,json tag),供业务层与 JSON 序列化使用;
  • models.go DB 行模型(cydb tag),用于 AutoMigrate 建表与列映射;
  • store.go Store 接口;
  • sqlite.go SQLite 实现(cydb DBCli + ss 构建器 + named bind);
  • migrate.go 统一迁移入口(遍历 allModels);
  • crypto.go 列级敏感字段加密(连接密码)。

Index

Constants

View Source
const (
	ResetNone     = engine.ResetNone
	ResetTruncate = engine.ResetTruncate
	ResetDrop     = engine.ResetDrop
	// FormatSQL / FormatJSON 导出产物格式(ExportOptions.Format)
	FormatSQL  = engine.FormatSQL
	FormatJSON = engine.FormatJSON
)

重置模式常量

View Source
const DBFileName = "dqex.db"

DBFileName SQLite 数据库文件名(位于数据根目录)。

Variables

View Source
var SupportedDBTypes = map[string][]string{
	"mysql":      {"mysql", "oceanbase", "mariadb"},
	"postgresql": {"postgresql", "gaussdb", "kingbase"},
	"oracle":     {"oracle", "dameng"},
}

SupportedDBTypes 支持的数据库类型及子类型。 SubType 不代表版本号,而是标识“使用该类型兼容模式的具体数据库产品”(彼此存在语法差异): 首项为原生标准库(值等于类型名),其余为兼容库产品。

Functions

func DefaultDBPath

func DefaultDBPath(baseDir string) string

DefaultDBPath 返回数据根目录下的默认 SQLite 库路径。

Types

type AISessionRecord

type AISessionRecord struct {
	ID        string `json:"id"`        // 会话 ID
	ConnID    string `json:"connId"`    // 所属连接
	TabID     string `json:"tabId"`     // 所属 query tab(按 tab 隔离对话;空 = 不隔离)
	DB        string `json:"db"`        // 目标库名
	Dialect   string `json:"dialect"`   // 方言标签
	Lang      string `json:"lang"`      // 会话语言(恢复时沿用,历史会话不回溯)
	Messages  []any  `json:"messages"`  // 对话消息(schema.Message 序列化,含 system/user/assistant/tool)
	Usage     any    `json:"usage"`     // 累计 token(llm.Usage)
	CreatedAt int64  `json:"createdAt"` // Unix 毫秒
	UpdatedAt int64  `json:"updatedAt"` // Unix 毫秒(每次对话更新,用于过期判定)
}

AISessionRecord AI 会话持久化记录:绑定连接+库,整组对话消息 JSON 序列化存储。 会话消息体量小(单会话上限 aiMaxMessages 条),整组覆盖写,无需逐条建表; UpdatedAt 用于过期清理(按空闲时间回收过期会话)。

type CompareOptions

type CompareOptions = engine.CompareOptions

CompareOptions 对比选项

type CompareResult

type CompareResult = engine.CompareResult

CompareResult 对比结果

type ConnInfo

type ConnInfo struct {
	ID        string     `json:"id"`
	Name      string     `json:"name"`
	ShortName string     `json:"shortName,omitempty"`
	Env       string     `json:"env,omitempty"`
	Conn      DBConnInfo `json:"conn"`
	SubTypes  []string   `json:"subTypes"` // 该类型可用的子类型(兼容数据库产品)
}

ConnInfo 连接列表展示信息

type ConnRecord

type ConnRecord struct {
	ID        string     `json:"id"`
	Name      string     `json:"name"`
	ShortName string     `json:"shortName,omitempty"` // 命令行简写(如 prod/my-dev),可选;不填时用 Name 匹配
	Env       string     `json:"env,omitempty"`       // dev/test/staging/prod,留空视为 prod
	Conn      DBConnInfo `json:"conn"`
}

ConnRecord 连接配置存储记录:ID(xid)为主键,Name 仅为展示名(可改可重名); ShortName 为命令行简写(唯一,不可重名),用于快速引用连接

type Contributor

type Contributor = engine.Contributor

Contributor 业务对象贡献者(代理层扩展点)

type ContributorImportRequest

type ContributorImportRequest = engine.ContributorImportRequest

ContributorImportRequest 贡献者导入回调请求

type ContributorRequest

type ContributorRequest = engine.ContributorRequest

ContributorRequest 贡献者导出回调请求

type ContributorResult

type ContributorResult = engine.ContributorResult

ContributorResult 贡献者导出回调结果

type CreateSnapshotOptions

type CreateSnapshotOptions = engine.CreateSnapshotOptions

CreateSnapshotOptions 创建快照选项

type DBConnInfo

type DBConnInfo = engine.DBConnInfo

DBConnInfo 数据库连接信息(含子类型)

type DataEntry

type DataEntry = engine.DataEntry

DataEntry 数据包条目

type DataPackage

type DataPackage = engine.DataPackage

DataPackage 数据交换包(dqex 数据格式契约,兼容 tl-env DataHolder)

type DataPrepareRequest

type DataPrepareRequest = engine.DataPrepareRequest

DataPrepareRequest 数据前置处理请求

type DataPreparer

type DataPreparer = engine.DataPreparer

DataPreparer 数据前置处理器(代理层,按目标库名注册)

type DictionaryOptions

type DictionaryOptions = engine.DictionaryOptions

DictionaryOptions 数据字典导出选项

type ExecutionRecord

type ExecutionRecord struct {
	ID           string   `json:"id"`                     // 同 taskID
	TaskType     string   `json:"taskType"`               // export/import/migrate/compare/dictionary
	TaskConfigID string   `json:"taskConfigId,omitempty"` // 关联的任务配置 ID(可选)
	Status       string   `json:"status"`                 // running/done/error/cancelled
	StartedAt    int64    `json:"startedAt"`
	FinishedAt   int64    `json:"finishedAt"`
	Duration     int64    `json:"duration"`   // 毫秒
	TotalUnits   int      `json:"totalUnits"` // 工作单元数(表 + 对象)
	DoneUnits    int      `json:"doneUnits"`  // 终态时已完成的单元数(失败/取消时用于还原真实进度)
	TotalRows    int64    `json:"totalRows"`
	OutputPath   string   `json:"outputPath,omitempty"`
	FileSize     int64    `json:"fileSize,omitempty"`
	ErrorMsg     string   `json:"errorMsg,omitempty"`
	Logs         []string `json:"logs,omitempty"`   // 执行日志快照(截断保留最近若干条,供终态回放展示)
	Target       string   `json:"target,omitempty"` // 操作目标描述(连接名 + 库表对象),如 "生产库 · db1(93表)"
	Summary      string   `json:"summary"`          // 如 "3表, 40000行, 15.3MB"
}

ExecutionRecord 执行历史记录

type ExportFormat

type ExportFormat = engine.ExportFormat

ExportFormat 导出产物格式

type ExportOptions

type ExportOptions = engine.ExportOptions

ExportOptions 导出选项

type ImportOptions

type ImportOptions = engine.ImportOptions

ImportOptions 导入选项

type MigrateOptions

type MigrateOptions = engine.MigrateOptions

MigrateOptions 迁移选项

type ProgressFunc

type ProgressFunc = engine.ProgressFunc

ProgressFunc 进度回调

type ProgressInfo

type ProgressInfo = engine.Progress

ProgressInfo 任务进度信息

type QueryHooks

type QueryHooks = engine.QueryHooks

QueryHooks SQL 审计钩子(逐语句回调)

type ResetMode

type ResetMode = engine.ResetMode

ResetMode 重置数据模式

type SQLAuditEntry

type SQLAuditEntry struct {
	ID        string `json:"id"`
	ConnID    string `json:"connId"`
	DB        string `json:"db,omitempty"`   // 执行时目标库名
	Mode      string `json:"mode,omitempty"` // 执行模式 transform/raw
	Source    string `json:"source"`         // manual=用户手写 / tree=对象树自动查询 / cell=单元格内联编辑
	SQL       string `json:"sql"`            // 实际执行的 SQL(cell 类型下为摘要)
	IsWrite   bool   `json:"isWrite"`
	RowCount  int    `json:"rowCount"`
	Elapsed   int64  `json:"elapsedMs"`
	Status    string `json:"status"` // ok / error
	ErrorMsg  string `json:"error,omitempty"`
	CreatedAt int64  `json:"createdAt"` // Unix 毫秒

	// 单元格内联编辑的结构化参数(source=cell 时才有值)
	Table     string   `json:"table,omitempty"`
	Column    string   `json:"column,omitempty"`
	NewValue  any      `json:"newValue,omitempty"`
	PKColumns []string `json:"pkColumns,omitempty"`
	PKValues  []any    `json:"pkValues,omitempty"`
}

SQLAuditEntry 审计日志条目(安全兜底,全量、只追加、不可删)。 与 SQLHistoryItem 解耦:审计记所有真实执行(含对象树自动查询、单元格编辑), 字段完整可追溯,含目标库、执行模式、来源、以及单元格编辑的结构化参数。

type SQLFavorite

type SQLFavorite struct {
	ID        string `json:"id"`
	ConnID    string `json:"connId"`
	Title     string `json:"title"` // 用户可重命名,默认取 SQL 去注释后首行前 40 字符
	DB        string `json:"db"`    // 执行上下文:目标库(仅 replace_all 回填时还原)
	Mode      string `json:"mode"`  // 执行模式 transform/raw(仅 replace_all 回填时还原)
	SQL       string `json:"sql"`
	CreatedAt int64  `json:"createdAt"` // Unix 毫秒
}

SQLFavorite 收藏的 SQL(字段对齐 SQLHistoryItem,便于回填)。 ConnID 用于按连接隔离;DB/Mode/SQL 复用执行历史的回填语义; 仅在「全部替换」回填动作下才还原 DB/Mode 上下文,其余动作只插文本。

type SQLHistoryItem

type SQLHistoryItem struct {
	ID        string `json:"id"`
	ConnID    string `json:"connId"`
	DB        string `json:"db,omitempty"`   // 执行时目标库名(空=连接默认库)
	Mode      string `json:"mode,omitempty"` // 执行模式 transform/raw
	SQL       string `json:"sql"`
	IsWrite   bool   `json:"isWrite"`
	RowCount  int    `json:"rowCount"`
	Elapsed   int64  `json:"elapsedMs"`
	Status    string `json:"status"` // ok / error
	ErrorMsg  string `json:"error,omitempty"`
	CreatedAt int64  `json:"createdAt"` // Unix 毫秒
}

SQLHistoryItem 查询终端历史记录(用户手写 SQL,可回填重跑)

type SQLiteStore

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

SQLiteStore 基于 cydb 的 SQL 存储实现(名字沿用自首个 SQLite 后端,现支持 cydb 全部方言:sqlite/mysql/postgresql/oracle,由 OpenSQLite/OpenSQL 选择)。 通过 cydb.DBCli 打开连接,复用其跨方言能力(切 MySQL 等仅改连接参数)。 所有写/查询均通过 cydb 高级 CRUD 方法(内部 ss 构建器 + named bind),不手写 SQL。

func NewSQLiteStore

func NewSQLiteStore(dbPath string) (*SQLiteStore, error)

NewSQLiteStore 打开(或创建)指定路径的 SQLite 库并执行自动迁移。

func (*SQLiteStore) AISessionExists

func (s *SQLiteStore) AISessionExists(sessionID string) bool

AISessionExists 判断会话 ID 是否已落盘(跨用户域存在性判定,不含归属校验)。 供透明重建复用原 ID 前区分「彻底不存在」与「存在但归属其他用户域」。

func (*SQLiteStore) AddFavorite

func (s *SQLiteStore) AddFavorite(user string, f *SQLFavorite) error

AddFavorite 新增一条收藏(user 为所属用户域;f.ConnID 为裸连接 key,三列同写)。

func (*SQLiteStore) AddSQLHistory

func (s *SQLiteStore) AddSQLHistory(user string, item SQLHistoryItem) error

AddSQLHistory 追加一条 SQL 执行历史(每连接环形保留最近 N 条)。 item.ConnID 为裸连接 key;三列同写:user=所属用户域、conn_key=裸 key、 conn_id 物理列=作用域键(scopeConnKey)。

func (*SQLiteStore) AppendSQLAudit

func (s *SQLiteStore) AppendSQLAudit(user string, entry SQLAuditEntry) error

AppendSQLAudit 追加一条 SQL 审计日志(只追加,不提供删除)。 entry.ConnID 为裸连接 key;三列同写:user=所属用户域、conn_key=裸 key、 conn_id 物理列=作用域键(scopeConnKey)。

func (*SQLiteStore) ClearSQLHistory

func (s *SQLiteStore) ClearSQLHistory(user, connID string) error

ClearSQLHistory 清空某用户域下某连接的历史;connID 为空时清空该用户域全部连接的历史。

func (*SQLiteStore) Close

func (s *SQLiteStore) Close() error

Close 关闭底层数据库连接。

func (*SQLiteStore) DeleteAISession

func (s *SQLiteStore) DeleteAISession(user, sessionID string) error

DeleteAISession 删除指定会话(user 为所属用户域,按 user 列 + 主键双条件删除, 跨用户域删不到他人会话)。

func (*SQLiteStore) DeleteAISessionByTab

func (s *SQLiteStore) DeleteAISessionByTab(user, connID, tabID string) error

DeleteAISessionByTab 删除某用户域下某连接指定 tab 的会话(tab 关闭时调用)。 connID 为裸连接 key,按 user 列 + conn_key 双条件删除。

func (*SQLiteStore) DeleteAISessionsByConn

func (s *SQLiteStore) DeleteAISessionsByConn(user, connID string) error

DeleteAISessionsByConn 删除某用户域下某连接的全部会话(按 user 列 + conn_key 双条件)。

func (*SQLiteStore) DeleteAISessionsByConnAllUsers

func (s *SQLiteStore) DeleteAISessionsByConnAllUsers(connID string) error

DeleteAISessionsByConnAllUsers 跨用户域删除某连接的全部会话(连接删除级联清理)。 connID 为裸连接 key,按 conn_key 列等值一次删除所有用户域的会话。

func (*SQLiteStore) DeleteConn

func (s *SQLiteStore) DeleteConn(key string) error

DeleteConn 删除连接(按主键 ID,兼容名称或短名)。

func (*SQLiteStore) DeleteFavorite

func (s *SQLiteStore) DeleteFavorite(user, id string) error

DeleteFavorite 删除收藏(按 id 定位,仅限本用户域)。

func (*SQLiteStore) DeleteHistory

func (s *SQLiteStore) DeleteHistory(id string) error

DeleteHistory 删除指定执行记录。

func (*SQLiteStore) DeleteSnapshot

func (s *SQLiteStore) DeleteSnapshot(id string) error

DeleteSnapshot 删除快照索引行(按主键 ID)。

func (*SQLiteStore) DeleteTask

func (s *SQLiteStore) DeleteTask(taskID string) error

DeleteTask 删除任务配置。

func (*SQLiteStore) DeleteWorkspace

func (s *SQLiteStore) DeleteWorkspace(user, connID string) error

DeleteWorkspace 删除某用户域下某连接的工作区(按 user 列 + conn_key 双条件)。

func (*SQLiteStore) DeleteWorkspacesByConnAllUsers

func (s *SQLiteStore) DeleteWorkspacesByConnAllUsers(connID string) error

DeleteWorkspacesByConnAllUsers 跨用户域删除某连接的全部工作区(连接删除级联清理)。 connID 为裸连接 key,按 conn_key 列等值一次删除所有用户域的行。

func (*SQLiteStore) GetConn

func (s *SQLiteStore) GetConn(key string) (ConnRecord, bool)

GetConn 按主键 ID 查找;兼容按名称或短名查找。

func (*SQLiteStore) GetHistory

func (s *SQLiteStore) GetHistory(id string) (ExecutionRecord, error)

GetHistory 获取指定执行记录。

func (*SQLiteStore) GetLastUsed

func (s *SQLiteStore) GetLastUsed(taskType string) *TaskConfig

GetLastUsed 获取指定类型最近使用的任务配置。

func (*SQLiteStore) GetMeta

func (s *SQLiteStore) GetMeta(key string) (string, bool, error)

GetMeta 读取 KV 元信息;无记录时 ok=false。

func (*SQLiteStore) GetTask

func (s *SQLiteStore) GetTask(id string) (TaskConfig, bool)

GetTask 获取指定任务配置。

func (*SQLiteStore) ListAISessions

func (s *SQLiteStore) ListAISessions(user, connID, tabID string) ([]AISessionRecord, error)

ListAISessions 列出某用户域下某连接(可选指定 tab)的会话(新→旧,仅元信息不含消息)。 connID 为裸连接 key;tabID 为空 = 返回该连接全部会话,非空 = 仅返回该 tab 的会话(按 tab 隔离)。查询条件恒含 user 列 + conn_key(跨用户隔离由 user 列保证)。

func (*SQLiteStore) ListFavorites

func (s *SQLiteStore) ListFavorites(user string) ([]*SQLFavorite, error)

ListFavorites 返回该用户域的全部收藏(新→旧)。 user 列经迁移回填后恒非空,仅按 user 列过滤(跨用户隔离由 user 列保证)。

func (*SQLiteStore) ListSQLAudit

func (s *SQLiteStore) ListSQLAudit(user, connID string, limit, offset int) ([]SQLAuditEntry, error)

ListSQLAudit 读取审计日志(倒序,分页)。user 为所属用户域;connID 为裸连接 key (非空时按 user 列 + conn_key 双条件过滤),为空时仅按 user 列过滤(返回该用户域 全部连接,跨用户隔离由 user 列保证)。

func (*SQLiteStore) ListSQLHistory

func (s *SQLiteStore) ListSQLHistory(user, connID string) ([]SQLHistoryItem, error)

ListSQLHistory 返回某用户域下某连接的历史(新→旧)。 user 为所属用户域;connID 为裸连接 key,为空时返回该用户域全部连接的历史 (仅按 user 列过滤,跨用户隔离由 user 列保证)。

func (*SQLiteStore) ListSnapshots

func (s *SQLiteStore) ListSnapshots(connID string) ([]SnapshotInfo, error)

ListSnapshots 列出快照索引(created_at 倒序);connID 非空时按 conn_id 等值过滤。

func (*SQLiteStore) LoadAISession

func (s *SQLiteStore) LoadAISession(user, sessionID string) (AISessionRecord, bool)

LoadAISession 读取指定会话(user 为所属用户域,按 user 列做归属校验, 不属于该用户域视为不存在);无记录时 ok=false。rec.ConnID 还原为裸连接 key。

func (*SQLiteStore) LoadConns

func (s *SQLiteStore) LoadConns() map[string]ConnRecord

LoadConns 加载全部连接配置(按 ID 索引)。 注意:返回空 map 可能意味着"确实无连接",也可能意味着"读取失败"(如 SQLite 锁竞争)。 读取失败不再静默——记录日志,避免上层把"读库失败"误判为"连接配置不存在"。

func (*SQLiteStore) LoadHistory

func (s *SQLiteStore) LoadHistory(taskType, taskConfigID string) []ExecutionRecord

LoadHistory 加载执行历史(taskType 为空=全部,taskConfigID 为空=不过滤)。

func (*SQLiteStore) LoadTasks

func (s *SQLiteStore) LoadTasks() []TaskConfig

LoadTasks 加载全部任务配置(按 updated_at 降序)。

func (*SQLiteStore) LoadWebAccess

func (s *SQLiteStore) LoadWebAccess() (WebAccessInfo, bool)

LoadWebAccess 读取 Web 访问凭证;无有效内容时 ok=false。

func (*SQLiteStore) LoadWorkspace

func (s *SQLiteStore) LoadWorkspace(user, connID string) (WorkspaceState, bool)

LoadWorkspace 读取某用户域下某连接的工作区;无记录时 ok=false。 connID 为裸连接 key,按 user 列 + conn_key 双条件过滤。

func (*SQLiteStore) MarkLastUsed

func (s *SQLiteStore) MarkLastUsed(taskID, taskType string) error

MarkLastUsed 标记指定类型为最近使用(同类型其他任务取消标记)。

func (*SQLiteStore) Migrate

func (s *SQLiteStore) Migrate() error

Migrate 执行自动迁移(建表/补列),随后执行存量数据幂等回填。

func (*SQLiteStore) PurgeExcessAISessions

func (s *SQLiteStore) PurgeExcessAISessions(maxPerConn int, keepDays int) (int64, error)

PurgeExcessAISessions 清理超额会话:

  • 当某连接的会话数 > maxPerConn 时,删除其中「超过 keepDays 天未活动」的会话;
  • 从最旧(updated_at 最小)的会话开始删,直到会话数 ≤ maxPerConn 或没有可删的超期会话;
  • 会话数 ≤ maxPerConn 或未超期(tab 未关闭)时永久保留,不做时间过期清理。

func (*SQLiteStore) RenameFavorite

func (s *SQLiteStore) RenameFavorite(user, id, title string) error

RenameFavorite 重命名收藏(按 id 定位,仅限本用户域)。

func (*SQLiteStore) SaveAISession

func (s *SQLiteStore) SaveAISession(user string, rec AISessionRecord) error

SaveAISession 保存/更新一个 AI 会话(整组消息覆盖写)。 rec.ConnID 为裸连接 key;user 为所属用户域(三列同写)。

func (*SQLiteStore) SaveConn

func (s *SQLiteStore) SaveConn(rec ConnRecord) (ConnRecord, error)

SaveConn 保存连接配置:rec.ID 非空则按主键更新,否则生成新 xid。

func (*SQLiteStore) SaveHistory

func (s *SQLiteStore) SaveHistory(record ExecutionRecord) error

SaveHistory 保存执行历史(按 ID 更新或新增,超出上限裁剪最旧记录)。

func (*SQLiteStore) SaveTask

func (s *SQLiteStore) SaveTask(task TaskConfig) error

SaveTask 保存任务配置(按 ID 更新或新增)。

func (*SQLiteStore) SaveWebAccess

func (s *SQLiteStore) SaveWebAccess(info WebAccessInfo) error

SaveWebAccess 保存 Web 访问凭证(单行,主键固定)。

func (*SQLiteStore) SaveWorkspace

func (s *SQLiteStore) SaveWorkspace(user, connID string, state WorkspaceState) error

SaveWorkspace 保存某用户域下某连接的工作区(整体覆盖)。 connID 为裸连接 key;三列同写:conn_id 物理列=作用域键(scopeConnKey,主键)、 conn_key=裸 key(跨用户级联删除定位)、user=所属用户域。

func (*SQLiteStore) SetMeta

func (s *SQLiteStore) SetMeta(key, value string) error

SetMeta 写入/更新 KV 元信息(按 key 幂等)。

func (*SQLiteStore) UpsertSnapshot

func (s *SQLiteStore) UpsertSnapshot(info SnapshotInfo) error

UpsertSnapshot 写入/更新快照索引行(按 info.ID 主键幂等)。

type Snapshot

type Snapshot = engine.Snapshot

Snapshot 快照完整数据

type SnapshotCompareOptions

type SnapshotCompareOptions = engine.SnapshotCompareOptions

SnapshotCompareOptions 快照对比选项

type SnapshotInfo

type SnapshotInfo = engine.SnapshotInfo

SnapshotInfo 快照摘要

type SnapshotTable

type SnapshotTable = engine.SnapshotTable

SnapshotTable 单表快照

type Store

type Store interface {
	// Close 关闭底层数据库连接。
	Close() error

	// Migrate 执行自动迁移(建表/补列),基于 allModels 注册表。
	Migrate() error

	// SaveConn 保存连接配置:rec.ID 非空则按主键更新,否则生成新 ID。
	SaveConn(rec ConnRecord) (ConnRecord, error)
	// LoadConns 加载全部连接配置(按 ID 索引)。
	LoadConns() map[string]ConnRecord
	// GetConn 按主键 ID 查找;兼容按名称或短名查找。
	GetConn(key string) (ConnRecord, bool)
	// DeleteConn 删除连接(按主键 ID,兼容名称或短名)。
	DeleteConn(key string) error

	// SaveTask 保存任务配置(按 ID 更新或新增)。
	SaveTask(task TaskConfig) error
	// LoadTasks 加载全部任务配置。
	LoadTasks() []TaskConfig
	// GetTask 获取指定任务配置。
	GetTask(id string) (TaskConfig, bool)
	// DeleteTask 删除任务配置。
	DeleteTask(taskID string) error
	// MarkLastUsed 标记指定类型为最近使用(同类型其他任务取消标记)。
	MarkLastUsed(taskID, taskType string) error
	// GetLastUsed 获取指定类型最近使用的任务配置。
	GetLastUsed(taskType string) *TaskConfig

	// SaveHistory 保存执行历史(按 ID 更新或新增,超出上限裁剪最旧记录)。
	SaveHistory(record ExecutionRecord) error
	// LoadHistory 加载执行历史(taskType 为空=全部,taskConfigID 为空=不过滤)。
	LoadHistory(taskType, taskConfigID string) []ExecutionRecord
	// GetHistory 获取指定执行记录。
	GetHistory(id string) (ExecutionRecord, error)
	// DeleteHistory 删除指定执行记录。
	DeleteHistory(id string) error

	// SaveWebAccess 保存 Web 访问凭证。
	SaveWebAccess(info WebAccessInfo) error
	// LoadWebAccess 读取 Web 访问凭证;无有效内容时 ok=false。
	LoadWebAccess() (WebAccessInfo, bool)

	// AddSQLHistory 追加一条 SQL 执行历史(每连接环形保留最近 N 条)。
	// user 为所属用户域;item.ConnID 为裸连接 key(三列同写:user/conn_key/conn_id 作用域键)。
	AddSQLHistory(user string, item SQLHistoryItem) error
	// ListSQLHistory 返回某用户域下某连接的历史(新→旧)。
	// connID 为裸连接 key(user 列 + conn_key 双条件过滤);为空时仅按 user 列过滤
	// (该用户域全部连接)。
	ListSQLHistory(user, connID string) ([]SQLHistoryItem, error)
	// ClearSQLHistory 清空某用户域下某连接的历史(connID 为空=该用户域全部连接)。
	ClearSQLHistory(user, connID string) error

	// AddFavorite 新增一条收藏(user 为所属用户域;f.ConnID 为裸连接 key,三列同写)。
	AddFavorite(user string, f *SQLFavorite) error
	// ListFavorites 返回该用户域的全部收藏(新→旧)。
	ListFavorites(user string) ([]*SQLFavorite, error)
	// DeleteFavorite 删除收藏(按 id 定位,仅限本用户域)。
	DeleteFavorite(user, id string) error
	// RenameFavorite 重命名收藏(按 id 定位,仅限本用户域)。
	RenameFavorite(user, id, title string) error

	// AppendSQLAudit 追加一条 SQL 审计日志(只追加,不提供删除)。
	// user 为所属用户域;entry.ConnID 为裸连接 key(三列同写)。
	AppendSQLAudit(user string, entry SQLAuditEntry) error
	// ListSQLAudit 读取审计日志(倒序,分页)。connID 为裸连接 key(user 列 + conn_key
	// 双条件过滤);为空时仅按 user 列过滤(该用户域全部连接,跨用户隔离由 user 列保证)。
	ListSQLAudit(user, connID string, limit, offset int) ([]SQLAuditEntry, error)

	// SaveWorkspace 保存某用户域下某连接的工作区(整体覆盖)。
	// connID 为裸连接 key(conn_id 物理列存作用域键作主键,conn_key 存裸 key);
	// user 为所属用户域。
	SaveWorkspace(user, connID string, state WorkspaceState) error
	// LoadWorkspace 读取某用户域下某连接的工作区(user 列 + conn_key 双条件);无记录时 ok=false。
	LoadWorkspace(user, connID string) (WorkspaceState, bool)
	// DeleteWorkspace 删除某用户域下某连接的工作区(user 列 + conn_key 双条件)。
	DeleteWorkspace(user, connID string) error
	// DeleteWorkspacesByConnAllUsers 跨用户域删除某连接的全部工作区(连接删除级联清理,
	// connID 为裸连接 key,按 conn_key 列等值删除所有用户域的行)。
	DeleteWorkspacesByConnAllUsers(connID string) error

	// SaveAISession 保存/更新一个 AI 会话(整组消息覆盖写)。
	// user 为所属用户域;rec.ConnID 为裸连接 key(三列同写:user/conn_key/conn_id 作用域键)。
	SaveAISession(user string, rec AISessionRecord) error
	// LoadAISession 读取指定会话(user 为所属用户域,按 user 列归属校验,不属于该用户域
	// 视为不存在);无记录时 ok=false。rec.ConnID 还原为裸连接 key。
	LoadAISession(user, sessionID string) (AISessionRecord, bool)
	// AISessionExists 判断会话 ID 是否已落盘(跨用户域存在性判定,不含归属校验),
	// 供透明重建复用原 ID 前区分「彻底不存在」与「存在但归属其他用户域」。
	AISessionExists(sessionID string) bool
	// ListAISessions 列出某用户域下某连接(可选指定 tab)的会话(新→旧,仅元信息不含
	// 消息,供前端恢复选择)。connID 为裸连接 key,按 user 列 + conn_key 双条件过滤。
	ListAISessions(user, connID, tabID string) ([]AISessionRecord, error)
	// DeleteAISession 删除指定会话(user 为所属用户域,按 user 列 + 主键双条件删除)。
	DeleteAISession(user, sessionID string) error
	// DeleteAISessionByTab 删除某用户域下某连接指定 tab 的会话(tab 关闭时调用)。
	DeleteAISessionByTab(user, connID, tabID string) error
	// DeleteAISessionsByConn 删除某用户域下某连接的全部会话。
	DeleteAISessionsByConn(user, connID string) error
	// DeleteAISessionsByConnAllUsers 跨用户域删除某连接的全部会话(连接删除级联清理,
	// connID 为裸连接 key,按 conn_key 列等值删除所有用户域的会话)。
	DeleteAISessionsByConnAllUsers(connID string) error
	// PurgeExcessAISessions 清理超额会话:当某连接会话数 > maxPerConn 时,
	// 删除其中「超过 keepDays 天未活动」的会话(从最旧开始),返回删除条数。
	PurgeExcessAISessions(maxPerConn int, keepDays int) (int64, error)

	// UpsertSnapshot 写入/更新快照索引行(按 info.ID 主键幂等;存量 JSON 索引迁移与
	// 新建快照共用)。conn_id/created_at 同步写入真实列供 SQL 过滤。
	UpsertSnapshot(info SnapshotInfo) error
	// ListSnapshots 列出快照索引(created_at 倒序)。connID 非空时按 conn_id 列等值过滤
	// (连接 ID 即创建时连接,库模式下虚拟连接为 env:<id>,用于按环境隔离)。
	ListSnapshots(connID string) ([]SnapshotInfo, error)
	// DeleteSnapshot 删除快照索引行(按主键 ID)。
	DeleteSnapshot(id string) error

	// GetMeta 读取 KV 元信息;无记录时 ok=false。
	GetMeta(key string) (string, bool, error)
	// SetMeta 写入/更新 KV 元信息(按 key 幂等)。
	SetMeta(key, value string) error
}

Store 存储接口:连接配置 + 任务配置 + 执行历史 + SQL 历史 + SQL 审计 + Web 凭证。

方法签名与原 PersistMgr 公开方法保持一致,service 层委托调用零改动。 SQLite 是第一个实现;未来切换 MySQL 等数据库只需新增实现并在工厂处选择, 上层(service/web/cli)无感知。

func OpenSQL

func OpenSQL(conn *def.DBConnection) (Store, error)

OpenSQL 按连接配置打开 SQL 存储并执行自动迁移(库模式 WithStoreConn 用)。 经 cydb 跨方言能力支持 sqlite/mysql/postgresql/oracle;宿主可复用自己的 MySQL 实例(独立 database,表自动迁移创建),元数据不落本地文件。

func OpenSQLite

func OpenSQLite(dbPath string) (Store, error)

OpenSQLite 打开(或创建)SQLite 存储并执行自动迁移,返回 Store 接口。 dbPath 为 SQLite 数据库文件路径。

type TabSettings

type TabSettings struct {
	MaxTabs     int      `json:"maxTabs,omitempty"`     // 最大标签页数(默认 20,范围 5~100)
	EvictOrder  []string `json:"evictOrder,omitempty"`  // 淘汰优先级顺序(5 类分类的排列)
	MaxTabWidth int      `json:"maxTabWidth,omitempty"` // 标签页最大宽度(像素,默认 160,范围 80~300)
}

TabSettings 工作区标签页设置(最大数量、淘汰优先级、最大宽度)

type TableAlias

type TableAlias = engine.TableAlias

TableAlias 表别名配对

type TableCondition

type TableCondition = engine.TableCondition

TableCondition 表级过滤条件

type TaskConfig

type TaskConfig struct {
	ID             string             `json:"id" yaml:"id"`
	Name           string             `json:"name" yaml:"name"`
	Type           string             `json:"type" yaml:"type"` // export/import/migrate/compare/dictionary
	ExportOpts     *ExportOptions     `json:"exportOpts,omitempty" yaml:"exportOpts,omitempty"`
	ImportOpts     *ImportOptions     `json:"importOpts,omitempty" yaml:"importOpts,omitempty"`
	MigrateOpts    *MigrateOptions    `json:"migrateOpts,omitempty" yaml:"migrateOpts,omitempty"`
	CompareOpts    *CompareOptions    `json:"compareOpts,omitempty" yaml:"compareOpts,omitempty"`
	DictionaryOpts *DictionaryOptions `json:"dictionaryOpts,omitempty" yaml:"dictionaryOpts,omitempty"`
	CreatedAt      int64              `json:"createdAt" yaml:"createdAt"`
	UpdatedAt      int64              `json:"updatedAt" yaml:"updatedAt"`
	IsLastUsed     bool               `json:"isLastUsed" yaml:"isLastUsed"`
}

TaskConfig 任务配置(可保存/加载,自动记忆上次配置)

type WebAccessInfo

type WebAccessInfo struct {
	Addr     string `json:"addr"`               // 监听地址 host:port
	Token    string `json:"token"`              // 访问令牌(空=启动时禁用了认证)
	IssuedAt int64  `json:"issuedAt,omitempty"` // 令牌签发时间(Unix 毫秒),用于过期判断
}

WebAccessInfo Web 访问凭证:持久化后重启可复用(未过期时),dqex url 随时可取

type WorkspaceState

type WorkspaceState struct {
	Tabs        []WorkspaceTab `json:"tabs"`
	ActiveID    string         `json:"activeId"`
	TabSettings *TabSettings   `json:"tabSettings,omitempty"` // 标签页设置(可选)
}

WorkspaceState 某连接的工作区状态。

type WorkspaceTab

type WorkspaceTab struct {
	ID    string `json:"id"`
	Kind  string `json:"kind"`            // "query" | "object"
	Seq   int    `json:"seq,omitempty"`   // 查询序号(query tab 专用)
	Title string `json:"title,omitempty"` // 展示标题(query tab 重命名后)
	DB    string `json:"db,omitempty"`    // 目标库名(空 = 连接默认库)
	SQL   string `json:"sql,omitempty"`   // 查询 SQL(query tab 专用)
	Mode  string `json:"mode,omitempty"`  // 执行模式 transform/raw(query tab 专用)
	// object tab 专用
	Name    string `json:"name,omitempty"`
	ObjType string `json:"objType,omitempty"` // table / view / function / procedure
	SubTab  string `json:"subTab,omitempty"`  // data / struct / ddl
	// 表浏览视图布局(过滤/排序/列显隐/页大小),原样 JSON 存取,后端不解析语义
	ViewLayout json.RawMessage `json:"viewLayout,omitempty"`
	// 固定标签页(不参与自动淘汰)
	Pinned bool `json:"pinned,omitempty"`
}

WorkspaceTab 工作区 tab。仅持久化「可重跑」的上下文字段(结果集靠重新执行恢复)。 QueryKind/ObjectKind 用 kind 判别;具体字段见 QueryTab / ObjectTab。

Jump to

Keyboard shortcuts

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