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
- Variables
- func DefaultDBPath(baseDir string) string
- type AISessionRecord
- type CompareOptions
- type CompareResult
- type ConnInfo
- type ConnRecord
- type Contributor
- type ContributorImportRequest
- type ContributorRequest
- type ContributorResult
- type CreateSnapshotOptions
- type DBConnInfo
- type DataEntry
- type DataPackage
- type DataPrepareRequest
- type DataPreparer
- type DictionaryOptions
- type ExecutionRecord
- type ExportFormat
- type ExportOptions
- type ImportOptions
- type MigrateOptions
- type ProgressFunc
- type ProgressInfo
- type QueryHooks
- type ResetMode
- type SQLAuditEntry
- type SQLFavorite
- type SQLHistoryItem
- type SQLiteStore
- func (s *SQLiteStore) AISessionExists(sessionID string) bool
- func (s *SQLiteStore) AddFavorite(user string, f *SQLFavorite) error
- func (s *SQLiteStore) AddSQLHistory(user string, item SQLHistoryItem) error
- func (s *SQLiteStore) AppendSQLAudit(user string, entry SQLAuditEntry) error
- func (s *SQLiteStore) ClearSQLHistory(user, connID string) error
- func (s *SQLiteStore) Close() error
- func (s *SQLiteStore) DeleteAISession(user, sessionID string) error
- func (s *SQLiteStore) DeleteAISessionByTab(user, connID, tabID string) error
- func (s *SQLiteStore) DeleteAISessionsByConn(user, connID string) error
- func (s *SQLiteStore) DeleteAISessionsByConnAllUsers(connID string) error
- func (s *SQLiteStore) DeleteConn(key string) error
- func (s *SQLiteStore) DeleteFavorite(user, id string) error
- func (s *SQLiteStore) DeleteHistory(id string) error
- func (s *SQLiteStore) DeleteSnapshot(id string) error
- func (s *SQLiteStore) DeleteTask(taskID string) error
- func (s *SQLiteStore) DeleteWorkspace(user, connID string) error
- func (s *SQLiteStore) DeleteWorkspacesByConnAllUsers(connID string) error
- func (s *SQLiteStore) GetConn(key string) (ConnRecord, bool)
- func (s *SQLiteStore) GetHistory(id string) (ExecutionRecord, error)
- func (s *SQLiteStore) GetLastUsed(taskType string) *TaskConfig
- func (s *SQLiteStore) GetMeta(key string) (string, bool, error)
- func (s *SQLiteStore) GetTask(id string) (TaskConfig, bool)
- func (s *SQLiteStore) ListAISessions(user, connID, tabID string) ([]AISessionRecord, error)
- func (s *SQLiteStore) ListFavorites(user string) ([]*SQLFavorite, error)
- func (s *SQLiteStore) ListSQLAudit(user, connID string, limit, offset int) ([]SQLAuditEntry, error)
- func (s *SQLiteStore) ListSQLHistory(user, connID string) ([]SQLHistoryItem, error)
- func (s *SQLiteStore) ListSnapshots(connID string) ([]SnapshotInfo, error)
- func (s *SQLiteStore) LoadAISession(user, sessionID string) (AISessionRecord, bool)
- func (s *SQLiteStore) LoadConns() map[string]ConnRecord
- func (s *SQLiteStore) LoadHistory(taskType, taskConfigID string) []ExecutionRecord
- func (s *SQLiteStore) LoadTasks() []TaskConfig
- func (s *SQLiteStore) LoadWebAccess() (WebAccessInfo, bool)
- func (s *SQLiteStore) LoadWorkspace(user, connID string) (WorkspaceState, bool)
- func (s *SQLiteStore) MarkLastUsed(taskID, taskType string) error
- func (s *SQLiteStore) Migrate() error
- func (s *SQLiteStore) PurgeExcessAISessions(maxPerConn int, keepDays int) (int64, error)
- func (s *SQLiteStore) RenameFavorite(user, id, title string) error
- func (s *SQLiteStore) SaveAISession(user string, rec AISessionRecord) error
- func (s *SQLiteStore) SaveConn(rec ConnRecord) (ConnRecord, error)
- func (s *SQLiteStore) SaveHistory(record ExecutionRecord) error
- func (s *SQLiteStore) SaveTask(task TaskConfig) error
- func (s *SQLiteStore) SaveWebAccess(info WebAccessInfo) error
- func (s *SQLiteStore) SaveWorkspace(user, connID string, state WorkspaceState) error
- func (s *SQLiteStore) SetMeta(key, value string) error
- func (s *SQLiteStore) UpsertSnapshot(info SnapshotInfo) error
- type Snapshot
- type SnapshotCompareOptions
- type SnapshotInfo
- type SnapshotTable
- type Store
- type TabSettings
- type TableAlias
- type TableCondition
- type TaskConfig
- type WebAccessInfo
- type WorkspaceState
- type WorkspaceTab
Constants ¶
const ( ResetNone = engine.ResetNone ResetTruncate = engine.ResetTruncate ResetDrop = engine.ResetDrop // FormatSQL / FormatJSON 导出产物格式(ExportOptions.Format) FormatSQL = engine.FormatSQL FormatJSON = engine.FormatJSON )
重置模式常量
const DBFileName = "dqex.db"
DBFileName SQLite 数据库文件名(位于数据根目录)。
Variables ¶
var SupportedDBTypes = map[string][]string{
"mysql": {"mysql", "oceanbase", "mariadb"},
"postgresql": {"postgresql", "gaussdb", "kingbase"},
"oracle": {"oracle", "dameng"},
}
SupportedDBTypes 支持的数据库类型及子类型。 SubType 不代表版本号,而是标识“使用该类型兼容模式的具体数据库产品”(彼此存在语法差异): 首项为原生标准库(值等于类型名),其余为兼容库产品。
Functions ¶
func DefaultDBPath ¶
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 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 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 DataPackage ¶
type DataPackage = engine.DataPackage
DataPackage 数据交换包(dqex 数据格式契约,兼容 tl-env DataHolder)
type DataPrepareRequest ¶
type DataPrepareRequest = engine.DataPrepareRequest
DataPrepareRequest 数据前置处理请求
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 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) 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 SnapshotCompareOptions ¶
type SnapshotCompareOptions = engine.SnapshotCompareOptions
SnapshotCompareOptions 快照对比选项
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 ¶
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 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。