store

package
v0.0.0-...-38ea638 Latest Latest
Warning

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

Go to latest
Published: Aug 23, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Package store 台面持久层:默认 SQLite(desk.db);可切换 MySQL(表前缀隔离,供嵌入方同实例共库)。 项目数据用 project_id 隔离;认账记忆(正文 / LESSONS)仍可在文件系统。

Index

Constants

View Source
const (
	DriverSQLite = "sqlite"
	DriverMySQL  = "mysql"
)

Driver 名称(通用,不含业务含义)。

View Source
const CurrentSchemaVersion = 25

CurrentSchemaVersion 当前统一库版本;升级走 numbered migrations。

View Source
const (
	FileName = "desk.db"
)

Variables

This section is empty.

Functions

func AdaptSQL

func AdaptSQL(q string) string

AdaptSQL 表前缀 + MySQL 方言改写(ON CONFLICT / INSERT OR / json_extract / ||)。

func CloseAll

func CloseAll()

CloseAll / ResetCacheForTest

func ConcatExpr

func ConcatExpr(column, placeholder string) string

ConcatExpr 列与占位符拼接:sqlite content||? ;mysql CONCAT(content, ?)。

func Configure

func Configure(c Config)

Configure 设置进程内默认台面配置(Open / OpenProject 生效)。 传零值 Config 可复位为 sqlite 默认。

func DriverName

func DriverName() string

DriverName 当前驱动。

func EmbedDataDir

func EmbedDataDir() string

EmbedDataDir 当前嵌入库目录(只读)。

func EnsureProject

func EnsureProject(db *sql.DB, root string) error

EnsureProject 登记项目。

func InsertIgnore

func InsertIgnore(table string, cols []string) string

InsertIgnore 生成 INSERT OR IGNORE / INSERT IGNORE。

func IsMySQL

func IsMySQL() bool

IsMySQL 当前是否 MySQL 方言。

func JSONExtract

func JSONExtract(column, path string) string

JSONExtract 取 JSON 路径表达式(用于 WHERE/SELECT)。

func LoadRunTrail

func LoadRunTrail(db *sql.DB, pid, runID string) ([]byte, error)

LoadRunTrail 按 seq 拼回 trail JSON 数组字节。

func MetaGet

func MetaGet(db *sql.DB, projectID, key string) (string, error)

MetaGet / MetaSet 按项目键值。

func MetaSet

func MetaSet(db *sql.DB, projectID, key, value string) error

func Open

func Open() (*sql.DB, error)

Open 打开唯一台面库(按 ActiveConfig)。

func OpenAt

func OpenAt(dir string) (*sql.DB, error)

OpenAt 打开指定目录下的 desk.db(sqlite / 测试)。

func OpenGlobal

func OpenGlobal() (*sql.DB, error)

OpenGlobal / OpenGlobalAt 兼容旧调用 → 唯一库。

func OpenGlobalAt

func OpenGlobalAt(dir string) (*sql.DB, error)

func OpenProject

func OpenProject(root string) (*sql.DB, error)

OpenProject 打开唯一库并为该项目完成迁移(旧项目 desk.db / JSON;mysql 仅 EnsureProject)。

func OpenProjectAt

func OpenProjectAt(dir, root string) (*sql.DB, error)

OpenProjectAt 测试:库在 dir(sqlite);mysql 忽略 dir。

func Path

func Path() (string, error)

Path 唯一库路径:~/.ningharness/desk.db。

func ProjectID

func ProjectID(root string) string

ProjectID 项目键。优先 Config.ProjectKey;无路径分隔的 root 视为逻辑键;否则绝对路径。

func ProjectPath

func ProjectPath(root string) string

ProjectPath 旧项目旁路库路径(仅迁移用):root/.ningharness/desk.db。

func PromoteMetaBlobs

func PromoteMetaBlobs(db *sql.DB) error

PromoteMetaBlobs 项目迁入后兜底(legacy/json 可能又写入 meta blob)。

func R

func R(q string) string

R 短名:AdaptSQL(域包 SQL 入口)。

func ReplaceRunEvents

func ReplaceRunEvents(tx *sql.Tx, pid, runID, trailJSON string, createdAtMs int64) error

ReplaceRunEvents 用 trail JSON 数组覆写某 run 的事件行(供 task.Save / 迁移共用)。

func ResetCacheForTest

func ResetCacheForTest()

func RewriteSQL

func RewriteSQL(q string) string

RewriteSQL 将逻辑表名加上 TablePrefix。无前缀时原样返回。

func SetEmbedDataDir

func SetEmbedDataDir(dir string)

SetEmbedDataDir 嵌入方指定 desk.db 目录;空则清除。 OpenProject / history / session 将与此目录对齐,避免误写家目录默认库。

func T

func T(logical string) string

T 逻辑表名 → 物理表名(加前缀)。

func TablePrefix

func TablePrefix() string

TablePrefix 当前表前缀。

func Upsert

func Upsert(table string, cols, conflict, updates []string) string

Upsert 生成 INSERT ... ON CONFLICT / ON DUPLICATE KEY UPDATE。 cols 含全部写入列;conflict 为冲突键;updates 为冲突时更新列(须是 cols 子集)。

Types

type Config

type Config struct {
	// Driver sqlite(默认)| mysql
	Driver string
	// DSN mysql 连接串;Driver=mysql 且 DB==nil 时使用。
	DSN string
	// DB 可选:由宿主注入的连接池(如产品已打开的 *sql.DB)。
	// 注入时 harness 不 Close 该池。
	DB *sql.DB
	// TablePrefix 表前缀。mysql 默认 "nh_";sqlite 默认空(保持 desk.db 兼容)。
	TablePrefix string
	// DataDir sqlite 文件目录;mysql 忽略。
	DataDir string
	// ProjectKey 逻辑项目键;非空时覆盖 ProjectID(root) 的路径算法(嵌入多实例同库用)。
	ProjectKey string
}

Config 台面库配置。由嵌入方在 Open 前通过 Configure / OpenWith 注入。 禁止出现产品/业务字段;同实例共库时用 TablePrefix 隔离。

func ActiveConfig

func ActiveConfig() Config

ActiveConfig 当前配置副本。

Jump to

Keyboard shortcuts

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