db

package module
v1.1.1 Latest Latest
Warning

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

Go to latest
Published: Mar 23, 2026 License: MIT Imports: 36 Imported by: 0

README

EIT-DB - Go 数据库抽象层

一个受 Ecto (Elixir) 启发的 Go 数据库抽象层,提供类型安全的 Schema、Changeset 和跨数据库适配器支持。

✨ 特性

  • Schema 系统 - 声明式数据结构定义,支持验证器和默认值(支持从 Go 结构体自动生成)
  • Changeset 执行器(推荐) - 业务写操作默认入口,支持基于 Changeset 的事务封装
  • Query Constructor (v2 推荐) - 三层查询构造架构,支持 MySQL/PostgreSQL/SQLite/SQL Server 方言 (v0.4.1+)
  • Migration 工具 - 灵活的数据库迁移工具,支持 Schema-based 和 Raw SQL 两种方式
  • 跨数据库适配器 - 支持 MySQL, PostgreSQL, SQLite, SQL Server, MongoDB, Neo4j
  • 查询构建器 (v1 兼容层) - 保留兼容,不再新增能力
  • 特性声明与派发 - Adapter 通过特性表声明能力,运行时按能力路由或降级
  • 无 GORM 暴露 - 对外不再暴露 GORM(内部降级可能复用 GORM,但不会暴露给用户)
  • 动态建表 - 支持运行时动态创建表;各 SQL Adapter 统一复用 Schema Builder 生成建表 SQL(PostgreSQL 自动模式仍使用触发器)
  • 定时任务 - 跨数据库的定时任务支持

📦 安装

go get github.com/eit-cms/eit-db
v1.1.1 - NoSQL 特色能力增强与任务调度优化 (2026-03-23)

核心变化:优化跨适配器任务调度与回退策略,补齐 MongoDB/Neo4j 的可复用特色能力,减少应用层重复实现

🧪 选型决策树(30 秒)

按下面问题快速判断是否适合使用 EIT-DB:

  1. 你的项目是否是多数据库或中大型系统,并且需要长期演进?
  • 是:继续看第 2 条。
  • 否:优先考虑 GORM。
  1. 你是否需要数据库能力治理(能力声明、版本门槛、降级策略、运行时体检)?
  • 是:继续看第 3 条。
  • 否:优先考虑 GORM。
  1. 你是否希望使用“数据库优先”的性能方案(视图组织 + 查询缓存 + 编译层扩展)?
  • 是:EIT-DB 更适合。
  • 否:继续看第 4 条。
  1. 你团队是否能接受较多配置项,以换取更强的可控性和可扩展性?
  • 是:EIT-DB 适合中长期建设。
  • 否:建议使用 GORM 获得更轻量体验。

一句话判断:

  • 追求数据库工程化、能力可治理、性能可演进:选 EIT-DB。
  • 追求轻量开发、简单 CRUD、快速起步:选 GORM。

🗺️ 典型场景映射表

场景 推荐 原因
多数据库并存(如 MySQL + PostgreSQL + Neo4j) EIT-DB 能力声明 + 路由 + 降级机制更适合跨数据库治理
中大型 SaaS(多租户、长期演进) EIT-DB Schema/Changeset/迁移与能力体检更利于长期维护
读多写少且有热点查询 EIT-DB 可结合视图组织与查询缓存层降低重复构建和查询开销
需要严格控制数据库能力边界(版本、插件、运行时能力) EIT-DB 启动体检和能力矩阵可作为上线前门禁
复杂查询逐步扩展到多方言/多后端 EIT-DB Query IR + Compiler 架构降低方言演进成本
单体后台管理系统,主要是简单 CRUD GORM 开箱更轻量,配置少,上手快
小团队快速验证业务想法(MVP) GORM 更符合低心智负担、快交付目标
偏好传统 ORM 风格(尽量少配置) GORM EIT-DB 当前与后续都偏“可治理能力优先”

建议:

  • 如果你的系统生命周期较长、数据库能力差异明显,优先 EIT-DB。
  • 如果你主要追求开发速度和轻量体验,优先 GORM。

🧭 项目能力总览(系统说明)

EIT-DB 面向“中到大型业务系统”的数据库工程实践,核心能力可分为 9 个模块:

  1. Schema 与类型系统
  • 声明式 Schema、字段约束、默认值、验证器。
  • 支持从 Go 结构体反射生成 Schema,也支持手写精确定义。
  1. Changeset 写模型
  • 统一写入入口,支持变更跟踪、校验、事务封装。
  • 推荐使用 ChangesetExecutor / WithChangeset,避免业务层直接操作底层事务原语。
  1. Query Constructor v2
  • 面向多方言的查询构造体系,支持条件组合、排序、分页、CTE/递归等能力映射。
  • 配合特性声明和降级策略,在不同数据库间保持可预期行为。
  1. Query IR 与编译层
  • 引入 Query IR(中间表示)把“查询构造”与“目标语言编译”解耦。
  • 通过编译器层(Compiler)把同一份查询语义编译为不同方言/后端语句,适配器可自定义增强。
  • 这为 SQL 方言增强、未来 Cypher 等非 SQL 编译路径提供统一扩展位。
  1. 数据库能力声明与执行路由
  • 通过 DatabaseFeatures / QueryFeatures 声明数据库原生能力。
  • 运行时按 native → custom → fallback → unsupported 路由执行。
  1. 迁移与 DDL 路径统一
  • 支持 Schema-based migration 与 Raw SQL。
  • 框架工具表和动态表统一走 Schema Builder 路径,降低各 Adapter 手写 DDL 分叉成本。
  1. 动态表与高级扩展能力
  • 支持动态建表与按数据库特性执行高级能力。
  • 包含 SQL Server / PostgreSQL 的高级能力封装,以及 Neo4j / MongoDB 的自定义能力路径。
  1. 运行时能力体检
  • 启动时可对 JSON / Full-text 等能力做 strict/lenient 体检。
  • 适合生产环境做“能力一致性门禁”。
  1. 查询缓存与性能加速
  • 支持完整查询缓存与模板缓存。
  • 采用专业缓存后端,支持容量控制、TTL 与命中统计。

更多能力边界与数据库矩阵请查阅 docs/CAPABILITY_MATRIX.mddocs/ARCHITECTURE.md

🔗 关系语义策略(强/弱支持说明)

关系语义层(HasMany / BelongsTo / HasOne / ManyToMany + Through)的后端支持等级、 PG/MySQL 弱支持原因、PostgreSQL + AGE 说明、以及 SQL Server / MongoDB 策略配置, 统一维护在 docs/RELATION_SEMANTICS.md

✅ 为什么要用 EIT-DB

如果你关注的是企业级数据库能力和长期演进成本,EIT-DB 的价值主要在以下几点:

  1. 企业级能力覆盖
  • 多数据库适配(MySQL / PostgreSQL / SQLite / SQL Server / MongoDB / Neo4j)。
  • 能力声明、版本门槛、运行时探测、降级策略一体化。
  1. 更贴近数据库生态
  • 设计目标不是把数据库当成“被抽象掉的黑盒”,而是把数据库能力显式建模并利用起来。
  • 核心理念:make full use of your database,而不是 use any database as a kv store。
  1. 对性能优化更友好
  • 支持基于视图的查询组织能力(尤其适用于跨表读模型优化)。
  • 支持查询预编译缓存 / 模板缓存(含 TTL 与指标),减少重复构建与热点查询开销。
  1. 架构创新可落地
  • Query IR + Compiler 架构把“语义构造”和“方言编译”拆开,显著降低多数据库演进成本。
  • 查询缓存层与 IR/Compiler 互补:前者解决重复构建的运行时开销,后者解决跨数据库编译的长期复杂度。
  • 这类能力在传统 ORM 中通常依赖大量应用层补丁,而 EIT-DB 在数据库层抽象里原生提供。
  1. 对复杂业务更稳健
  • Changeset 写模型 + 能力路由 + 统一迁移路径,能显著降低“业务增长后重构数据库层”的风险。
  1. 比传统“重应用层 ORM”方案更可控
  • 明确数据库差异,避免在应用层堆叠过多补丁逻辑。
  • 对数据库原生特性(JSON/FTS/递归/高级 DDL)的利用更直接。

🧠 Query IR 与缓存层的创新性与实用性

这两层是 EIT-DB 相对传统 ORM 的关键差异点:

  1. Query IR / Compiler 的创新性
  • 创新点:把 Query Builder 从“直接拼 SQL”升级为“先生成 IR,再由编译器输出目标语句”。
  • 价值:同一查询语义可被不同后端复用,避免把方言细节扩散到业务层和构造层。
  • 结果:新适配器或新方言扩展时,改动集中在编译层,维护边界更清晰。
  1. 查询缓存层的创新性
  • 创新点:不仅缓存最终 query+args,也支持“模板缓存(query + 参数位)”模式。
  • 价值:对高频、同结构不同参数的查询,减少重复 Build 与字符串拼装成本。
  • 结果:在热点读写路径中更稳定地控制 CPU 开销和延迟抖动。
  1. 实用性(工程落地)
  • 可配置容量、TTL、指标开关,适配从开发到生产的不同策略。
  • 提供命中统计接口,便于做真实负载下的优化回路,而不是凭感觉调优。
  • 与视图策略、能力路由一起形成“数据库优先”的性能优化链路。

❗ 什么情况下不推荐使用 EIT-DB

如果你的场景是“简单 CRUD + 少量业务逻辑 + 快速起步”,可以先不考虑 EIT-DB:

  1. 只需要轻量数据库操作
  • 若你不需要能力矩阵、降级路由、运行时体检、动态表、复杂迁移治理等能力,EIT-DB 可能偏重。
  1. 更偏好传统 ORM 体验
  • EIT-DB 当前配置项相对较多,后续企业能力扩展后配置项可能继续增加。
  • 如果你追求极简、传统风格、快速上手体验,推荐优先使用 GORM。
  1. 团队短期目标不是数据库工程化
  • 当团队当前阶段更看重“少配置、快交付”,而非“数据库能力治理和演进”,EIT-DB 不一定是最佳选型。

⚡ 查询预编译与模板缓存

在高频查询场景下,可以把 Query Builder 的构建结果缓存下来复用,避免每次都重新 Build。 当前实现基于专业缓存库(Ristretto),默认最多保留 256 条编译结果;支持 TTL 过期和命中统计。

cfg := &db.Config{
    Adapter: "sqlite",
    SQLite: &db.SQLiteConnectionConfig{Path: "./eit.db"},
    QueryCache: &db.QueryCacheConfig{
        MaxEntries:        512,
        DefaultTTLSeconds: 300,
        EnableMetrics:     true,
    },
}

repo, err := db.NewRepository(cfg)
if err != nil {
    panic(err)
}
1) 缓存完整编译结果(query + args)

适合参数固定的热点查询。

qc, _ := repo.NewQueryConstructor(userSchema)
qc.Select("id", "name").Where(db.Eq("name", "alice")).Limit(10)

query, args, cacheHit, err := repo.BuildAndCacheQuery(ctx, "users:alice:top10", qc)
if err != nil {
    panic(err)
}

rows, err := repo.Query(ctx, query, args...)
_ = cacheHit // true 表示命中缓存,false 表示首次编译
2) 缓存查询模板(query + 参数位)

适合 SQL 结构固定但参数值频繁变化的场景。

qc, _ := repo.NewQueryConstructor(userSchema)
qc.Select("id", "name").Where(db.Eq("id", 0)) // 仅用于构建模板形状

query, argCount, cacheHit, err := repo.BuildAndCacheQueryTemplate(ctx, "users:by_id", qc)
if err != nil {
    panic(err)
}

_ = query
_ = argCount
_ = cacheHit

row, err := repo.QueryRowWithCachedTemplate(ctx, "users:by_id", 1001)
if err != nil {
    panic(err)
}

还可直接使用:

  • StoreCompiledQueryTemplate
  • QueryWithCachedTemplate
  • ExecWithCachedTemplate
  • InvalidateCompiledQuery
  • ClearCompiledQueryCache

说明:

  • 完整查询缓存与模板缓存共享同一套缓存策略与容量预算。
  • 模板缓存会校验参数个数,若传入参数数量不匹配会直接返回错误。
  • 可通过 repo.GetCompiledQueryCacheStats() 读取命中/未命中等运行指标。
  • 也可以通过环境变量覆盖配置:
    • EIT_QUERY_CACHE_MAX_ENTRIES
    • EIT_QUERY_CACHE_DEFAULT_TTL_SECONDS
    • EIT_QUERY_CACHE_ENABLE_METRICS

📌 发布与架构文档

🗄️ Adapter 文档索引

每个适配器都有独立文档,包含快速开始、能力表、特色功能和降级策略:

  • 自定义 Adapter 接入指南: docs/ADAPTER_PROVIDER_GUIDE.md
  • 自定义 Adapter 代码生成:eit-db-cli adapter generate my_backend --kind mongo-like --dir adapter-providers --with-tests --split-features
  • 交互式向导生成:eit-db-cli adapter generate --interactive
Adapter 标识符 文档
SQLite sqlite docs/adapters/SQLITE.md
MySQL mysql docs/adapters/MYSQL.md
PostgreSQL postgres docs/adapters/POSTGRES.md
SQL Server sqlserver docs/adapters/SQLSERVER.md
MongoDB mongodb docs/adapters/MONGODB.md
Neo4j neo4j docs/adapters/NEO4J.md
  • Adapter 特性表:每个数据库适配器通过 DatabaseFeatures / QueryFeatures 声明原生能力。
  • 功能派发与降级:按特性选择最佳实现,不支持的能力可降级到应用层策略。
  • Repository 统一入口:所有读写通过 Repository,避免直接暴露底层 ORM。
  • Schema ⇄ Go 类型:既支持手动 Schema,也支持从 Go 结构体反射生成。
  • 动态表建表一致性:动态表配置统一转换为 Schema,再经方言建表器生成 DDL,避免 Adapter 内手写 CREATE TABLE 分叉。

🕸️ Neo4j 关系特性(新增)

Neo4j 在 EIT-DB 中将“外键能力”按关系语义建模:

  • 不是 SQL FK 约束,但通过关系边表达关联,语义通常更强。
  • 关系可携带属性(payload),可直接承载业务状态与元数据。
  • 支持双向关系语义转换(例如好友请求从单向到双向)。
  • 提供社交聊天预设模型:一对一聊天(双向关系可聊)与多人聊天室(双向 IN 可发言)。
  • 提供已读回执和聊天治理预设:READ_BY / MUTED_IN / BANNED_IN
1) 关系关联查询(无中间表)
result, err := repo.ExecuteFeature(ctx, "relationship_association_query", "", map[string]interface{}{
    "from_label":   "User",
    "to_label":     "User",
    "relationship": "KNOWS",
    "direction":    "both", // out | in | both
})
2) 关系携带业务数据(payload)
result, err := repo.ExecuteFeature(ctx, "relationship_with_payload", "", map[string]interface{}{
    "from_label":   "User",
    "to_label":     "User",
    "relationship": "KNOWS_REQUEST",
    "from_id":      "u1",
    "to_id":        "u2",
    "payload": map[string]interface{}{
        "message": "let's connect",
        "status":  "pending",
    },
})
3) 双向关系语义(请求 -> 好友)
result, err := repo.ExecuteFeature(ctx, "bidirectional_relationship_semantics", "", map[string]interface{}{
    "from_id": "u1",
    "to_id":   "u2",
    // 可选:user_label/request_relationship/friend_relationship
})

说明:该能力默认将单向请求关系(KNOWS_REQUEST)转换为双向好友关系(KNOWS),用于“接受好友请求”这类常见社交语义。

4) 社交聊天预设模型(新增)
// 一对一聊天:仅双向 FRIEND 或双向 FOLLOWS 可发送消息
dmModel, err := repo.ExecuteFeature(ctx, "social_model_one_to_one_chat", "", map[string]interface{}{})
if err != nil {
    panic(err)
}

// 多人聊天室:ChatRoom 单元 + 双向 IN 发言权限 + 单向 IN 入群申请
roomModel, err := repo.ExecuteFeature(ctx, "social_network_preset_model", "", map[string]interface{}{
    "preset": "group_chat_room",
})
if err != nil {
    panic(err)
}

_ = dmModel
_ = roomModel

说明:

  1. 私聊消息采用中间节点 ChatMessage,关系为 SENT -> TO
  2. 群聊支持 AT 关系提及用户、REF 关系引用历史消息。
  3. 聊天消息默认包含 chat_message_fulltextChatMessage.content)全文索引。
  4. 检索模板支持时间窗口、软删除过滤、@ 命中加权。
  5. 已读回执使用 READ_BY,治理策略使用 MUTED_IN / BANNED_IN
  6. 支持 Emoji 嵌入关系:(:Emoji)-[:INCLUDED_BY {index}]->(:ChatMessage) 对应消息中的 {{0}} 占位符,Emoji 作为静态节点可复用。
  7. 详细查询模板见 docs/adapters/NEO4J.md
5) 为什么这类能力适合放在图数据库数据层
  1. 把复杂关系规则(双向关系可聊、双向 IN 可发言、禁言/封禁)直接表达在图关系里,避免应用层重复实现。
  2. API 可以只暴露有限、安全的业务入口,权限判定通过图查询模板统一执行。
  3. 当关系模型迭代时,新增关系类型即可扩展能力,减少多服务联改和越权漏洞风险。

📝 MongoDB 文档编辑与渲染特性(新增)

MongoDB 在文档类业务(CMS/知识库/公告)中,常见需求是“草稿状态流转 + 模板渲染输出”。 EIT-DB 在 Adapter 层提供这组能力,目的不是替代业务层,而是把高频且重复的文档处理逻辑标准化:

  1. 草稿状态语义统一:create/update/publish/archive/restore/query_plan。
  2. 模板渲染入口统一:支持 Go 标准模板、预设模板库和安全策略。
  3. 查询计划结构统一:便于 API 层、后台任务、运营脚本复用同一过滤约定。
快速使用
// 1) 草稿管理
draftOut, err := repo.GetAdapter().ExecuteCustomFeature(ctx, "article_draft_management", map[string]interface{}{
    "operation": "create",
    "article": map[string]interface{}{
        "title": "Draft Title",
        "content": "Draft content",
    },
    "tags": []string{"cms", "mongodb"},
    "category": "tech",
})
if err != nil {
    panic(err)
}

// 2) 查询计划
planOut, err := repo.GetAdapter().ExecuteCustomFeature(ctx, "article_draft_query_plan", map[string]interface{}{
    "status": "published",
    "limit":  20,
    "skip":   0,
})
if err != nil {
    panic(err)
}

// 3) 使用预设模板渲染
renderOut, err := repo.GetAdapter().ExecuteCustomFeature(ctx, "article_template_rendering", map[string]interface{}{
    "template_preset": "news",
    "data": map[string]interface{}{
        "title": "Weekly Digest",
        "lead":  "Highlights",
        "content": "...",
        "reporter": "Team",
        "source": "Internal",
    },
    "strict_variables": true,
    "max_template_size": 4096,
})
if err != nil {
    panic(err)
}

_ = draftOut
_ = planOut
_ = renderOut
REST API 映射建议

下面是推荐的后端路由映射,目标是让前后端在草稿流转、筛选列表和模板渲染上使用同一套语义。

场景 推荐路由 对应特性
创建/更新草稿 POST /api/articles/draft article_draft_management
发布草稿 POST /api/articles/publish article_draft_management
归档/恢复 POST /api/articles/archive 或 /restore article_draft_management
文章列表查询计划 POST /api/articles/query-plan article_draft_query_plan
模板列表 GET /api/articles/templates/presets article_template_preset_library
模板渲染 POST /api/articles/render article_template_rendering

请求示例(模板渲染):

{
    "template_preset": "news",
    "template_name": "news_card",
    "strict_variables": true,
    "max_template_size": 4096,
    "allowed_functions": ["trim", "upper", "join"],
    "data": {
        "title": "Weekly Digest",
        "lead": "Highlights",
        "content": "...",
        "reporter": "Team",
        "source": "Internal"
    }
}

响应建议:

  1. 固定返回 strategy 字段,前端可据此区分渲染模式或列表模式。
  2. 保留 query_plan 原样下发,便于后端网关或任务系统复用。
  3. 透传 security_policy 到响应中,方便前端调试模板配置。

详细参数、预设模板和安全策略建议见:docs/adapters/MONGODB.md

1. 配置数据库连接

使用 YAML 配置文件:

# config.yaml
database:
  adapter: sqlite
    sqlite:
        path: ./data/app.db
  pool:
    max_connections: 25
    idle_timeout: 300

校验 locale 初始化配置(支持多 locale 同时启用):

# config.yaml
database:
    adapter: sqlite
    sqlite:
        path: ./data/app.db
    validation:
        default_locale: zh-CN
        enabled_locales:
            - zh-CN
            - en-US

说明:

  • default_locale 必须是已注册 locale。
  • enabled_locales 支持多个 locale 同时启用;列表中每个 locale 都必须已注册。
  • 当同时设置 default_localeenabled_locales 时,default_locale 必须包含在 enabled_locales 中。
  • NewRepository 初始化时会自动应用以上配置,未启用的 locale 不允许被设为当前 locale。

PostgreSQL JSON 类型配置(默认 jsonb):

database:
    adapter: postgres
    postgres:
        host: localhost
        port: 5432
        username: postgres
        database: app
        ssl_mode: disable
    options:
        postgres_json_type: jsonb # 可选: json | jsonb,默认 jsonb

说明:

  • PostgreSQL 对 TypeJSON 默认映射为 jsonb
  • 可通过 options.postgres_json_type(或 options.json_type)切换为 json
  • 推荐优先使用 jsonb(索引与操作符能力更完整)。

启动期能力体检(strict / lenient):

database:
    adapter: sqlite
    sqlite:
        path: ./data/app.db
    startup_capabilities:
        mode: lenient # 可选: lenient | strict
        capability_modes:
            json_runtime: strict       # 全局 lenient 下,json 仍可强制一致性
            full_text_runtime: lenient # 允许降级
        inspect:
            - json_runtime
            - full_text_runtime
        required:
            - json_runtime

说明:

  • mode=lenient:输出启动体检报告,不因能力不足阻塞启动。
  • mode=strictrequired 中任一能力不满足会直接初始化失败。
  • capability_modes:按能力覆盖模式;可用于“全局 lenient + 单能力 strict”。
  • 当前支持能力项:json_runtimefull_text_runtime
  • 初始化成功后可通过 repo.GetStartupCapabilityReport() 获取最近一次体检结果。

推荐环境模板(dev / staging / prod):

开发环境(dev):以开发效率优先,默认允许降级

database:
    startup_capabilities:
        mode: lenient
        capability_modes:
            json_runtime: lenient
            full_text_runtime: lenient
        inspect:
            - json_runtime
            - full_text_runtime

预发布环境(staging):提前锁定 JSON 一致性,全文允许降级

database:
    startup_capabilities:
        mode: lenient
        capability_modes:
            json_runtime: strict
            full_text_runtime: lenient
        inspect:
            - json_runtime
            - full_text_runtime

生产环境(prod):关键能力严格门禁

database:
    startup_capabilities:
        mode: strict
        capability_modes:
            json_runtime: strict
            full_text_runtime: lenient
        inspect:
            - json_runtime
            - full_text_runtime
        required:
            - json_runtime

建议:

  • 如果业务对全文检索排序/召回一致性有硬要求,可将 full_text_runtime 也改为 strict
  • 先在 staging 跑一周观察启动报告,再提升到 prod 策略。
升级说明(v1.0 locale 配置)

如果你从旧版本升级到当前版本,请关注以下行为变化:

  1. 初始化时机变化:

    • validation 配置会在 NewRepository 阶段统一应用,不再建议在业务入口分散设置全局 locale。
  2. locale 可用性收紧:

    • 运行时 SetValidationLocale(locale) 只允许切换到已启用 locale。
    • 当请求上下文中传入未启用 locale 时,会自动回退到默认 locale。
  3. 推荐迁移步骤:

    • 在配置文件中显式声明 validation.default_localevalidation.enabled_locales
    • 对 CMS/多区域项目,统一启用需要的 locale 列表(例如 zh-CNen-US)。
    • 若有自定义 profile,先注册 profile,再将其加入 enabled_locales

多 Adapter YAML 配置(新):

# adapters.yaml
adapters:
    primary:
        adapter: postgres
        postgres:
            host: localhost
            port: 5432
            username: postgres
            password: ""
            database: app
            ssl_mode: disable

    search:
        adapter: mongodb
        mongodb:
            uri: "mongodb://localhost:27017"
            database: search_db

使用多 Adapter 配置:

registry, err := eit_db.LoadAdapterRegistry("adapters.yaml")
if err != nil {
        panic(err)
}

if err := eit_db.RegisterAdapterConfigs(registry); err != nil {
        panic(err)
}

repo, err := eit_db.NewRepositoryFromAdapterConfig("primary")
if err != nil {
        panic(err)
}
defer repo.Close()

或使用代码配置:

package main

import "github.com/eit-cms/eit-db"

func main() {
    config := &eit_db.Config{
        Adapter: "sqlite",
        SQLite: &eit_db.SQLiteConnectionConfig{
            Path: "./data/app.db",
        },
        Pool: &eit_db.PoolConfig{
            MaxConnections: 25,
            IdleTimeout:    300,
        },
    }
    
    repo, err := eit_db.NewRepository(config)
    if err != nil {
        panic(err)
    }
    defer repo.Close()
    
    // 现在可以使用 Repository API
}
2. 定义 Schema(手动)
func BuildUserSchema() db.Schema {
    schema := db.NewBaseSchema("users").
        AddTimestamps().
        AddSoftDelete()
    
    schema.AddField(
        db.NewField("id", db.TypeInteger).
            PrimaryKey().
            Build(),
    )
    
    schema.AddField(
        db.NewField("email", db.TypeString).
            Null(false).
            Unique().
            Validate(&db.EmailValidator{}).
            Build(),
    )
    
    return schema
}

AddTimestamps() 会自动补齐 created_atupdated_atTypeTimeNOT NULL、默认 CURRENT_TIMESTAMP); AddSoftDelete() 会补齐可空的 deleted_at

时间类型默认映射(TypeTime):

数据库 默认列类型
PostgreSQL TIMESTAMP
MySQL DATETIME
SQLite DATETIME
SQL Server DATETIME2

说明:

  • 上表为 Schema Migration 的默认类型选择,用于兼顾跨库一致性与通用兼容。
  • 如果业务对时区或精度有严格要求,建议在迁移中使用适配器定制 SQL(例如显式指定 TIMESTAMP WITH TIME ZONEDATETIME(6) 等)。

应用层日期构建工具:

// 1) 按年月日构建(默认 00:00:00)
deadline := db.DateByYMD(2027, 3, 17).Build()

// 2) 基于当前日期快速偏移
oneYearLater := db.OneYearLater()   // 一年后
twoMonthsLater := db.MonthsLater(2) // 两个月后

// 3) 链式构建
nextBilling := db.TodayBuilder().
    AddMonths(1).
    At(9, 0, 0).
    Build()

// 4) 月初/月末边界
monthStart := db.StartOfCurrentMonth()
monthEnd := db.EndOfCurrentMonth()

// 5) UTC 快捷函数
oneYearLaterUTC := db.OneYearLaterUTC()
nextMonthUTC := db.MonthsLaterUTC(1)

// 6) 季度边界
quarterStart := db.StartOfCurrentQuarter()
quarterEnd := db.EndOfCurrentQuarter()

// 7) 业务语义糖
nextInvoiceDate := db.NextBillingDate(15) // 下一个“每月 15 号”账单日
slaDue := db.SLADeadline(24, true)        // 24 个工作日小时后的截止时间

常用函数:

  • DateByYMD(year, month, day):按年月日创建 Builder。
  • TodayBuilder():基于今天创建 Builder(时分秒为 0)。
  • YearsLater(n) / MonthsLater(n) / DaysLater(n):快速获取未来日期。
  • OneYearLater()YearsLater(1) 语义糖。
  • StartOfMonth() / EndOfMonth():可在 Builder 上对齐到当月边界。
  • StartOfCurrentMonth() / EndOfCurrentMonth():快速获取当前月边界。
  • StartOfQuarter() / EndOfQuarter():可在 Builder 上对齐到当前季度边界。
  • StartOfCurrentQuarter() / EndOfCurrentQuarter():快速获取当前季度边界。
  • TodayUTCBuilder() / YearsLaterUTC(n) / MonthsLaterUTC(n) / DaysLaterUTC(n):UTC 版本工具。
  • OneYearLaterUTC():UTC 下的 YearsLaterUTC(1) 语义糖。
  • NextBillingDate(day):获取下一个账单日(超月末自动对齐)。
  • SLADeadline(hours, workdaysOnly):SLA 截止计算(支持仅工作日小时)。

日期条件已可直接纳入 Query Builder 工具链:

qc, _ := repo.NewQueryConstructor(userSchema)

// 当天注册用户
qc.Where(db.DateOn("created_at", 2026, 3, 17))

// 当前月内活跃用户
qc.WhereAll(
    db.Eq("status", "active"),
    db.DateInCurrentMonth("updated_at"),
)

// 今天工作时段(例如 09:00-18:00)
qc.Where(db.DateInBusinessHours("created_at", 9, 18))

// 最近 5 个工作日(可附加节假日)
holiday := db.DateByYMD(2026, 10, 1).Build()
qc.Where(db.DateInLastBusinessDays("updated_at", 5, holiday))

// 自定义时间区间
start := db.DateByYMD(2026, 1, 1).Build()
end := db.DateByYMD(2026, 3, 31).EndOfMonth().Build()
qc.Where(db.DateRange("created_at", start, end))

可用日期条件:

  • DateOn(field, year, month, day):某一天(闭开区间)。
  • DateFrom(field, start) / DateTo(field, end):起止边界条件。
  • DateRange(field, start, end):时间区间(自动纠正 start/end 顺序)。
  • DateInCurrentMonth(field) / DateInCurrentQuarter(field):当前月/季度窗口。
  • DateInBusinessHours(field, startHour, endHour):当前日期工作时段窗口(支持跨天)。
  • DateInLastBusinessDays(field, n, holidays...):最近 N 个工作日窗口(跳过周末与节假日)。

预置组合条件(业务语义糖):

// 活跃用户 + 工作时段(默认 status=active, updated_at, 09:00-18:00)
qc.Where(db.ActiveUsersInBusinessHours())

// 订单在当前季度(默认 created_at)
qc.Where(db.OrdersInCurrentQuarter())

// 待处理任务在未来 N 个工作日内到期(默认 status=pending, due_at)
holiday := db.DateByYMD(2026, 10, 1).Build()
qc.Where(db.DueSoonTasksInBusinessDays(3, holiday))

// 统一入口(推荐,便于后续扩展其他模块)
qc.Where(db.Presets.Date.ActiveUsersInBusinessHours())
qc.Where(db.Presets.Date.OrdersInCurrentQuarter())
qc.Where(db.Presets.Date.DueSoonTasksInBusinessDays(3, holiday))

可配置版本:

  • ActiveUsersInBusinessHoursBy(statusField, activeValue, timeField, startHour, endHour)
  • OrdersInCurrentQuarterBy(timeField)

说明:

  • 现有顶层函数保持兼容可继续使用。
  • 建议新代码优先使用 Presets 入口,后续其他模块会逐步纳入该命名空间。
  • Presets 仅承载应用层语义预置;Mongo/Neo4j/SQL 方言等 Adapter 细节预置单独维护,不放入这里。
  • 分层与命名规范见:docs/PRESETS_CONVENTIONS.md

自动分表(基于自动建表上层 API):

// 1) 按数据规模(哈希槽)分表
scaleTpl := db.NewDataScaleShardingTemplate("tenant_id", 16)

// 2) 按日期分表(年 / 月 / 日)
dateTpl := db.NewDateShardingTemplate("created_at", db.DateShardingByMonth)

// 3) 按地区分表
regionTpl := db.NewRegionShardingTemplate("region", "cn", "us", "eu")

manager, _ := db.NewAutoShardingManager(hook, "orders_dynamic", dateTpl)
tableName, _ := manager.EnsureShardTable(ctx, map[string]interface{}{
    "created_at": "2026-03-17",
})

// 稳定性检查工具:验证模板在样本数据上的稳定性与分片数量边界
tool := db.NewShardingStabilityTool()
report := tool.ValidateTemplate(dateTpl, []map[string]interface{}{
    {"created_at": "2026-03-01"},
    {"created_at": "2026-03-17"},
}, 12)

// 风险等级:low / medium / high
if report.RiskLevel == db.ShardingRiskHigh {
    // 可在发布流程中阻断上线
}

// 发布门禁辅助:
if !report.CanRelease() {
    reasons := report.ReleaseBlockReasons()
    _ = reasons // 可直接上报到 CI / 发布系统
}

// 分表命名校验(非法字符、超长、重复)
namingErrs := tool.ValidateShardNaming("orders", []string{"202603", "202604"})
_ = namingErrs
_ = report
_ = tableName
_ = scaleTpl
_ = regionTpl

说明:

  • AutoShardingManager 会先根据模板计算 shard id,再委托 DynamicTableHook.CreateDynamicTable 确保子表存在。
  • 当前实现是应用层模板路由,不依赖 Adapter 私有类型,便于跨数据库统一使用。
  • 稳定性工具会输出热分片告警(HotShards)与迁移建议(Recommendations),用于提前治理分片偏斜。
  • ValidateShardNaming 可在上线前做分表命名体检,降低跨数据库命名兼容风险。
  • RiskLevel 可直接用于运维看板或发布门禁(high 建议阻断,medium 建议人工确认)。
  • CanRelease() / ReleaseBlockReasons() 可直接作为 CI 门禁输入。
3. 定义 Schema(从 Go 结构体生成)
type User struct {
    ID        int       `eit_db:"id,primary_key,auto_increment"`
    Email     string    `eit_db:"email,unique,not_null"`
    CreatedAt time.Time `eit_db:"created_at"`
}

schema, err := db.InferSchema(User{})
if err != nil {
    panic(err)
}

// 建议优先使用 eit_db tag,避免与其他库常见的 db tag 命名冲突。

兼容策略时间线见:docs/REFLECTION_GUIDE.md

4. 使用 Changeset 进行业务写操作(推荐)

业务层默认应通过 Changeset 执行器写数据,而不是直接使用底层事务原语。

repo, err := db.NewRepository(config)
if err != nil {
    panic(err)
}
defer repo.Close()

userSchema := BuildUserSchema()

executor, err := repo.NewChangesetExecutor(context.Background(), userSchema)
if err != nil {
    panic(err)
}

cs := db.NewChangeset(userSchema)
cs.Cast(map[string]interface{}{
    "email": "alice@example.com",
}).Validate()

if !cs.IsValid() {
    panic(cs.ErrorString())
}

_, err = executor.Insert(cs)
if err != nil {
    panic(err)
}

多步写操作请使用 WithChangeset

err := repo.WithChangeset(context.Background(), userSchema, func(executor *db.ChangesetExecutor) error {
    first := db.NewChangeset(userSchema).
        Cast(map[string]interface{}{"email": "alice@example.com"}).
        Validate()
    if !first.IsValid() {
        return fmt.Errorf(first.ErrorString())
    }
    if _, err := executor.Insert(first); err != nil {
        return err
    }

    second := db.NewChangeset(userSchema).
        Cast(map[string]interface{}{"email": "bob@example.com"}).
        Validate()
    if !second.IsValid() {
        return fmt.Errorf(second.ErrorString())
    }
    _, err := executor.Insert(second)
    return err
})
if err != nil {
    panic(err)
}

Repository.Begin 仍可用于底层集成(迁移、框架内部等),但不建议业务层直接作为默认写路径。

4.1 Changeset 验证能力
// 创建 Changeset
cs := db.NewChangeset(userSchema)
cs.Cast(map[string]interface{}{
    "name":  "Alice",
    "email": "alice@example.com",
    "age":   25,
})

// 链式验证
cs.ValidateRequired([]string{"name", "email"}).
   ValidateLength("name", 2, 50).
   ValidateFormat("email", `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`).
   ValidateNumber("age", map[string]interface{}{"greater_than_or_equal_to": 18.0})

// 检查验证结果
if cs.IsValid() {
    // 数据有效,可以保存
    data := cs.GetChanges()
} else {
    // 显示错误
    for field, errors := range cs.Errors() {
        fmt.Printf("%s: %v\n", field, errors)
    }
}

可用的验证方法:

  • ValidateRequired(fields) - 验证必填字段
  • ValidateLength(field, min, max) - 验证字符串长度
  • ValidateFormat(field, pattern) - 正则表达式验证
  • ValidateInclusion(field, list) - 白名单验证
  • ValidateExclusion(field, list) - 黑名单验证
  • ValidateNumber(field, opts) - 数字范围验证

locale 与 Changeset 联动:

  • 可通过 changeset.ValidateWithLocale(locale) 按指定 locale 执行校验。
  • 可通过 changeset.ValidateWithContext(ctx) + WithValidationLocale(ctx, locale) 在请求上下文中透传 locale。
  • 当上下文 locale 未启用时,系统会自动回退到当前默认 locale。
5. 查询构造器(v2 推荐)

v2 是当前推荐入口,默认提供方言标识符引用、参数化占位符和条件组合能力。

repo, err := db.NewRepository(config)
if err != nil {
    panic(err)
}
defer repo.Close()

schema := db.NewBaseSchema("users")

qc, err := repo.NewQueryConstructor(schema)
if err != nil {
    panic(err)
}

sql, args, err := qc.
    Select("id", "email").
    Where(db.Eq("status", "active")).
    OrderBy("created_at", "DESC").
    Limit(20).
    Build(context.Background())
if err != nil {
    panic(err)
}

rows, err := repo.Query(context.Background(), sql, args...)
_ = rows
_ = err
统一 Query/Exec 自动路由(跨 Adapter)

当你不想手动区分“这是查询还是写入”时,可直接使用自动路由入口:

result, err := repo.ExecuteQueryConstructorAuto(ctx, qc)
if err != nil {
    panic(err)
}

switch result.Mode {
case "query":
    fmt.Println("rows:", len(result.Rows))
case "exec":
    if result.Exec != nil {
        fmt.Println("affected:", result.Exec.RowsAffected)
    }
}

自动路由语义:

  • SQL:SELECT/WITH...SELECT 走 Query,其余走 Exec。
  • Neo4j:MATCH/RETURN/CALL...YIELD 走 Query,其余走 ExecCypher
  • MongoDB:支持 MongoQueryConstructor 编译出的 MONGO_FIND::(query)与 MONGO_WRITE::(exec)计划。

返回结果字段对照见:docs/AUTO_EXEC_RESULT_MATRIX.md

MongoDB 写入可选详情:

schema := db.NewBaseSchema("users")
qc, _ := repo.NewQueryConstructor(schema)
mongoQC := qc.GetNativeBuilder().(*db.MongoQueryConstructor)

result, err := repo.ExecuteQueryConstructorAuto(ctx,
    mongoQC.
        InsertOne(map[string]interface{}{"name": "alice"}).
        ReturnInsertedID().
        ReturnWriteDetail(),
)
if err != nil {
    panic(err)
}

fmt.Println(result.Exec.RowsAffected)
fmt.Println(result.Exec.Counters)
fmt.Println(result.Exec.Details) // inserted_id / inserted_ids / matched_count / modified_count / deleted_count ...
兼容路径(仅历史项目)

v1 NewQueryBuilder 仍可用,但仅用于历史项目兼容,不建议新代码使用:

  • 默认会打印一次迁移提示
  • 可通过 db.SetLegacyQueryBuilderWarningEnabled(false) 关闭提示
  • 新功能只保证在 v2 + Changeset 执行器路径持续演进
SQLite JSON 降级语义(QueryFeatures)

SQLite 的 json_path 在 QueryFeatures 中按如下顺序处理:

  1. 优先使用 SQLite JSON1 扩展(原生 json_extract)。
  2. 若运行环境缺失 JSON1,可注册自定义函数 JSON_EXTRACT_GOcustom_function 降级)。
  3. 若未注册自定义函数,再回退到应用层解析(application_layer)。

可通过 QueryFeatures 获取当前策略:

qf := db.NewSQLiteQueryFeatures()

fallback := qf.GetFallbackStrategy("json_path")
note := qf.GetFeatureNote("json_path")
alt := qf.GetAlternativeSyntax("json_path")

fmt.Println(fallback) // custom_function
fmt.Println(note)
fmt.Println(alt)      // SELECT JSON_EXTRACT_GO(payload, '$.path') FROM ...

如需启用 JSON_EXTRACT_GO,可参考 SQLite 自定义函数注册能力(见 sqlite_custom_functions.go)。

6. 数据库迁移工具 (v1.0.0+)

EIT-DB 提供了强大的迁移工具,支持两种迁移方式:

命令统一说明:

  • 主入口:eit-db-cli
  • 兼容别名:eit-migrate(继续可用)
  • 兼容策略:旧别名仅做兼容,新功能优先且仅保证在 eit-db-cli 下持续演进。

初始化迁移项目:

# 安装工具
go install github.com/eit-cms/eit-db/cmd/eit-migrate@latest

# 或直接构建
cd /path/to/eit-db
go build -o ~/bin/eit-db-cli ./cmd/eit-migrate

# 初始化迁移项目
eit-db-cli init

生成迁移文件:

# 生成 Schema-based 迁移(类型安全)
eit-db-cli generate create_users_table

# 生成 Raw SQL 迁移(完全控制)
eit-db-cli generate add_indexes --type sql

运行迁移:

cd migrations
cp .env.example .env
# 编辑 .env 配置数据库连接

# 运行迁移
go run . up

# 查看状态
go run . status

# 回滚最后一个迁移
go run . down

Schema-based Migration 示例:

func NewMigration_20260203150405_CreateUsersTable() db.MigrationInterface {
    migration := db.NewSchemaMigration("20260203150405", "create_users_table")

    userSchema := db.NewBaseSchema("users")
    userSchema.AddField(&db.Field{
        Name:    "id",
        Type:    db.TypeInteger,
        Primary: true,
        Autoinc: true,
    })
    userSchema.AddField(&db.Field{
        Name: "email",
        Type: db.TypeString,
        Null: false,
        Unique: true,
    })

    migration.CreateTable(userSchema)
    return migration
}

Raw SQL Migration 示例:

func NewMigration_20260203160000_AddIndexes() db.MigrationInterface {
    migration := db.NewRawSQLMigration("20260203160000", "add_indexes")

    migration.AddUpSQL(`
        CREATE INDEX idx_users_email ON users(email);
        CREATE INDEX idx_posts_user_id ON posts(user_id);
    `)

    migration.AddDownSQL(`
        DROP INDEX idx_users_email;
        DROP INDEX idx_posts_user_id;
    `)

    return migration
}

详细文档:

🗄️ 支持的数据库

数据库 适配器 状态
SQLite sqlite
MySQL mysql
PostgreSQL postgres
SQL Server sqlserver
MongoDB mongo
Neo4j neo4j

📖 文档

❓ 常见问题

PostgreSQL 连接失败

检查是否在使用信任认证。如果使用信任认证,确保密码字段为空字符串:

config := &eit_db.Config{
    Adapter: "postgres",
    Postgres: &eit_db.PostgresConnectionConfig{
        Username: "postgres",
        Password: "", // 信任认证
        Database: "myapp",
        SSLMode:  "disable",
    },
}
MySQL 连接失败

确保 MySQL 服务器正在运行,用户名和密码正确:

config := &eit_db.Config{
    Adapter: "mysql",
    MySQL: &eit_db.MySQLConnectionConfig{
        Host:     "localhost",
        Port:     3306,
        Username: "root",
        Password: "password",
        Database: "myapp",
    },
}
QueryBuilder v1 提示如何关闭

如果你在增量迁移期间暂时继续使用 NewQueryBuilder,可以关闭兼容提示:

db.SetLegacyQueryBuilderWarningEnabled(false)
为什么 Repository.Begin 会打印提示

Repository.Begin 被视为底层事务原语,主要面向迁移与框架集成。 业务层推荐使用 NewChangesetExecutorWithChangeset,这样默认不会绕过 Changeset 校验与统一写入路径。

如确有底层事务场景,可按需关闭提示:

db.SetLowLevelTransactionWarningEnabled(false)

🧪 测试

运行所有测试:

go test -v ./...

运行特定测试:

# Changeset 验证测试
go test -v -run TestValidate

# 适配器测试
go test -v -run TestSQLiteAdapterInitialization

# 动态表测试
go test -v -run TestDynamicTable

性能基准测试:

go test -bench=. -benchmem

📊 版本更新

v1.1.1 - NoSQL 特色能力增强与任务调度优化 (2026-03-23)

核心里程碑:补齐可直接复用的 NoSQL 特色能力模板,让应用层从“重复造轮子”转向“组合调用”

  • ✅ 定时任务覆盖策略升级:适配器不支持原生任务时,Repository 层可回退到统一调度器(默认开启,可配置关闭)
  • ✅ MongoDB 新增日志与文档工作流特色能力:热词分析、规则分词、草稿管理、模板渲染与模板库
  • ✅ Neo4j 社交/聊天预置模型增强:一对一聊天、群聊、已读回执、禁言/封禁、消息全文检索
  • ✅ 表情语义模型改进:静态 Emoji 节点可复用,使用 INCLUDED_BY(index) 与消息占位符绑定
  • ✅ 文档与测试完善:README + 适配器文档同步更新,回归测试通过
v1.1.0 - 关系语义与多后端策略升级 (2026-03-20)

核心里程碑:关系语义从“隐式外键推断”升级为“Schema 显式注册 + 适配器策略执行”

  • ✅ 新增 Schema 关系注册能力:HasMany / HasOne / BelongsTo / ManyToMany(...).Through(...)
  • ✅ 关系元数据进入 Query IR,编译层可按后端做差异化优化
  • ✅ MongoDB 支持语义化 JoinWith,新增 lookup / pipeline 策略与 through 产物折叠控制
  • ✅ SQL Server 新增 many-to-many 策略:direct_join / recursive_cte,支持深度与 MAXRECURSION 配置
  • ✅ Neo4j 支持命名关系类型映射,ManyToMany through 可编译为两跳关系路径
  • ✅ 文档升级为单一事实源:关系语义、能力矩阵、架构说明统一对齐

v1.0.0 - 正式版发布 (2026-03-18)

核心里程碑:API 边界稳定、发布门验证通过、完成 v1 正式发布

  • ✅ 业务写路径统一到 Changeset(WithChangeset / NewChangesetExecutor
  • ✅ Adapter 能力路由与运行时检查收敛
  • GetGormDB 兼容保留但固定返回 nil,不再暴露 ORM
  • ✅ Query Constructor v2 成为推荐入口,v1 保留兼容
  • ✅ 发布门(Release Gate)完整通过(含可选 DB 套件)

v0.4.2 - SQL Server Adapter (2026-02-03)

核心新增:SQL Server 数据库支持,验证三层查询构造架构的扩展性

SQLServerDialect 实现

  • ✅ 方括号标识符引用:[table].[column] 而非反引号或双引号
  • ✅ @pN 参数占位符:@p1, @p2 而非 ?$1
  • ✅ SQL Server 专属分页语法:OFFSET n ROWS FETCH NEXT m ROWS ONLY
  • ✅ 完整的三层架构兼容性验证

SQLServerAdapter 实现

  • ✅ 基于 github.com/microsoft/go-mssqldb 和 gorm.io/driver/sqlserver
  • ✅ 默认端口 1433,支持连接池配置
  • ✅ 完整的事务支持(Commit/Rollback/Exec/Query/QueryRow)
  • ✅ GetQueryBuilderProvider() 返回 SQL Server 方言提供者

测试覆盖

  • ✅ TestSQLServerDialect:5个测试用例验证 SQL 生成
  • ✅ TestSQLServerIdentifierQuoting:方括号引用验证
  • ✅ TestSQLServerComplexQuery:复杂查询验证
  • ✅ TestSQLServerDialectQuotingComparison:跨方言对比测试
  • ✅ 所有现有测试继续通过,100% 向后兼容

架构验证:SQL Server 的独特语法完美融入三层架构,证明设计的可扩展性


v0.4.1 - 查询构造器三层架构 (2026-02-03)

核心改进:建立查询构造器的三层分离架构,为 v0.5.0+ 多 Adapter 支持打基础

顶层 - 用户 API 层

  • QueryConstructor 接口:用户通过此接口构建查询
  • ✅ 流式 API:Where(), WhereAll(), WhereAny(), Select(), OrderBy(), Limit(), Offset()
  • ✅ 灵活的条件构造器:Eq(), Ne(), Gt(), Lt(), Gte(), Lte(), In(), Between(), Like()
  • ✅ 复合条件:And(), Or(), Not()

中层 - Adapter 转义层

  • QueryConstructorProvider 接口:每个 Adapter 通过此接口提供数据库特定的实现
  • QueryBuilderCapabilities 结构体:声明 Adapter 支持的操作和优化特性
  • ✅ 方言无关的 API 设计

底层 - 数据库执行层

  • SQLQueryConstructor 实现:标准 SQL 生成
  • SQLDialect 接口:支持不同的 SQL 方言
  • ✅ 方言实现:MySQLDialect, PostgreSQLDialect, SQLiteDialect
  • ✅ 参数化查询:防止 SQL 注入,自动转换为 ?$1 等占位符

测试覆盖:20+ 单元测试,验证每个条件、操作符和组合的 SQL 生成正确性

v0.4.0 - Migration 工具 (2026-02-03)

✅ 全新的数据库迁移工具
✅ 支持 Schema-based 和 Raw SQL 两种迁移方式
✅ 命令行工具(当前主入口 eit-db-cli,兼容别名 eit-migrate
✅ 自动版本管理和状态追踪
✅ 支持跨数据库和非关系型数据库

v0.3.1 - Changeset 增强 (2026-02-03)

✅ 新增 7 个验证方法(Required, Length, Format, Inclusion, Exclusion, Number, GetChange)
✅ 完整的测试套件
✅ 修复 TestDynamicTableConfigBuilder 测试

v0.1.4 - 稳定性修复 (2026-02-02)

✅ 修复 MySQL 驱动连接与初始化问题
✅ 修复 PostgreSQL 认证 "role does not exist" 问题
✅ 改进连接池配置,完整支持 MaxLifetime
✅ 增强错误诊断信息,包含完整的连接参数
✅ 添加完整的测试套件(10+ 测试用例)
✅ 100% 向后兼容

详见 版本修复说明

🔗 相关链接

🧪 测试

单元测试

运行核心库测试:

go test ./... -v
集成测试

测试所有适配器(SQLite 无需依赖,PostgreSQL/MySQL 需要 Docker):

# 仅 SQLite 测试(推荐开发期间使用)
go test ./adapter-application-tests -v

# 或使用测试脚本
./test.sh integration

# 完整测试(启动所有数据库 + 运行测试)
./test.sh all-keep
使用 Docker 运行完整测试
# 启动 PostgreSQL、MySQL、SQL Server 容器
./test.sh start

# 运行所有测试
./test.sh integration

# 停止容器
./test.sh stop

# 或一步完成
./test.sh all
测试覆盖范围

详见 测试覆盖范围文档

已验证的功能:

  • ✅ SQLite: CRUD、CTE、窗口函数、JSON、事务、UPSERT
  • ✅ 多适配器管理:反射注册、YAML 配置、工厂模式
  • ✅ QueryFeatures:版本感知、优先级路由、特性声明
  • ⏭️ PostgreSQL:物化视图、数组、全文搜索、JSONB
  • ⏭️ MySQL:全文搜索、JSON、窗口函数、ON DUPLICATE KEY
  • ⏭️ SQL Server:MERGE、递归 CTE、临时表

📝 许可证

MIT License

📧 支持

如有问题或建议,欢迎提交 Issue 或 Pull Request。


最后更新:2026-03-23
当前版本:v1.1.1(Patch 发布)

Documentation

Index

Constants

View Source
const (
	// StartupCapabilityJSONRuntime JSON 运行时能力。
	StartupCapabilityJSONRuntime = "json_runtime"
	// StartupCapabilityFullTextRuntime 全文运行时能力。
	StartupCapabilityFullTextRuntime = "full_text_runtime"
)
View Source
const DefaultCompiledQueryCacheDefaultTTLSeconds = 0
View Source
const DefaultCompiledQueryCacheEnableMetrics = true
View Source
const DefaultCompiledQueryCacheMaxEntries = 256

Variables

View Source
var (
	PostgreSQLSupport = &RelationshipSupport{
		OneToOne:           true,
		OneToMany:          true,
		ManyToMany:         true,
		SupportsForeignKey: true,
		SupportsJoin:       true,
		SupportsNested:     true,
		Strategy:           StrategyNative,
	}

	SQLServerSupport = &RelationshipSupport{
		OneToOne:           true,
		OneToMany:          true,
		ManyToMany:         true,
		SupportsForeignKey: true,
		SupportsJoin:       true,
		SupportsNested:     true,
		Strategy:           StrategyNative,
	}

	MySQLSupport = &RelationshipSupport{
		OneToOne:           true,
		OneToMany:          true,
		ManyToMany:         false,
		SupportsForeignKey: true,
		SupportsJoin:       true,
		SupportsNested:     false,
		Strategy:           StrategyJoinTable,
	}

	SQLiteSupport = &RelationshipSupport{
		OneToOne:           true,
		OneToMany:          true,
		ManyToMany:         false,
		SupportsForeignKey: false,
		SupportsJoin:       true,
		SupportsNested:     false,
		Strategy:           StrategyJoinTable,
	}

	MongoDBSupport = &RelationshipSupport{
		OneToOne:           true,
		OneToMany:          true,
		ManyToMany:         true,
		SupportsForeignKey: false,
		SupportsJoin:       false,
		SupportsNested:     true,
		Strategy:           StrategyApplication,
	}

	GraphDatabaseSupport = &RelationshipSupport{
		OneToOne:           true,
		OneToMany:          true,
		ManyToMany:         true,
		SupportsForeignKey: false,
		SupportsJoin:       false,
		SupportsNested:     true,
		Strategy:           StrategyNative,
	}

	NoRelationshipSupport = &RelationshipSupport{
		OneToOne:           false,
		OneToMany:          false,
		ManyToMany:         false,
		SupportsForeignKey: false,
		SupportsJoin:       false,
		SupportsNested:     false,
		Strategy:           StrategyNotSupported,
	}
)

预定义的常见数据库支持情况

View Source
var GlobalCrossTableViewRegistry = NewCrossTableViewRegistry()

GlobalCrossTableViewRegistry 全局视图注册表,app 启动时调用 RegisterSchemasIntoGlobal 填充。

View Source
var Presets = PresetRegistry{
	Date: DatePresetRegistry{},
}

Presets 全局预置入口。

Functions

func CompareQueryFeatures

func CompareQueryFeatures(qf1, qf2 *QueryFeatures) map[string]interface{}

CompareQueryFeatures 对比两个数据库的查询特性

func ConfigureValidationLocales added in v1.0.0

func ConfigureValidationLocales(defaultLocale string, enabledLocales []string) error

ConfigureValidationLocales 配置默认 locale 与启用的 locale 集合。 enabledLocales 为空时默认启用所有已注册 profile。

func ConvertValue

func ConvertValue(value interface{}, targetType FieldType) (interface{}, error)

ConvertValue 值类型转换

func DaysLater added in v1.0.0

func DaysLater(days int) time.Time

DaysLater 基于当前日期返回 N 天后日期(00:00:00)。

func DaysLaterUTC added in v1.0.0

func DaysLaterUTC(days int) time.Time

DaysLaterUTC 基于当前 UTC 日期返回 N 天后日期(00:00:00 UTC)。

func DefaultSQLiteJSONFallbackFunctions added in v1.0.0

func DefaultSQLiteJSONFallbackFunctions() map[string]interface{}

DefaultSQLiteJSONFallbackFunctions 返回 SQLite JSON 降级函数集合。 当目标环境未启用 JSON1 扩展时,可使用这些函数作为兼容方案。

func EndOfCurrentMonth added in v1.0.0

func EndOfCurrentMonth() time.Time

EndOfCurrentMonth 返回当前月月末(本地时区,23:59:59)。

func EndOfCurrentQuarter added in v1.0.0

func EndOfCurrentQuarter() time.Time

EndOfCurrentQuarter 返回当前季度结束时间(本地时区,23:59:59)。

func ErrCursorPrimaryValueRequired added in v1.1.1

func ErrCursorPrimaryValueRequired(field string) error

func ExampleMySQLDynamicTable

func ExampleMySQLDynamicTable()

ExampleMySQLDynamicTable MySQL 动态建表示例 场景:在电商系统中,为每个店铺创建独立的订单表来分离数据

func ExamplePostgreSQLDynamicTable

func ExamplePostgreSQLDynamicTable()

ExamplePostgreSQLDynamicTable PostgreSQL 动态建表示例 场景:在 CMS 系统中,当创建自定义字段时,自动为该自定义字段创建专属表存储字段数据

func ExampleSQLServerDynamicTable added in v1.0.0

func ExampleSQLServerDynamicTable()

ExampleSQLServerDynamicTable SQL Server 动态建表示例 场景:在企业系统中,为每个业务单元创建独立的审计日志表

func ExampleSQLiteDynamicTable

func ExampleSQLiteDynamicTable()

ExampleSQLiteDynamicTable SQLite 动态建表示例 场景:在日志系统中,为每个应用创建独立的日志表

func GetEnabledValidationLocales added in v1.0.0

func GetEnabledValidationLocales() []string

GetEnabledValidationLocales 获取当前启用的 locale 列表。

func GetStructFields

func GetStructFields(v interface{}) []string

GetStructFields 获取结构体的字段名列表(按 eit_db/db/gorm 解析顺序)

func GetStructValues

func GetStructValues(v interface{}) []interface{}

GetStructValues 获取结构体的字段值列表

func GetValidationLocale added in v1.0.0

func GetValidationLocale() string

GetValidationLocale 获取当前校验规则 locale。

func JSONExtractGo added in v1.0.0

func JSONExtractGo(jsonText string, path string) interface{}

JSONExtractGo 是一个轻量 JSON 路径提取函数。 支持路径格式:$.a.b、$.arr[0].name。

func LoadAdapterRegistry

func LoadAdapterRegistry(filename string) (map[string]*Config, error)

LoadAdapterRegistry 从文件加载多 Adapter 配置(支持 JSON 和 YAML)

func MonthsLater added in v1.0.0

func MonthsLater(months int) time.Time

MonthsLater 基于当前日期返回 N 个月后日期(00:00:00)。

func MonthsLaterUTC added in v1.0.0

func MonthsLaterUTC(months int) time.Time

MonthsLaterUTC 基于当前 UTC 日期返回 N 个月后日期(00:00:00 UTC)。

func NextBillingDate added in v1.0.0

func NextBillingDate(day int) time.Time

NextBillingDate 返回“下一个账单日”日期(本地时区,00:00:00)。 规则:若本月账单日尚未到达(含当天)则返回本月,否则返回下月;超出月天数时自动对齐到月末。

func OneYearLater added in v1.0.0

func OneYearLater() time.Time

OneYearLater 返回当前日期一年后的日期(00:00:00)。

func OneYearLaterUTC added in v1.0.0

func OneYearLaterUTC() time.Time

OneYearLaterUTC 返回当前 UTC 日期一年后的日期(00:00:00 UTC)。

func PrintQueryFeatureMatrix

func PrintQueryFeatureMatrix(databases ...string) string

PrintQueryFeatureMatrix 打印查询特性矩阵

func RealWorldExample

func RealWorldExample(repo *Repository, ctx context.Context) error

RealWorldExample 真实业务场景示例 场景:SaaS CMS 系统 - 为每个客户项目创建独立的内容表

func RegisterAdapter

func RegisterAdapter(factory AdapterFactory)

RegisterAdapter 注册适配器工厂

func RegisterAdapterConfig

func RegisterAdapterConfig(name string, config *Config) error

RegisterAdapterConfig 注册 Adapter 配置(支持多 Adapter 注册)

func RegisterAdapterConfigs

func RegisterAdapterConfigs(configs map[string]*Config) error

RegisterAdapterConfigs 批量注册 Adapter 配置

func RegisterAdapterConstructor

func RegisterAdapterConstructor(name string, ctor interface{}) error

RegisterAdapterConstructor 使用构造函数动态注册 Adapter 允许的构造函数签名:func(*Config) (Adapter, error) 或 func(*Config) (*T, error)

func RegisterCustomSQLiteDriver

func RegisterCustomSQLiteDriver(driverName string, functions map[string]interface{}) error

RegisterCustomSQLiteDriver 注册带有自定义函数的 SQLite 驱动 这是推荐的方式来添加自定义函数支持

func RegisterSQLiteJSONFallbackDriver added in v1.0.0

func RegisterSQLiteJSONFallbackDriver(driverName string, extraFunctions map[string]interface{}) error

RegisterSQLiteJSONFallbackDriver 注册带 JSON 降级函数的 SQLite 驱动。

func RegisterSchemasIntoGlobal added in v1.0.0

func RegisterSchemasIntoGlobal(schemas ...Schema)

RegisterSchemasIntoGlobal 将多个 Schema 的 FK ViewHint 注册到全局注册表。 通常在 main() 或 app 初始化时调用一次。

db.RegisterSchemasIntoGlobal(usersSchema, ordersSchema, productSchema)

func RegisterValidationProfile added in v1.0.0

func RegisterValidationProfile(profile ValidationProfile) error

RegisterValidationProfile 注册自定义校验规则配置。

func SLADeadline added in v1.0.0

func SLADeadline(hours int, workdaysOnly bool) time.Time

SLADeadline 返回 SLA 截止时间。 workdaysOnly 为 false:按自然时间增加小时;为 true:仅计入工作日(周一到周五)小时。

func SaveConfig

func SaveConfig(filename string, config *Config) error

SaveConfig 保存配置到文件

func ScanStruct

func ScanStruct(row *sql.Row, dest interface{}) error

ScanStruct 从 sql.Row 扫描单个结构体

func ScanStructs

func ScanStructs(rows *sql.Rows, dest interface{}) error

ScanStructs 从 sql.Rows 扫描多个结构体

func SetLegacyQueryBuilderWarningEnabled added in v1.0.0

func SetLegacyQueryBuilderWarningEnabled(enabled bool)

SetLegacyQueryBuilderWarningEnabled 设置 v1 QueryBuilder 弃用提示开关。

func SetLowLevelTransactionWarningEnabled added in v1.0.0

func SetLowLevelTransactionWarningEnabled(enabled bool)

SetLowLevelTransactionWarningEnabled 设置底层事务 Begin 的提示开关。

func SetValidationLocale added in v1.0.0

func SetValidationLocale(locale string) error

SetValidationLocale 设置当前校验规则 locale。

func StartOfCurrentMonth added in v1.0.0

func StartOfCurrentMonth() time.Time

StartOfCurrentMonth 返回当前月月初(本地时区,00:00:00)。

func StartOfCurrentQuarter added in v1.0.0

func StartOfCurrentQuarter() time.Time

StartOfCurrentQuarter 返回当前季度起始时间(本地时区,00:00:00)。

func Timestamp

func Timestamp() time.Time

Timestamp 获取当前时间(用于 created_at/updated_at 字段)

func ValidationLocaleExists added in v1.0.0

func ValidationLocaleExists(locale string) bool

ValidationLocaleExists 检查 locale 是否存在对应 profile。

func ValidationLocaleFromContext added in v1.0.0

func ValidationLocaleFromContext(ctx context.Context) string

ValidationLocaleFromContext 从上下文中获取 locale;未设置时回退全局 locale。

func WithValidationLocale added in v1.0.0

func WithValidationLocale(ctx context.Context, locale string) context.Context

WithValidationLocale 将 locale 写入上下文,供 Changeset/Validator 联动使用。

func YearsLater added in v1.0.0

func YearsLater(years int) time.Time

YearsLater 基于当前日期返回 N 年后日期(00:00:00)。

func YearsLaterUTC added in v1.0.0

func YearsLaterUTC(years int) time.Time

YearsLaterUTC 基于当前 UTC 日期返回 N 年后日期(00:00:00 UTC)。

Types

type Action

type Action string

Action 表示 Changeset 的操作类型

const (
	ActionInsert Action = "insert"
	ActionUpdate Action = "update"
	ActionDelete Action = "delete"
)

type Adapter

type Adapter interface {
	// 连接管理
	Connect(ctx context.Context, config *Config) error
	Close() error
	Ping(ctx context.Context) error

	// 事务管理
	// Deprecated: 这是底层事务原语,主要供框架内部、迁移、驱动集成使用。
	// 业务层写操作应优先使用 Changeset 封装入口,而不是直接手动拼事务。
	Begin(ctx context.Context, opts ...interface{}) (Tx, error)

	// 查询接口 (用于 SELECT)
	Query(ctx context.Context, sql string, args ...interface{}) (*sql.Rows, error)
	QueryRow(ctx context.Context, sql string, args ...interface{}) *sql.Row

	// 执行接口 (用于 INSERT/UPDATE/DELETE)
	Exec(ctx context.Context, sql string, args ...interface{}) (sql.Result, error)

	// 获取底层连接(建议返回标准驱动连接,如 *sql.DB / *sql.Tx)
	// 不应返回 ORM 对象,避免上层绕过能力路由与降级策略。
	GetRawConn() interface{}

	// 定时任务管理 - 允许数据库通过自己的方式实现后台任务
	// 例如: PostgreSQL 使用触发器 + pg_cron, MySQL 使用 EVENT, 应用层使用 cron 库
	RegisterScheduledTask(ctx context.Context, task *ScheduledTaskConfig) error
	UnregisterScheduledTask(ctx context.Context, taskName string) error
	ListScheduledTasks(ctx context.Context) ([]*ScheduledTaskStatus, error)

	// QueryBuilder 提供者接口 (v0.4.1) - 中层转义层
	// Adapter 通过此接口提供特定数据库的 QueryConstructor 实现
	GetQueryBuilderProvider() QueryConstructorProvider

	// DatabaseFeatures 声明 (v0.4.3) - 数据库特性声明
	// 返回此 Adapter 支持的数据库特性集合
	GetDatabaseFeatures() *DatabaseFeatures

	// QueryFeatures 声明 (v0.4.4) - 查询特性声明
	// 返回此数据库支持的查询构造特性(JOIN、CTE、窗口函数等)
	GetQueryFeatures() *QueryFeatures
}

Adapter 定义通用的数据库适配器接口 (参考 Ecto 设计) 每个数据库实现都必须满足这个接口

type AdapterFactory

type AdapterFactory interface {
	Name() string
	Create(config *Config) (Adapter, error)
}

AdapterFactory 适配器工厂接口

type AdapterRegistryFile

type AdapterRegistryFile struct {
	Adapters map[string]*Config `yaml:"adapters" json:"adapters"`
}

AdapterRegistryFile 多 Adapter 配置文件结构

type AutoShardingManager added in v1.0.0

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

AutoShardingManager 自动分表管理器。 它位于动态建表上层:根据模板计算 shard,再委托 DynamicTableHook 创建/获取表。

func NewAutoShardingManager added in v1.0.0

func NewAutoShardingManager(hook DynamicTableHook, configName string, template *AutoShardingTemplate) (*AutoShardingManager, error)

NewAutoShardingManager 创建自动分表管理器。

func (*AutoShardingManager) EnsureShardTable added in v1.0.0

func (m *AutoShardingManager) EnsureShardTable(ctx context.Context, values map[string]interface{}) (string, error)

EnsureShardTable 计算分片并通过动态建表钩子确保子表可用。

func (*AutoShardingManager) ResolveShardID added in v1.0.0

func (m *AutoShardingManager) ResolveShardID(values map[string]interface{}) (string, error)

ResolveShardID 仅计算分片 ID,不触发表创建。

type AutoShardingTemplate added in v1.0.0

type AutoShardingTemplate struct {
	Kind            ShardingTemplateKind
	KeyField        string
	ShardCount      int
	DateGranularity DateShardingGranularity
	AllowedRegions  map[string]struct{}
}

AutoShardingTemplate 自动分表模板。

func NewDataScaleShardingTemplate added in v1.0.0

func NewDataScaleShardingTemplate(keyField string, shardCount int) *AutoShardingTemplate

NewDataScaleShardingTemplate 基于数据规模(哈希槽)分表。

func NewDateShardingTemplate added in v1.0.0

func NewDateShardingTemplate(keyField string, granularity DateShardingGranularity) *AutoShardingTemplate

NewDateShardingTemplate 基于日期字段分表。

func NewRegionShardingTemplate added in v1.0.0

func NewRegionShardingTemplate(keyField string, allowedRegions ...string) *AutoShardingTemplate

NewRegionShardingTemplate 基于地区字段分表。

func (*AutoShardingTemplate) ResolveShardID added in v1.0.0

func (t *AutoShardingTemplate) ResolveShardID(values map[string]interface{}) (string, error)

ResolveShardID 根据模板从输入记录解析分片 ID。

type BaseMigration

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

BaseMigration 基础迁移结构,提供通用字段

func NewBaseMigration

func NewBaseMigration(version, description string) *BaseMigration

NewBaseMigration 创建基础迁移

func (*BaseMigration) Description

func (m *BaseMigration) Description() string

Description 返回描述

func (*BaseMigration) Version

func (m *BaseMigration) Version() string

Version 返回版本号

type BaseSQLCompiler added in v1.0.0

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

BaseSQLCompiler 默认 SQL 编译器。 各 SQL Adapter 可在此基础上定制或替换。

func NewBaseSQLCompiler added in v1.0.0

func NewBaseSQLCompiler(dialect SQLDialect) *BaseSQLCompiler

func (*BaseSQLCompiler) Compile added in v1.0.0

func (c *BaseSQLCompiler) Compile(ctx context.Context, ir *QueryIR) (string, []interface{}, error)

func (*BaseSQLCompiler) SetDialect added in v1.0.0

func (c *BaseSQLCompiler) SetDialect(dialect SQLDialect)

type BaseSchema

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

BaseSchema 基础模式实现

func InferSchema

func InferSchema(v interface{}) (*BaseSchema, error)

InferSchema 从 Go struct 推导 Schema 支持 struct tag(优先级): 1) `eit_db:"column_name,primary_key,not_null,unique,index,auto_increment,default=...,type=..."`(推荐,避免与其他库的 `db` tag 命名冲突) 2) `db:"..."`(兼容) 3) `gorm:"column:...,primaryKey,not null,uniqueIndex,autoIncrement,default:..."`(兜底)

func NewBaseSchema

func NewBaseSchema(tableName string) *BaseSchema

NewBaseSchema 创建基础模式

func (*BaseSchema) AddField

func (s *BaseSchema) AddField(field *Field) *BaseSchema

AddField 添加字段

func (*BaseSchema) AddForeignKey added in v1.0.0

func (s *BaseSchema) AddForeignKey(name string, localFields []string, refTable string, refFields []string, onDelete, onUpdate string, opts ...FKOption) *BaseSchema

AddForeignKey 添加表级外键约束(支持复合外键)。 onDelete/onUpdate 可选值:"CASCADE", "SET NULL", "RESTRICT", "NO ACTION", ""(使用数据库默认)。 opts 可选附加 WithViewHint / WithJoinType 等函数选项以声明热点查询视图。

func (*BaseSchema) AddPrimaryKey added in v1.0.0

func (s *BaseSchema) AddPrimaryKey(fields ...string) *BaseSchema

AddPrimaryKey 添加表级主键约束(支持复合主键)

func (*BaseSchema) AddSoftDelete added in v1.0.0

func (s *BaseSchema) AddSoftDelete() *BaseSchema

AddSoftDelete 添加软删除字段 deleted_at。 默认行为: - 字段类型为 TypeTime - 可空(NULL) - 若字段已存在则跳过,避免重复添加

func (*BaseSchema) AddTimestamps added in v1.0.0

func (s *BaseSchema) AddTimestamps() *BaseSchema

AddTimestamps 添加常用时间戳字段 created_at / updated_at。 默认行为: - 字段类型为 TypeTime - 非空(NOT NULL) - 默认值为 CURRENT_TIMESTAMP - 若字段已存在则跳过,避免重复添加

func (*BaseSchema) AddUniqueConstraint added in v1.0.0

func (s *BaseSchema) AddUniqueConstraint(name string, fields ...string) *BaseSchema

AddUniqueConstraint 添加表级唯一约束(支持复合唯一)

func (*BaseSchema) BelongsTo added in v1.1.0

func (s *BaseSchema) BelongsTo(target Schema) *SchemaRelationBuilder

BelongsTo 声明本 Schema 持有外键,归属于目标 Schema(多对一)。 连接语义默认 required(本实体必须有对应父实体)。

orderSchema.BelongsTo(userSchema).Over("user_id", "id")

func (*BaseSchema) Constraints added in v1.0.0

func (s *BaseSchema) Constraints() []TableConstraint

Constraints 返回所有表级约束

func (*BaseSchema) Fields

func (s *BaseSchema) Fields() []*Field

Fields 返回所有字段

func (*BaseSchema) FindRelation added in v1.1.0

func (s *BaseSchema) FindRelation(targetTable string) *SchemaRelation

FindRelation 查找本 Schema 与目标表名之间的第一个关系声明;未找到时返回 nil。

func (*BaseSchema) GetField

func (s *BaseSchema) GetField(name string) *Field

GetField 获取字段

func (*BaseSchema) HasMany added in v1.1.0

func (s *BaseSchema) HasMany(target Schema) *SchemaRelationBuilder

HasMany 声明本 Schema 是"一"侧,目标 Schema 持有外键(一对多)。 连接语义默认 optional(本实体可能有 0 个目标实体)。 流式调用 .Over(foreignKey, originKey) 可声明关联字段;.Required()/.Optional() 可覆盖默认语义。

userSchema.HasMany(orderSchema).Over("user_id", "id")

func (*BaseSchema) HasOne added in v1.1.0

func (s *BaseSchema) HasOne(target Schema) *SchemaRelationBuilder

HasOne 声明本 Schema 是"一"侧,目标 Schema 持有外键(一对一)。 连接语义默认 optional(本实体可能没有对应目标实体)。

userSchema.HasOne(profileSchema).Over("user_id", "id")

func (*BaseSchema) ManyToMany added in v1.1.0

func (s *BaseSchema) ManyToMany(target Schema) *SchemaRelationBuilder

ManyToMany 声明多对多关系。 推荐配合 Through 指定中间关系(中间表/集合/边),便于各适配器做深度优化。

userSchema.ManyToMany(roleSchema).Through(userRoleSchema, "user_id", "role_id")

func (*BaseSchema) PrimaryKeyField

func (s *BaseSchema) PrimaryKeyField() *Field

PrimaryKeyField 获取主键字段

func (*BaseSchema) Relations added in v1.1.0

func (s *BaseSchema) Relations() []SchemaRelation

Relations 返回本 Schema 上所有已声明的关系。

func (*BaseSchema) TableName

func (s *BaseSchema) TableName() string

TableName 返回表名

type Changeset

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

Changeset 代表对数据的变更(参考 Ecto.Changeset)

func FromMap

func FromMap(schema Schema, dataMap map[string]interface{}) *Changeset

FromMap 从 map 创建 Changeset

func NewChangeset

func NewChangeset(schema Schema) *Changeset

NewChangeset 创建新的 Changeset

func (*Changeset) ApplyAction

func (cs *Changeset) ApplyAction(action Action) *Changeset

ApplyAction 根据操作类型应用不同的验证逻辑

func (*Changeset) Cast

func (cs *Changeset) Cast(data map[string]interface{}) *Changeset

Cast 设置字段值(类似 Ecto 的 cast)

func (*Changeset) Changes

func (cs *Changeset) Changes() map[string]interface{}

Changes 获取变更的数据

func (*Changeset) ClearError

func (cs *Changeset) ClearError(fieldName string) *Changeset

ClearError 清除错误

func (*Changeset) Data

func (cs *Changeset) Data() map[string]interface{}

Data 获取所有数据

func (*Changeset) ErrorString

func (cs *Changeset) ErrorString() string

ErrorString 返回格式化的错误字符串

func (*Changeset) Errors

func (cs *Changeset) Errors() map[string][]string

Errors 获取所有错误

func (*Changeset) ForceChanges

func (cs *Changeset) ForceChanges() *Changeset

ForceChanges 强制所有字段为变更状态(用于插入操作)

func (*Changeset) Get

func (cs *Changeset) Get(fieldName string) interface{}

Get 获取字段值

func (*Changeset) GetChange

func (cs *Changeset) GetChange(fieldName string) interface{}

GetChange 获取变更的字段值(便捷方法)

func (*Changeset) GetChanged

func (cs *Changeset) GetChanged(fieldName string) (interface{}, bool)

GetChanged 获取变更的字段值

func (*Changeset) GetChangedFields

func (cs *Changeset) GetChangedFields() []string

GetChangedFields 获取所有被修改的字段名列表

func (*Changeset) GetError

func (cs *Changeset) GetError(fieldName string) []string

GetError 获取字段的错误

func (*Changeset) GetPrevious

func (cs *Changeset) GetPrevious(fieldName string) interface{}

GetPrevious 获取变更前的值

func (*Changeset) HasChanged

func (cs *Changeset) HasChanged(fieldName string) bool

HasChanged 检查字段是否被修改

func (*Changeset) IsValid

func (cs *Changeset) IsValid() bool

IsValid 检查 Changeset 是否有效

func (*Changeset) PutChange

func (cs *Changeset) PutChange(fieldName string, value interface{}) *Changeset

PutChange 手动添加变更

func (*Changeset) ToMap

func (cs *Changeset) ToMap() map[string]interface{}

ToMap 转换为 map(用于数据库操作)

func (*Changeset) Validate

func (cs *Changeset) Validate() *Changeset

Validate 验证 Changeset

func (*Changeset) ValidateChange

func (cs *Changeset) ValidateChange(fieldName string, validator Validator) *Changeset

ValidateChange 验证特定字段的变更

func (*Changeset) ValidateChangeWithContext added in v1.0.0

func (cs *Changeset) ValidateChangeWithContext(ctx context.Context, fieldName string, validator Validator) *Changeset

ValidateChangeWithContext 从上下文读取 locale 验证指定字段。

func (*Changeset) ValidateChangeWithLocale added in v1.0.0

func (cs *Changeset) ValidateChangeWithLocale(fieldName string, validator Validator, locale string) *Changeset

ValidateChangeWithLocale 使用指定 locale 验证指定字段。

func (*Changeset) ValidateExclusion

func (cs *Changeset) ValidateExclusion(fieldName string, list []interface{}) *Changeset

ValidateExclusion 验证字段值不在指定列表中

func (*Changeset) ValidateFormat

func (cs *Changeset) ValidateFormat(fieldName string, pattern string, message ...string) *Changeset

ValidateFormat 验证字段格式(使用正则表达式)

func (*Changeset) ValidateInclusion

func (cs *Changeset) ValidateInclusion(fieldName string, list []interface{}) *Changeset

ValidateInclusion 验证字段值在指定列表中

func (*Changeset) ValidateLength

func (cs *Changeset) ValidateLength(fieldName string, min, max int) *Changeset

ValidateLength 验证字符串长度

func (*Changeset) ValidateNumber

func (cs *Changeset) ValidateNumber(fieldName string, opts map[string]interface{}) *Changeset

ValidateNumber 验证数字范围

func (*Changeset) ValidateRequired

func (cs *Changeset) ValidateRequired(fields []string) *Changeset

ValidateRequired 验证必填字段

func (*Changeset) ValidateWithContext added in v1.0.0

func (cs *Changeset) ValidateWithContext(ctx context.Context) *Changeset

ValidateWithContext 从上下文读取 locale 执行验证。

func (*Changeset) ValidateWithLocale added in v1.0.0

func (cs *Changeset) ValidateWithLocale(locale string) *Changeset

ValidateWithLocale 使用指定 locale 执行验证。

type ChangesetExecutor added in v1.0.0

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

ChangesetExecutor 面向业务层的写操作封装。 它仅暴露基于 Changeset 的常见写路径,避免业务层默认直接操作 Tx。

func (*ChangesetExecutor) Delete added in v1.0.0

func (e *ChangesetExecutor) Delete(whereClause string, whereArgs ...interface{}) (sql.Result, error)

Delete 按条件删除记录。

func (*ChangesetExecutor) DeleteByID added in v1.0.0

func (e *ChangesetExecutor) DeleteByID(id interface{}) (sql.Result, error)

DeleteByID 按 ID 删除记录。

func (*ChangesetExecutor) Insert added in v1.0.0

func (e *ChangesetExecutor) Insert(cs *Changeset) (sql.Result, error)

Insert 插入 Changeset。

func (*ChangesetExecutor) SoftDelete added in v1.0.0

func (e *ChangesetExecutor) SoftDelete(whereClause string, whereArgs ...interface{}) (sql.Result, error)

SoftDelete 软删除记录。

func (*ChangesetExecutor) SoftDeleteByID added in v1.0.0

func (e *ChangesetExecutor) SoftDeleteByID(id interface{}) (sql.Result, error)

SoftDeleteByID 按 ID 软删除记录。

func (*ChangesetExecutor) Update added in v1.0.0

func (e *ChangesetExecutor) Update(cs *Changeset, whereClause string, whereArgs ...interface{}) (sql.Result, error)

Update 按条件更新 Changeset。

func (*ChangesetExecutor) UpdateByID added in v1.0.0

func (e *ChangesetExecutor) UpdateByID(id interface{}, cs *Changeset) (sql.Result, error)

UpdateByID 按 ID 更新 Changeset。

type CompiledQuery added in v1.0.0

type CompiledQuery struct {
	Query string
	Args  []interface{}
}

CompiledQuery 表示预编译后的查询结果。

type CompiledQueryCache added in v1.0.0

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

CompiledQueryCache Repository 级别的编译结果缓存。

func NewCompiledQueryCache added in v1.0.0

func NewCompiledQueryCache() *CompiledQueryCache

NewCompiledQueryCache 创建编译查询缓存。

func NewCompiledQueryCacheWithOptions added in v1.0.0

func NewCompiledQueryCacheWithOptions(maxEntries int, defaultTTL time.Duration, enableMetrics bool) *CompiledQueryCache

NewCompiledQueryCacheWithOptions 创建指定容量、TTL 和 metrics 策略的编译查询缓存。

func NewCompiledQueryCacheWithSize added in v1.0.0

func NewCompiledQueryCacheWithSize(maxEntries int) *CompiledQueryCache

NewCompiledQueryCacheWithSize 创建指定容量的编译查询缓存。

type CompiledQueryCacheStats added in v1.0.0

type CompiledQueryCacheStats struct {
	Enabled       bool
	Hits          uint64
	Misses        uint64
	HitRatio      float64
	KeysAdded     uint64
	KeysUpdated   uint64
	KeysEvicted   uint64
	SetsDropped   uint64
	SetsRejected  uint64
	GetsDropped   uint64
	GetsKept      uint64
	CostAdded     uint64
	CostEvicted   uint64
	RemainingCost int64
	MaxCost       int64
}

CompiledQueryCacheStats 表示查询缓存命中统计。

type CompiledQueryTemplate added in v1.0.0

type CompiledQueryTemplate struct {
	Query    string
	ArgCount int
}

CompiledQueryTemplate 表示可复用的查询模板(仅缓存查询文本,不缓存具体参数值)。

type CompositeCondition

type CompositeCondition struct {
	Operator   string // "and" | "or"
	Conditions []Condition
}

CompositeCondition 复合条件(AND/OR)

func (*CompositeCondition) Translate

func (c *CompositeCondition) Translate(translator ConditionTranslator) (string, []interface{}, error)

func (*CompositeCondition) Type

func (c *CompositeCondition) Type() string

type CompositeTypeBuilder added in v1.0.0

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

CompositeTypeBuilder 构建 PostgreSQL COMPOSITE 类型(结构体类型)DDL。

func (*CompositeTypeBuilder) AddField added in v1.0.0

func (b *CompositeTypeBuilder) AddField(ctx context.Context, name, pgType string) error

AddField 运行时动态追加字段,等同于 ALTER TYPE ... ADD ATTRIBUTE。 若类型已存在,直接执行 DDL;若尚未创建则缓冲到 Create 时一起执行。

func (*CompositeTypeBuilder) Build added in v1.0.0

func (b *CompositeTypeBuilder) Build() (string, error)

Build 生成 CREATE TYPE ... AS (...) DDL 字符串,不执行。

func (*CompositeTypeBuilder) Create added in v1.0.0

func (b *CompositeTypeBuilder) Create(ctx context.Context) error

Create 在数据库中创建 COMPOSITE 类型。

func (*CompositeTypeBuilder) Drop added in v1.0.0

func (b *CompositeTypeBuilder) Drop(ctx context.Context, ifExists bool) error

Drop 删除 COMPOSITE 类型。

func (*CompositeTypeBuilder) Exists added in v1.0.0

func (b *CompositeTypeBuilder) Exists(ctx context.Context) (bool, error)

Exists 检查该 COMPOSITE 类型是否已存在。

func (*CompositeTypeBuilder) Field added in v1.0.0

func (b *CompositeTypeBuilder) Field(name, pgType string) *CompositeTypeBuilder

Field 添加一个字段到 COMPOSITE 类型,pgType 为 PostgreSQL 原生类型字符串。

示例:Field("latitude", "DOUBLE PRECISION").Field("longitude", "DOUBLE PRECISION")

func (*CompositeTypeBuilder) IfNotExists added in v1.0.0

func (b *CompositeTypeBuilder) IfNotExists() *CompositeTypeBuilder

IfNotExists 若类型已存在则静默跳过。

func (*CompositeTypeBuilder) Schema added in v1.0.0

Schema 可选:指定类型所在的 schema。

type Condition

type Condition interface {
	// 获取条件类型
	Type() string

	// 将条件转换为 SQL/Cypher/etc
	Translate(translator ConditionTranslator) (string, []interface{}, error)
}

Condition 条件接口 - 中层转义 Adapter 实现此接口将条件转换为数据库特定的形式

func ActiveUsersInBusinessHours added in v1.0.0

func ActiveUsersInBusinessHours() Condition

ActiveUsersInBusinessHours 预置条件:活跃用户 + 今天工作时段。 默认约定:status = "active",时间字段为 updated_at,工作时段为 09:00-18:00。

func ActiveUsersInBusinessHoursBy added in v1.0.0

func ActiveUsersInBusinessHoursBy(statusField string, activeValue interface{}, timeField string, startHour, endHour int) Condition

ActiveUsersInBusinessHoursBy 可配置版本。

func And

func And(conditions ...Condition) Condition

And AND 条件

func Between

func Between(field string, min, max interface{}) Condition

Between BETWEEN 条件

func DateFrom added in v1.0.0

func DateFrom(field string, start time.Time) Condition

DateFrom 生成“字段时间 >= start”的条件。

func DateInBusinessHours added in v1.0.0

func DateInBusinessHours(field string, startHour, endHour int) Condition

DateInBusinessHours 生成“当前日期工作时段”的条件(闭开区间:[start, end))。 默认基于本地时区今天,startHour/endHour 建议范围为 0-23。 当 endHour <= startHour 时,视为跨天时段(例如 22 -> 6)。

func DateInCurrentMonth added in v1.0.0

func DateInCurrentMonth(field string) Condition

DateInCurrentMonth 生成“字段时间位于当前月”的条件(闭开区间:[monthStart, nextMonthStart))。

func DateInCurrentQuarter added in v1.0.0

func DateInCurrentQuarter(field string) Condition

DateInCurrentQuarter 生成“字段时间位于当前季度”的条件(闭开区间:[quarterStart, nextQuarterStart))。

func DateInLastBusinessDays added in v1.0.0

func DateInLastBusinessDays(field string, days int, holidays ...time.Time) Condition

DateInLastBusinessDays 生成“最近 N 个工作日”的条件。 工作日定义为周一到周五;holidays 可传入节假日日期(只比较年月日)。 返回按天窗口 OR 组合条件,每天为闭开区间 [dayStart, nextDayStart)。

func DateOn added in v1.0.0

func DateOn(field string, year, month, day int) Condition

DateOn 生成“某一天内”的条件(闭开区间:[dayStart, nextDayStart))。

func DateRange added in v1.0.0

func DateRange(field string, start, end time.Time) Condition

DateRange 生成“字段时间在 [start, end] 区间内”的条件。 若 end 在 start 之前,将自动交换顺序。

func DateTo added in v1.0.0

func DateTo(field string, end time.Time) Condition

DateTo 生成“字段时间 <= end”的条件。

func DueSoonTasksInBusinessDays added in v1.0.0

func DueSoonTasksInBusinessDays(days int, holidays ...time.Time) Condition

DueSoonTasksInBusinessDays 预置条件:待处理任务且截止时间在未来 N 个工作日内。 默认约定:status = "pending",截止字段为 due_at。

func Eq

func Eq(field string, value interface{}) Condition

Eq 等于条件

func EqFields added in v1.0.0

func EqFields(values map[string]interface{}) Condition

EqFields 多字段等值条件(适用于复合主键/复合唯一键定位)

func FullText added in v1.0.0

func FullText(field string, query string) Condition

FullText 全文检索条件(由方言翻译器决定具体语法)

func Gt

func Gt(field string, value interface{}) Condition

Gt 大于条件

func Gte

func Gte(field string, value interface{}) Condition

Gte 大于等于条件

func In

func In(field string, values ...interface{}) Condition

In IN 条件

func Like

func Like(field string, pattern string) Condition

Like LIKE 条件(模糊匹配)

func Lt

func Lt(field string, value interface{}) Condition

Lt 小于条件

func Lte

func Lte(field string, value interface{}) Condition

Lte 小于等于条件

func Ne

func Ne(field string, value interface{}) Condition

Ne 不等于条件

func Not

func Not(condition Condition) Condition

Not NOT 条件

func Or

func Or(conditions ...Condition) Condition

Or OR 条件

func OrdersInCurrentQuarter added in v1.0.0

func OrdersInCurrentQuarter() Condition

OrdersInCurrentQuarter 预置条件:订单创建时间在当前季度。 默认约定:订单创建时间字段为 created_at。

func OrdersInCurrentQuarterBy added in v1.0.0

func OrdersInCurrentQuarterBy(timeField string) Condition

OrdersInCurrentQuarterBy 可配置版本。

type ConditionTranslator

type ConditionTranslator interface {
	TranslateCondition(condition Condition) (string, []interface{}, error)
	TranslateComposite(operator string, conditions []Condition) (string, []interface{}, error)
}

ConditionTranslator 条件转义器接口 由每个 Adapter 的 QueryConstructor 实现

type Config

type Config struct {
	// 适配器类型: "sqlite" | "postgres" | "mysql" | "sqlserver" | "mongodb" | "neo4j"
	Adapter string `json:"adapter" yaml:"adapter"`

	// EnableScheduledTaskFallback 控制定时任务在适配器不支持时是否自动回退到应用层调度器。
	// nil 表示使用默认值(true)。
	EnableScheduledTaskFallback *bool `json:"enable_scheduled_task_fallback,omitempty" yaml:"enable_scheduled_task_fallback,omitempty"`

	// QueryCache 控制 Repository 级查询编译缓存策略。
	QueryCache *QueryCacheConfig `json:"query_cache,omitempty" yaml:"query_cache,omitempty"`

	// Adapter 专属配置。
	// 推荐使用这一组嵌套配置来表达连接细节,而不是把所有字段平铺到顶层。
	SQLite    *SQLiteConnectionConfig    `json:"sqlite,omitempty" yaml:"sqlite,omitempty"`
	Postgres  *PostgresConnectionConfig  `json:"postgres,omitempty" yaml:"postgres,omitempty"`
	MySQL     *MySQLConnectionConfig     `json:"mysql,omitempty" yaml:"mysql,omitempty"`
	SQLServer *SQLServerConnectionConfig `json:"sqlserver,omitempty" yaml:"sqlserver,omitempty"`
	MongoDB   *MongoConnectionConfig     `json:"mongodb,omitempty" yaml:"mongodb,omitempty"`
	Neo4j     *Neo4jConnectionConfig     `json:"neo4j,omitempty" yaml:"neo4j,omitempty"`

	// SQLite 特定配置(legacy fallback)
	Database string `json:"database" yaml:"database"` // 数据库文件路径或数据库名

	// PostgreSQL/MySQL/SQL Server 通用配置(legacy fallback)
	Host     string `json:"host" yaml:"host"`
	Port     int    `json:"port" yaml:"port"`
	Username string `json:"username" yaml:"username"`
	Password string `json:"password" yaml:"password"`

	// PostgreSQL 特定配置(legacy fallback)
	SSLMode string `json:"ssl_mode" yaml:"ssl_mode"`

	// 连接池配置
	Pool *PoolConfig `json:"pool" yaml:"pool"`

	// 其他参数 (可选的适配器特定参数)
	Options map[string]interface{} `json:"options" yaml:"options"`

	// 校验规则与 locale 配置
	Validation *ValidationConfig `json:"validation,omitempty" yaml:"validation,omitempty"`

	// 启动期能力体检配置(strict/lenient)
	StartupCapabilities *StartupCapabilityConfig `json:"startup_capabilities,omitempty" yaml:"startup_capabilities,omitempty"`
}

Config 数据库配置结构 (参考 Ecto 的 Repo 配置)

func DefaultConfig

func DefaultConfig(adapterType string) *Config

DefaultConfig 返回默认配置

func GetAdapterConfig

func GetAdapterConfig(name string) (*Config, bool)

GetAdapterConfig 获取已注册的 Adapter 配置

func LoadConfig

func LoadConfig(filename string) (*Config, error)

LoadConfig 从文件加载数据库配置(支持 JSON 和 YAML 格式)

func LoadConfigFromEnv added in v1.0.0

func LoadConfigFromEnv(adapter string) (*Config, error)

LoadConfigFromEnv 按 adapter 从环境变量加载数据库配置。

支持的环境变量: - PostgreSQL: POSTGRES_DSN 或 POSTGRES_HOST/PORT/USER/PASSWORD/DB/SSLMODE - MySQL: MYSQL_DSN 或 MYSQL_HOST/PORT/USER/PASSWORD/DB - SQL Server: SQLSERVER_DSN 或 SQLSERVER_HOST/PORT/USER/PASSWORD/DB - SQLite: SQLITE_DATABASE 或 SQLITE_PATH - MongoDB: MONGODB_URI + MONGODB_DATABASE/MONGODB_DB

func LoadConfigFromEnvWithDefaults added in v1.0.0

func LoadConfigFromEnvWithDefaults(adapter string, defaults *Config) (*Config, error)

LoadConfigFromEnvWithDefaults 按 adapter 从环境变量加载数据库配置,并允许通过 defaults 指定默认值。 环境变量优先级高于 defaults;若设置了 *_DSN,则直接使用 DSN 连接细节。

func LoadConfigWithDefaults

func LoadConfigWithDefaults(filename string, defaults *Config) (*Config, error)

LoadConfigWithDefaults 从文件加载配置并应用默认值

func (*Config) ResolvedMongoConfig added in v1.0.0

func (c *Config) ResolvedMongoConfig() *MongoConnectionConfig

ResolvedMongoConfig 返回 MongoDB 的有效配置。

func (*Config) ResolvedMySQLConfig added in v1.0.0

func (c *Config) ResolvedMySQLConfig() *MySQLConnectionConfig

ResolvedMySQLConfig 返回 MySQL 的有效配置。

func (*Config) ResolvedNeo4jConfig added in v1.0.0

func (c *Config) ResolvedNeo4jConfig() *Neo4jConnectionConfig

ResolvedNeo4jConfig 返回 Neo4j 的有效配置。

func (*Config) ResolvedPostgresConfig added in v1.0.0

func (c *Config) ResolvedPostgresConfig() *PostgresConnectionConfig

ResolvedPostgresConfig 返回 PostgreSQL 的有效配置。

func (*Config) ResolvedSQLServerConfig added in v1.0.0

func (c *Config) ResolvedSQLServerConfig() *SQLServerConnectionConfig

ResolvedSQLServerConfig 返回 SQL Server 的有效配置。

func (*Config) ResolvedSQLiteConfig added in v1.0.0

func (c *Config) ResolvedSQLiteConfig() *SQLiteConnectionConfig

ResolvedSQLiteConfig 返回 SQLite 的有效配置。

func (*Config) ScheduledTaskFallbackEnabled added in v1.1.1

func (c *Config) ScheduledTaskFallbackEnabled() bool

ScheduledTaskFallbackEnabled 返回定时任务回退开关的有效值。 默认 true;当显式配置为 false 时禁用回退。

func (*Config) Validate

func (c *Config) Validate() error

Validate 验证配置有效性

type ConfigFile

type ConfigFile struct {
	Database *Config `yaml:"database" json:"database"`
}

ConfigFile 配置文件结构 (从 YAML 或 JSON 加载)

type ConstrainedSchema added in v1.1.0

type ConstrainedSchema interface {
	Schema
	Constraints() []TableConstraint
}

ConstrainedSchema 扩展 Schema,允许访问表级约束(外键、唯一约束等)。 BaseSchema 实现此接口;外部自定义 Schema 实现可选择性实现。

type ConstraintKind added in v1.0.0

type ConstraintKind string

ConstraintKind 表级约束类型

const (
	ConstraintPrimaryKey ConstraintKind = "primary_key"
	ConstraintUnique     ConstraintKind = "unique"
	ConstraintForeignKey ConstraintKind = "foreign_key"
)

type CountBuilder added in v1.1.0

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

CountBuilder 统计投影构造器。 用于表达 COUNT(field) / COUNT(DISTINCT field) 及别名。

func NewCountBuilder added in v1.1.0

func NewCountBuilder(fieldName ...string) *CountBuilder

NewCountBuilder 创建 CountBuilder。 为空或传入 "*" 时表示 COUNT(*)。

func (*CountBuilder) As added in v1.1.0

func (b *CountBuilder) As(alias string) *CountBuilder

As 为 COUNT 投影设置别名。

func (*CountBuilder) Distinct added in v1.1.0

func (b *CountBuilder) Distinct() *CountBuilder

Distinct 切换为 COUNT(DISTINCT field)。

type CrossTableStrategy added in v1.0.0

type CrossTableStrategy string

CrossTableStrategy 跨表查询策略。

const (
	// CrossTableStrategyAuto 自动策略:由方言默认行为决定(推荐默认)。
	CrossTableStrategyAuto CrossTableStrategy = "auto"
	// CrossTableStrategyPreferTempTable 优先临时表策略(例如 SQL Server 的复杂跨表查询)。
	CrossTableStrategyPreferTempTable CrossTableStrategy = "prefer_temp_table"
	// CrossTableStrategyForceDirectJoin 强制直接 JOIN,不走临时表改写。
	CrossTableStrategyForceDirectJoin CrossTableStrategy = "force_direct_join"
)

type CrossTableViewEntry added in v1.0.0

type CrossTableViewEntry struct {
	// LocalTable 拥有外键的表名(FK 所在表)
	LocalTable string
	// RefTable 被引用的表名
	RefTable string
	// ViewName 已创建的视图名
	ViewName string
	// Materialized 是否为物化视图(PostgreSQL),影响 DROP 语句
	Materialized bool
	// LocalAlias 视图中本地表的别名(与 buildViewFromFKHintSQL 保持一致)
	LocalAlias string
	// RefAlias 视图中引用表的别名
	RefAlias string
	// JoinFields FK 本地列列表
	JoinFields []string
	// RefFields FK 引用列列表
	RefFields []string
}

CrossTableViewEntry 描述一个通过视图加速的跨表关联。 由 Schema FK 的 ViewHint 声明,在 app 启动时注册到 CrossTableViewRegistry, QueryBuilder 在构建 JOIN 时自动查询并路由到视图。

type CrossTableViewRegistry added in v1.0.0

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

CrossTableViewRegistry 跨表视图注册表(线程安全)。

典型使用流程:

  1. Schema 声明阶段:AddForeignKey(..., WithViewHint(...))
  2. App 启动:RegisterSchemasIntoGlobal(ordersSchema, ...)
  3. Migration Up:自动 CREATE VIEW
  4. 查询阶段:NewQueryConstructor(schema).Join(...) 自动路由到视图

func NewCrossTableViewRegistry added in v1.0.0

func NewCrossTableViewRegistry() *CrossTableViewRegistry

NewCrossTableViewRegistry 创建一个新的空注册表(用于测试或隔离注册)。

func (*CrossTableViewRegistry) Lookup added in v1.0.0

func (r *CrossTableViewRegistry) Lookup(localTable, refTable string) (*CrossTableViewEntry, bool)

Lookup 精确查找:以 localTable 为主表、refTable 为关联表的视图条目。 返回 (entry, true) 或 (nil, false)。

func (*CrossTableViewRegistry) LookupAny added in v1.0.0

func (r *CrossTableViewRegistry) LookupAny(tableA, tableB string) (*CrossTableViewEntry, bool)

LookupAny 双向查找:先查 (local, ref),再查反向 (ref, local)。 适用于 QueryBuilder:无论 FROM 哪张表,都能找到对应的视图。

func (*CrossTableViewRegistry) Register added in v1.0.0

func (r *CrossTableViewRegistry) Register(entry *CrossTableViewEntry)

Register 注册一条跨表视图关联。

func (*CrossTableViewRegistry) RegisterFromSchema added in v1.0.0

func (r *CrossTableViewRegistry) RegisterFromSchema(schema Schema)

RegisterFromSchema 扫描 Schema 上所有带 ViewHint 的 FK 约束并注册到本注册表。

type CustomFeatureProvider added in v1.0.0

type CustomFeatureProvider interface {
	HasCustomFeatureImplementation(feature string) bool
	ExecuteCustomFeature(ctx context.Context, feature string, input map[string]interface{}) (interface{}, error)
}

CustomFeatureProvider adapter 的可选扩展接口 用于声明和执行数据库原生不支持但 adapter 可自定义实现的能力。

type CypherCompiler added in v1.0.0

type CypherCompiler struct{}

CypherCompiler 将 QueryIR 编译为 Cypher。

func NewCypherCompiler added in v1.0.0

func NewCypherCompiler() *CypherCompiler

func (*CypherCompiler) Compile added in v1.0.0

func (c *CypherCompiler) Compile(ctx context.Context, ir *QueryIR) (string, []interface{}, error)

type CypherConditionTranslator added in v1.0.0

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

CypherConditionTranslator 将 Condition 转换为 Cypher 过滤表达式。

func (*CypherConditionTranslator) TranslateComposite added in v1.0.0

func (t *CypherConditionTranslator) TranslateComposite(operator string, conditions []Condition) (string, []interface{}, error)

func (*CypherConditionTranslator) TranslateCondition added in v1.0.0

func (t *CypherConditionTranslator) TranslateCondition(condition Condition) (string, []interface{}, error)

type CypherWriteSummary added in v1.0.0

type CypherWriteSummary struct {
	NodesCreated         int
	NodesDeleted         int
	RelationshipsCreated int
	RelationshipsDeleted int
	PropertiesSet        int
	LabelsAdded          int
	LabelsRemoved        int
}

CypherWriteSummary 表示 Neo4j 写入执行摘要。

type DatabaseFeatures

type DatabaseFeatures struct {
	// ===== 索引和约束 =====
	SupportsCompositeKeys        bool // 复合主键 (所有数据库都支持)
	SupportsForeignKeys          bool // 外键约束 (关系型数据库支持,MongoDB 不支持)
	SupportsCompositeForeignKeys bool // 复合外键 (关系型数据库支持,MongoDB 不支持)
	SupportsCompositeIndexes     bool // 复合索引 (所有数据库都支持)
	SupportsPartialIndexes       bool // 部分索引 (WHERE 子句)
	SupportsDeferrable           bool // 延迟约束 (PostgreSQL, SQLite)

	// ===== 自定义类型 =====
	SupportsEnumType      bool // ENUM 类型
	SupportsCompositeType bool // 复合/结构体类型 (PostgreSQL)
	SupportsDomainType    bool // DOMAIN 类型 (PostgreSQL)
	SupportsUDT           bool // User-Defined Types (SQL Server, PostgreSQL)

	// ===== 函数和过程 =====
	SupportsStoredProcedures bool     // 存储过程
	SupportsFunctions        bool     // 自定义函数
	SupportsAggregateFuncs   bool     // 自定义聚合函数
	FunctionLanguages        []string // 支持的函数语言 (如 "plpgsql", "tsql", "sql")

	// ===== 高级查询 =====
	SupportsWindowFunctions bool // 窗口函数 (ROW_NUMBER, RANK, etc.)
	SupportsCTE             bool // 公共表表达式 (WITH)
	SupportsRecursiveCTE    bool // 递归 CTE
	SupportsMaterializedCTE bool // 物化 CTE (PostgreSQL)

	// ===== JSON 支持 =====
	HasNativeJSON     bool // 原生 JSON 类型
	SupportsJSONPath  bool // JSON 路径查询
	SupportsJSONIndex bool // JSON 索引

	// ===== 全文搜索 =====
	SupportsFullTextSearch bool     // 全文搜索
	FullTextLanguages      []string // 支持的语言

	// ===== 其他特性 =====
	SupportsArrays       bool // 数组类型 (PostgreSQL)
	SupportsGenerated    bool // 生成列 (Computed/Generated columns)
	SupportsReturning    bool // RETURNING 子句 (PostgreSQL, SQLite 3.35+)
	SupportsUpsert       bool // UPSERT 操作 (ON CONFLICT / ON DUPLICATE KEY)
	SupportsListenNotify bool // LISTEN/NOTIFY (PostgreSQL)

	// ===== 元信息 =====
	DatabaseName    string // 数据库名称
	DatabaseVersion string // 版本信息
	Description     string // 特性描述

	// 版本化能力支持(可选)
	FeatureSupport map[string]FeatureSupport
	// 特性降级策略(可选)
	FallbackStrategies map[string]FeatureFallback
}

DatabaseFeatures 数据库特性声明 每个 Adapter 通过此结构声明其支持的数据库特性

func NewMongoDatabaseFeatures

func NewMongoDatabaseFeatures() *DatabaseFeatures

NewMongoDatabaseFeatures MongoDB 数据库特性(最小占位实现)

func NewNeo4jDatabaseFeatures added in v1.0.0

func NewNeo4jDatabaseFeatures() *DatabaseFeatures

NewNeo4jDatabaseFeatures Neo4j 数据库特性声明。

func (*DatabaseFeatures) GetFallbackStrategy added in v1.0.0

func (f *DatabaseFeatures) GetFallbackStrategy(feature string) FeatureFallback

GetFallbackStrategy 获取特性降级策略

func (*DatabaseFeatures) GetFeatureSupport added in v1.0.0

func (f *DatabaseFeatures) GetFeatureSupport(feature string) FeatureSupport

GetFeatureSupport 获取特性支持详情(若未定义则回退到 HasFeature)

func (*DatabaseFeatures) GetFeaturesByCategory

func (f *DatabaseFeatures) GetFeaturesByCategory(category FeatureCategory) []string

GetFeaturesByCategory 按分类获取支持的特性列表

func (*DatabaseFeatures) HasFeature

func (f *DatabaseFeatures) HasFeature(feature string) bool

HasFeature 检查是否支持特定特性

func (*DatabaseFeatures) SupportsFeatureWithVersion added in v1.0.0

func (f *DatabaseFeatures) SupportsFeatureWithVersion(feature, version string) bool

SupportsFeatureWithVersion 根据实例版本判断特性是否可用(version 为空时回退常规判断)

type DateBuilder added in v1.0.0

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

DateBuilder 提供应用层日期构建能力,适合生成业务时间边界或默认时间值。

func DateByYMD added in v1.0.0

func DateByYMD(year, month, day int) *DateBuilder

DateByYMD 基于年月日创建日期构建器,时间部分默认为 00:00:00(本地时区)。

func TodayBuilder added in v1.0.0

func TodayBuilder() *DateBuilder

TodayBuilder 基于当前日期创建构建器,时间部分为 00:00:00(当前时区)。

func TodayUTCBuilder added in v1.0.0

func TodayUTCBuilder() *DateBuilder

TodayUTCBuilder 基于当前 UTC 日期创建构建器,时间部分为 00:00:00(UTC)。

func (*DateBuilder) AddDays added in v1.0.0

func (b *DateBuilder) AddDays(days int) *DateBuilder

AddDays 增加(或减少)天数。

func (*DateBuilder) AddMonths added in v1.0.0

func (b *DateBuilder) AddMonths(months int) *DateBuilder

AddMonths 增加(或减少)月数。

func (*DateBuilder) AddYears added in v1.0.0

func (b *DateBuilder) AddYears(years int) *DateBuilder

AddYears 增加(或减少)年数。

func (*DateBuilder) At added in v1.0.0

func (b *DateBuilder) At(hour, minute, second int) *DateBuilder

At 设置时分秒,便于从日期边界构造完整时间戳。

func (*DateBuilder) Build added in v1.0.0

func (b *DateBuilder) Build() time.Time

Build 返回最终时间。

func (*DateBuilder) EndOfMonth added in v1.0.0

func (b *DateBuilder) EndOfMonth() *DateBuilder

EndOfMonth 对齐到当月月末 23:59:59。

func (*DateBuilder) EndOfQuarter added in v1.0.0

func (b *DateBuilder) EndOfQuarter() *DateBuilder

EndOfQuarter 对齐到当前季度末日 23:59:59。

func (*DateBuilder) In added in v1.0.0

func (b *DateBuilder) In(loc *time.Location) *DateBuilder

In 将构建器时间转换到指定时区。

func (*DateBuilder) StartOfMonth added in v1.0.0

func (b *DateBuilder) StartOfMonth() *DateBuilder

StartOfMonth 对齐到当月月初 00:00:00。

func (*DateBuilder) StartOfQuarter added in v1.0.0

func (b *DateBuilder) StartOfQuarter() *DateBuilder

StartOfQuarter 对齐到当前季度起始日 00:00:00。

type DatePresetRegistry added in v1.0.0

type DatePresetRegistry struct{}

DatePresetRegistry 日期相关预置工具集合。

func (DatePresetRegistry) ActiveUsersInBusinessHours added in v1.0.0

func (DatePresetRegistry) ActiveUsersInBusinessHours() Condition

ActiveUsersInBusinessHours 预置条件:活跃用户 + 今天工作时段。

func (DatePresetRegistry) ActiveUsersInBusinessHoursBy added in v1.0.0

func (DatePresetRegistry) ActiveUsersInBusinessHoursBy(statusField string, activeValue interface{}, timeField string, startHour, endHour int) Condition

ActiveUsersInBusinessHoursBy 可配置版本。

func (DatePresetRegistry) DueSoonTasksInBusinessDays added in v1.0.0

func (DatePresetRegistry) DueSoonTasksInBusinessDays(days int, holidays ...time.Time) Condition

DueSoonTasksInBusinessDays 预置条件:待处理任务且截止时间在未来 N 个工作日内。

func (DatePresetRegistry) OrdersInCurrentQuarter added in v1.0.0

func (DatePresetRegistry) OrdersInCurrentQuarter() Condition

OrdersInCurrentQuarter 预置条件:订单创建时间在当前季度。

func (DatePresetRegistry) OrdersInCurrentQuarterBy added in v1.0.0

func (DatePresetRegistry) OrdersInCurrentQuarterBy(timeField string) Condition

OrdersInCurrentQuarterBy 可配置版本。

type DateShardingGranularity added in v1.0.0

type DateShardingGranularity string

DateShardingGranularity 日期分表粒度。

const (
	DateShardingByYear  DateShardingGranularity = "year"
	DateShardingByMonth DateShardingGranularity = "month"
	DateShardingByDay   DateShardingGranularity = "day"
)

type DefaultSQLDialect

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

DefaultSQLDialect 默认 SQL 方言(MySQL 兼容)

func (*DefaultSQLDialect) GenerateLimitOffset

func (d *DefaultSQLDialect) GenerateLimitOffset(limit *int, offset *int) string

func (*DefaultSQLDialect) GetPlaceholder

func (d *DefaultSQLDialect) GetPlaceholder(index int) string

func (*DefaultSQLDialect) Name

func (d *DefaultSQLDialect) Name() string

func (*DefaultSQLDialect) QuoteIdentifier

func (d *DefaultSQLDialect) QuoteIdentifier(name string) string

func (*DefaultSQLDialect) QuoteValue

func (d *DefaultSQLDialect) QuoteValue(value interface{}) string

func (*DefaultSQLDialect) TranslateCondition

func (d *DefaultSQLDialect) TranslateCondition(condition Condition, argIndex *int) (string, []interface{}, error)

type DefaultSQLQueryConstructorProvider

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

DefaultSQLQueryConstructorProvider 默认 SQL 查询构造器提供者

func NewDefaultSQLQueryConstructorProvider

func NewDefaultSQLQueryConstructorProvider(dialect SQLDialect) *DefaultSQLQueryConstructorProvider

NewDefaultSQLQueryConstructorProvider 创建默认 SQL 查询构造器提供者

func (*DefaultSQLQueryConstructorProvider) GetCapabilities

GetCapabilities 获取查询能力声明

func (*DefaultSQLQueryConstructorProvider) NewQueryConstructor

func (p *DefaultSQLQueryConstructorProvider) NewQueryConstructor(schema Schema) QueryConstructor

NewQueryConstructor 创建新的查询构造器

func (*DefaultSQLQueryConstructorProvider) SetCompiler added in v1.0.0

SetCompiler 设置该 provider 使用的查询编译器。 可用于按 adapter 方言增强 SQL 编译,或替换为其他目标语言编译器。

type DefaultSQLTranslator

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

DefaultSQLTranslator 默认 SQL 转义器

func (*DefaultSQLTranslator) TranslateComposite

func (t *DefaultSQLTranslator) TranslateComposite(operator string, conditions []Condition) (string, []interface{}, error)

TranslateComposite 转义复合条件(AND/OR)

func (*DefaultSQLTranslator) TranslateCondition

func (t *DefaultSQLTranslator) TranslateCondition(condition Condition) (string, []interface{}, error)

TranslateCondition 转义单个条件

type DialectAwareQueryCompiler added in v1.0.0

type DialectAwareQueryCompiler interface {
	SetDialect(dialect SQLDialect)
}

DialectAwareQueryCompiler 可感知 SQL 方言的编译器。

type DomainTypeBuilder added in v1.0.0

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

DomainTypeBuilder 构建 PostgreSQL DOMAIN 类型 DDL。

func (*DomainTypeBuilder) BaseType added in v1.0.0

func (b *DomainTypeBuilder) BaseType(pgType string) *DomainTypeBuilder

BaseType 设置 DOMAIN 的基础类型,如 "TEXT"、"INTEGER"、"NUMERIC(10,2)"。

func (*DomainTypeBuilder) Build added in v1.0.0

func (b *DomainTypeBuilder) Build() (string, error)

Build 生成 CREATE DOMAIN DDL 字符串,不执行。

func (*DomainTypeBuilder) Check added in v1.0.0

func (b *DomainTypeBuilder) Check(expression string) *DomainTypeBuilder

Check 添加一个 CHECK 约束,expression 中用 VALUE 代表域的当前值。 可多次调用以附加多个约束。

示例:Check(`VALUE ~ '^[^@]+@[^@]+$'`)

func (*DomainTypeBuilder) CheckNamed added in v1.0.0

func (b *DomainTypeBuilder) CheckNamed(constraintName, expression string) *DomainTypeBuilder

CheckNamed 添加一个带命名的 CHECK 约束

示例:CheckNamed("positive", "VALUE > 0")

func (*DomainTypeBuilder) Create added in v1.0.0

func (b *DomainTypeBuilder) Create(ctx context.Context) error

Create 在数据库中创建 DOMAIN 类型。

func (*DomainTypeBuilder) Default added in v1.0.0

func (b *DomainTypeBuilder) Default(expr string) *DomainTypeBuilder

Default 设置默认值表达式(PL/pgSQL 表达式字符串)。

func (*DomainTypeBuilder) Drop added in v1.0.0

func (b *DomainTypeBuilder) Drop(ctx context.Context, ifExists bool) error

Drop 删除 DOMAIN 类型。

func (*DomainTypeBuilder) Exists added in v1.0.0

func (b *DomainTypeBuilder) Exists(ctx context.Context) (bool, error)

Exists 检查该 DOMAIN 类型是否已存在。

func (*DomainTypeBuilder) IfNotExists added in v1.0.0

func (b *DomainTypeBuilder) IfNotExists() *DomainTypeBuilder

IfNotExists 若类型已存在则静默跳过。

func (*DomainTypeBuilder) NotNull added in v1.0.0

func (b *DomainTypeBuilder) NotNull() *DomainTypeBuilder

NotNull 添加 NOT NULL 约束。

func (*DomainTypeBuilder) Schema added in v1.0.0

func (b *DomainTypeBuilder) Schema(schema string) *DomainTypeBuilder

Schema 可选:指定类型所在的 schema。

type DynamicTableConfig

type DynamicTableConfig struct {
	// 表名称
	TableName string

	// 表描述
	Description string

	// 表字段定义
	Fields []*DynamicTableField

	// 触发条件:关联的父表(当父表插入或更新时触发建表)
	ParentTable string

	// 触发条件:检查父表的字段值
	// 例如:type = 'custom' 时才创建此动态表
	TriggerCondition string

	// 表创建策略:auto 自动创建,manual 手动创建
	Strategy string // "auto" or "manual"

	// 额外参数(适配器特定)
	Options map[string]interface{}
}

DynamicTableConfig 动态表配置 定义触发条件和表的创建规则

func NewDynamicTableConfig

func NewDynamicTableConfig(tableName string) *DynamicTableConfig

NewDynamicTableConfig 创建新的动态表配置

func (*DynamicTableConfig) AddField

AddField 添加字段到动态表配置

func (*DynamicTableConfig) WithDescription

func (c *DynamicTableConfig) WithDescription(desc string) *DynamicTableConfig

WithDescription 设置描述

func (*DynamicTableConfig) WithOption

func (c *DynamicTableConfig) WithOption(key string, value interface{}) *DynamicTableConfig

WithOption 设置选项

func (*DynamicTableConfig) WithParentTable

func (c *DynamicTableConfig) WithParentTable(parentTable, triggerCondition string) *DynamicTableConfig

WithParentTable 设置父表(用于自动触发)

func (*DynamicTableConfig) WithStrategy

func (c *DynamicTableConfig) WithStrategy(strategy string) *DynamicTableConfig

WithStrategy 设置创建策略

type DynamicTableField

type DynamicTableField struct {
	Name        string
	Type        FieldType
	Primary     bool
	Autoinc     bool
	Null        bool
	Default     interface{}
	Index       bool
	Unique      bool
	Description string
}

DynamicTableField 动态表的字段定义

func NewDynamicTableField

func NewDynamicTableField(name string, fieldType FieldType) *DynamicTableField

NewDynamicTableField 创建新的字段

func (*DynamicTableField) AsNotNull

func (f *DynamicTableField) AsNotNull() *DynamicTableField

AsNotNull 设置为 NOT NULL

func (*DynamicTableField) AsPrimaryKey

func (f *DynamicTableField) AsPrimaryKey() *DynamicTableField

AsPrimaryKey 设置为主键

func (*DynamicTableField) WithAutoinc

func (f *DynamicTableField) WithAutoinc() *DynamicTableField

WithAutoinc 启用自增

func (*DynamicTableField) WithDefault

func (f *DynamicTableField) WithDefault(value interface{}) *DynamicTableField

WithDefault 设置默认值

func (*DynamicTableField) WithDescription

func (f *DynamicTableField) WithDescription(desc string) *DynamicTableField

WithDescription 设置字段描述

func (*DynamicTableField) WithIndex

func (f *DynamicTableField) WithIndex() *DynamicTableField

WithIndex 添加索引

func (*DynamicTableField) WithUnique

func (f *DynamicTableField) WithUnique() *DynamicTableField

WithUnique 添加唯一约束

type DynamicTableHook

type DynamicTableHook interface {
	// 注册动态表配置
	RegisterDynamicTable(ctx context.Context, config *DynamicTableConfig) error

	// 注销动态表配置
	UnregisterDynamicTable(ctx context.Context, configName string) error

	// 列出所有已注册的动态表配置
	ListDynamicTableConfigs(ctx context.Context) ([]*DynamicTableConfig, error)

	// 获取特定的动态表配置
	GetDynamicTableConfig(ctx context.Context, configName string) (*DynamicTableConfig, error)

	// 手动触发动态表创建(当 Strategy = manual 时)
	CreateDynamicTable(ctx context.Context, configName string, params map[string]interface{}) (string, error)

	// 获取已创建的动态表列表
	ListCreatedDynamicTables(ctx context.Context, configName string) ([]string, error)
}

DynamicTableHook 动态表钩子接口 实现者需要在适配器中实现此接口

type DynamicTableRegistry

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

DynamicTableRegistry 动态表配置注册表

func NewDynamicTableRegistry

func NewDynamicTableRegistry() *DynamicTableRegistry

NewDynamicTableRegistry 创建动态表注册表

func (*DynamicTableRegistry) Get

Get 获取配置

func (*DynamicTableRegistry) List

List 列出所有配置

func (*DynamicTableRegistry) Register

func (r *DynamicTableRegistry) Register(name string, config *DynamicTableConfig) error

Register 注册配置

func (*DynamicTableRegistry) Unregister

func (r *DynamicTableRegistry) Unregister(name string) error

Unregister 注销配置

type EmailValidator

type EmailValidator struct {
	Locale string
}

EmailValidator 邮箱格式验证器

func NewEmailValidatorForLocale added in v1.0.0

func NewEmailValidatorForLocale(locale string) *EmailValidator

func (*EmailValidator) Validate

func (v *EmailValidator) Validate(value interface{}) error

func (*EmailValidator) ValidateWithLocale added in v1.0.0

func (v *EmailValidator) ValidateWithLocale(value interface{}, locale string) error

type EnumTypeBuilder added in v1.0.0

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

EnumTypeBuilder 构建 PostgreSQL ENUM 类型 DDL。

func (*EnumTypeBuilder) Build added in v1.0.0

func (b *EnumTypeBuilder) Build() (string, error)

Build 生成 CREATE TYPE ... AS ENUM DDL 字符串,不执行。

func (*EnumTypeBuilder) Create added in v1.0.0

func (b *EnumTypeBuilder) Create(ctx context.Context) error

Create 在数据库中创建 ENUM 类型。 若 IfNotExists() 已设置,且类型已存在则静默跳过。

func (*EnumTypeBuilder) Drop added in v1.0.0

func (b *EnumTypeBuilder) Drop(ctx context.Context, ifExists bool) error

Drop 删除 ENUM 类型。ifExists 为 true 时使用 DROP TYPE ... CASCADE IF EXISTS。

func (*EnumTypeBuilder) Exists added in v1.0.0

func (b *EnumTypeBuilder) Exists(ctx context.Context) (bool, error)

Exists 检查该 ENUM 类型是否已存在于数据库中。

func (*EnumTypeBuilder) IfNotExists added in v1.0.0

func (b *EnumTypeBuilder) IfNotExists() *EnumTypeBuilder

IfNotExists 如果类型已存在则跳过,不报错。 实现方式:先检查 pg_type,不支持 CREATE TYPE IF NOT EXISTS 语法(PG 不支持该语法)。

func (*EnumTypeBuilder) Schema added in v1.0.0

func (b *EnumTypeBuilder) Schema(schema string) *EnumTypeBuilder

Schema 可选:指定类型所在的 schema(默认 public)。

func (*EnumTypeBuilder) Values added in v1.0.0

func (b *EnumTypeBuilder) Values(vals ...string) *EnumTypeBuilder

Values 设置枚举允许的字面值列表(顺序有意义,PostgreSQL 会按此顺序排序比较)。

type FKOption added in v1.0.0

type FKOption func(*TableConstraint)

FKOption 外键约束选项(函数选项模式)。

func WithJoinType added in v1.0.0

func WithJoinType(joinType string) FKOption

WithJoinType 为外键约束的视图提示指定 JOIN 类型("LEFT" / "INNER" / "RIGHT")。 仅当已通过 WithViewHint 设置视图提示时才有效。

func WithViewHint added in v1.0.0

func WithViewHint(viewName string, materialized bool, columns ...string) FKOption

WithViewHint 为外键约束附加视图提示,声明该关联的热点查询视图。

// 创建 user_orders_view,查询 orders JOIN users:
schema.AddForeignKey("fk_orders_users",
	[]string{"user_id"}, "users", []string{"id"}, "CASCADE", "",
	WithViewHint("user_orders_view", false))

type FeatureCategory

type FeatureCategory string

FeatureCategory 特性分类

const (
	CategoryIndexing  FeatureCategory = "indexing"  // 索引和约束
	CategoryTypes     FeatureCategory = "types"     // 自定义类型
	CategoryFunctions FeatureCategory = "functions" // 函数和存储过程
	CategoryAdvanced  FeatureCategory = "advanced"  // 高级查询
	CategoryJSON      FeatureCategory = "json"      // JSON 支持
	CategoryFullText  FeatureCategory = "full_text" // 全文搜索
	CategoryOther     FeatureCategory = "other"     // 其他特性
)

type FeatureComparison

type FeatureComparison struct {
	Database1      string
	Database2      string
	CommonFeatures []string // 共同支持的特性
	OnlyInFirst    []string // 仅第一个数据库支持
	OnlyInSecond   []string // 仅第二个数据库支持
}

FeatureComparison 特性比较结果

func CompareFeatures

func CompareFeatures(f1, f2 *DatabaseFeatures) *FeatureComparison

CompareFeatures 比较两个数据库的特性差异

type FeatureExecutionDecision added in v1.0.0

type FeatureExecutionDecision struct {
	Mode     FeatureExecutionMode
	Fallback FeatureFallback
	Reason   string
}

FeatureExecutionDecision 功能执行决策结果

type FeatureExecutionMode added in v1.0.0

type FeatureExecutionMode string

FeatureExecutionMode 功能执行模式 native: 使用数据库原生能力 custom: 使用 adapter 自定义实现 fallback: 使用降级策略 unsupported: 不支持且无替代方案

const (
	FeatureExecutionNative      FeatureExecutionMode = "native"
	FeatureExecutionCustom      FeatureExecutionMode = "custom"
	FeatureExecutionFallback    FeatureExecutionMode = "fallback"
	FeatureExecutionUnsupported FeatureExecutionMode = "unsupported"
)

type FeatureFallback

type FeatureFallback string

FeatureFallback 特性降级策略

const (
	FallbackNone             FeatureFallback = "none"              // 不支持,返回错误
	FallbackCheckConstraint  FeatureFallback = "check_constraint"  // 使用 CHECK 约束
	FallbackDynamicTable     FeatureFallback = "dynamic_table"     // 使用动态类型表
	FallbackApplicationLayer FeatureFallback = "application_layer" // 应用层处理
)

type FeatureSupport

type FeatureSupport struct {
	Supported  bool   // 是否支持
	MinVersion string // 最低支持版本(可选)
	Notes      string // 备注说明(可选)
}

FeatureSupport 特性支持建模(支持版本与备注)

type Field

type Field struct {
	Name         string
	Type         FieldType
	Default      interface{}
	Null         bool
	Primary      bool
	Autoinc      bool
	Index        bool
	Unique       bool
	Validators   []Validator
	Transformers []Transformer
}

Field 定义模式中的字段

type FieldBuilder

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

FieldBuilder 字段构造器

func NewField

func NewField(name string, fieldType FieldType) *FieldBuilder

NewField 创建新字段

func (*FieldBuilder) Build

func (fb *FieldBuilder) Build() *Field

Build 构建字段

func (*FieldBuilder) Default

func (fb *FieldBuilder) Default(value interface{}) *FieldBuilder

Default 设置默认值

func (*FieldBuilder) Index

func (fb *FieldBuilder) Index() *FieldBuilder

Index 添加索引

func (*FieldBuilder) Null

func (fb *FieldBuilder) Null(allow bool) *FieldBuilder

Null 设置是否允许为空

func (*FieldBuilder) PrimaryKey

func (fb *FieldBuilder) PrimaryKey() *FieldBuilder

PrimaryKey 标记为主键

func (*FieldBuilder) Transform

func (fb *FieldBuilder) Transform(transformer Transformer) *FieldBuilder

Transform 添加转换器

func (*FieldBuilder) Unique

func (fb *FieldBuilder) Unique() *FieldBuilder

Unique 添加唯一约束

func (*FieldBuilder) Validate

func (fb *FieldBuilder) Validate(validator Validator) *FieldBuilder

Validate 添加验证器

type FieldType

type FieldType string

FieldType 字段类型定义

const (
	TypeString   FieldType = "string"
	TypeInteger  FieldType = "integer"
	TypeFloat    FieldType = "float"
	TypeBoolean  FieldType = "boolean"
	TypeTime     FieldType = "time"
	TypeBinary   FieldType = "binary"
	TypeDecimal  FieldType = "decimal"
	TypeMap      FieldType = "map"
	TypeArray    FieldType = "array"
	TypeJSON     FieldType = "json"
	TypeLocation FieldType = "location"
)

type ForeignKeyAction

type ForeignKeyAction string
const (
	ActionRestrict ForeignKeyAction = "RESTRICT"
	ActionCascade  ForeignKeyAction = "CASCADE"
	ActionSetNull  ForeignKeyAction = "SET NULL"
	ActionNoAction ForeignKeyAction = "NO ACTION"
)

type ForeignKeyDef

type ForeignKeyDef struct {
	// 源表的列
	FromColumn string

	// 目标表的列
	ToColumn string

	// 级联删除
	OnDelete ForeignKeyAction
	OnUpdate ForeignKeyAction
}

ForeignKeyDef 外键定义

type FullTextRuntimeCapability added in v1.0.0

type FullTextRuntimeCapability struct {
	NativeSupported       bool
	PluginChecked         bool
	PluginAvailable       bool
	PluginName            string
	TokenizationSupported bool
	TokenizationMode      string
	Notes                 string
}

FullTextRuntimeCapability 运行时全文检索能力探测结果

type FullTextRuntimeInspector added in v1.0.0

type FullTextRuntimeInspector interface {
	InspectFullTextRuntime(ctx context.Context) (*FullTextRuntimeCapability, error)
}

FullTextRuntimeInspector 适配器可选接口:用于运行时探测全文与分词能力

type FuzzySearchPlan added in v1.0.0

type FuzzySearchPlan struct {
	Mode      string
	Condition Condition
	Tokens    []string
	Reason    string
}

FuzzySearchPlan 模糊查询执行计划

type IDCardValidator added in v1.0.0

type IDCardValidator struct {
	Locale string
}

IDCardValidator 身份证号验证器(中国大陆 15/18 位) 它是 RegexValidator 的特化封装。

func NewIDCardValidatorForLocale added in v1.0.0

func NewIDCardValidatorForLocale(locale string) *IDCardValidator

func (*IDCardValidator) Validate added in v1.0.0

func (v *IDCardValidator) Validate(value interface{}) error

func (*IDCardValidator) ValidateWithLocale added in v1.0.0

func (v *IDCardValidator) ValidateWithLocale(value interface{}, locale string) error

type JSONRuntimeCapability added in v1.0.0

type JSONRuntimeCapability struct {
	// JSON 函数能力是否可用(如 ISJSON/JSON_VALUE 或 json/jsonb 操作能力)。
	NativeSupported bool

	// 是否支持原生 JSON 数据类型(而非文本承载)。
	NativeJSONTypeSupported bool

	// 运行时检测到的引擎版本信息。
	Version string

	// 是否执行了插件检测(某些数据库 JSON 为内建能力,该值可为 false)。
	PluginChecked bool

	// 是否检测到插件(若插件不适用则为 false)。
	PluginAvailable bool

	// 检测到的插件名或说明。
	PluginName string

	// 额外说明(升级建议、降级建议等)。
	Notes string
}

JSONRuntimeCapability JSON 能力运行时探测结果。

type JSONRuntimeInspector added in v1.0.0

type JSONRuntimeInspector interface {
	InspectJSONRuntime(ctx context.Context) (*JSONRuntimeCapability, error)
}

JSONRuntimeInspector 适配器可选接口:用于运行时探测 JSON 能力。

type JoinBuilder added in v1.1.0

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

JoinBuilder 连接构造器,携带目标 Schema,支持跨数据库通用表达。

以语义意图(JoinSemantic)驱动,无需关心 SQL JOIN 方向细节:

  • SQL 后端:semantic → INNER/LEFT/CROSS JOIN;On() 字符串作为 ON 子句; Filter() 以 join alias 限定后追加到 WHERE。
  • Neo4j 后端:semantic → MATCH / OPTIONAL MATCH;On() 为空时从 Schema FK 推断关系类型;Filter() 转换为节点属性过滤。

func NewCrossJoin added in v1.1.0

func NewCrossJoin(schema Schema) *JoinBuilder

NewCrossJoin 创建 CROSS JOIN builder(无 ON 条件)。

func NewInnerJoin added in v1.1.0

func NewInnerJoin(schema Schema) *JoinBuilder

NewInnerJoin 创建 INNER JOIN builder(等同于 NewRequiredJoin)。

func NewJoinBuilder added in v1.1.0

func NewJoinBuilder(joinType string, schema Schema) *JoinBuilder

NewJoinBuilder 创建 JoinBuilder(兼容旧代码;推荐改用 NewJoinWith / NewRequiredJoin / NewOptionalJoin)。

func NewJoinWith added in v1.1.0

func NewJoinWith(schema Schema) *JoinBuilder

NewJoinWith 创建 Schema 感知 JoinBuilder,语义由 Schema FK 关系自动推断。 FK 字段 Null:true → 自动使用 optional(LEFT JOIN / OPTIONAL MATCH);否则 → required。 可通过 .Required() / .Optional() 显式覆盖。

func NewLeftJoin added in v1.1.0

func NewLeftJoin(schema Schema) *JoinBuilder

NewLeftJoin 创建 LEFT JOIN builder(等同于 NewOptionalJoin)。

func NewOptionalJoin added in v1.1.0

func NewOptionalJoin(schema Schema) *JoinBuilder

NewOptionalJoin 创建语义为"可选匹配"的 JoinBuilder(SQL: LEFT JOIN;Neo4j: OPTIONAL MATCH)。

func NewRequiredJoin added in v1.1.0

func NewRequiredJoin(schema Schema) *JoinBuilder

NewRequiredJoin 创建语义为"必须匹配"的 JoinBuilder(SQL: INNER JOIN;Neo4j: MATCH)。

func NewRightJoin added in v1.1.0

func NewRightJoin(schema Schema) *JoinBuilder

NewRightJoin 创建 RIGHT JOIN builder。 注意:RIGHT JOIN 在 NoSQL 适配器中无方向概念,统一视为 optional 语义,跨数据库均安全。

func (*JoinBuilder) As added in v1.1.0

func (b *JoinBuilder) As(alias string) *JoinBuilder

As 设置连接别名。

func (*JoinBuilder) Filter added in v1.1.0

func (b *JoinBuilder) Filter(conds ...Condition) *JoinBuilder

Filter 追加对连接目标实体的过滤条件。 SQL: 以 join alias 限定后追加到 WHERE 子句。 Neo4j: 转换为对连接节点的属性过滤(WHERE alias.prop op val)。

func (*JoinBuilder) On added in v1.1.0

func (b *JoinBuilder) On(expr string) *JoinBuilder

On 设置连接表达式。 SQL: 直接作为 ON <expr>,例如 "users.id = orders.user_id"。 Neo4j: 关系模式字符串,例如 "->[:OWNS]->" 或 "<-[:BELONGS_TO]-"。 为空时 Neo4j 编译器自动从目标 Schema 的 FK 约束推断关系类型。

func (*JoinBuilder) Optional added in v1.1.0

func (b *JoinBuilder) Optional() *JoinBuilder

Optional 显式设置语义为"可选匹配",覆盖自动推断。

func (*JoinBuilder) Required added in v1.1.0

func (b *JoinBuilder) Required() *JoinBuilder

Required 显式设置语义为"必须匹配",覆盖自动推断。

type JoinSemantic added in v1.1.0

type JoinSemantic string

JoinSemantic 表达 JOIN 的语义意图,与 SQL 方言和数据库类型无关。 适配器根据此语义自行选择最优实现(JOIN 关键词、关系模式、MATCH 类型等)。

const (
	// JoinSemanticRequired 必须匹配:双方都必须存在(SQL: INNER JOIN;Neo4j: MATCH)。
	JoinSemanticRequired JoinSemantic = "required"
	// JoinSemanticOptional 连接目标可不存在(SQL: LEFT JOIN;Neo4j: OPTIONAL MATCH)。
	JoinSemanticOptional JoinSemantic = "optional"
	// JoinSemanticCross 笛卡尔积(SQL: CROSS JOIN;Neo4j: 独立 MATCH)。
	JoinSemanticCross JoinSemantic = "cross"
	// JoinSemanticInfer 由 Schema FK 关系自动推断(默认值):
	// FK 字段 Null:true → JoinSemanticOptional;否则 → JoinSemanticRequired。
	JoinSemanticInfer JoinSemantic = ""
)

type JoinTableDef

type JoinTableDef struct {
	// 关联表名称
	TableName string

	// 源表外键列和目标表外键列
	FromForeignKey string
	ToForeignKey   string

	// 额外的列(如时间戳等)
	ExtraColumns []*Field
}

JoinTableDef 关联表定义(多对多)

type LengthValidator

type LengthValidator struct {
	Min int
	Max int
}

LengthValidator 长度验证器

func (*LengthValidator) Validate

func (v *LengthValidator) Validate(value interface{}) error

type LocalCacheStats added in v1.0.0

type LocalCacheStats struct {
	Total int
	Stale int
	Fresh int
}

LocalCacheStats 返回当前缓存状态统计(总条目数、已过期、有效)。

type LocaleAwareValidator added in v1.0.0

type LocaleAwareValidator interface {
	ValidateWithLocale(value interface{}, locale string) error
}

LocaleAwareValidator 可感知 locale 的验证器接口。

type LowercaseTransformer

type LowercaseTransformer struct{}

LowercaseTransformer 小写转换器

func (*LowercaseTransformer) Transform

func (t *LowercaseTransformer) Transform(value interface{}) (interface{}, error)

type MaxLengthValidator

type MaxLengthValidator struct {
	Length int
}

MaxLengthValidator 最大长度验证器

func (*MaxLengthValidator) Validate

func (v *MaxLengthValidator) Validate(value interface{}) error

type Migration

type Migration struct {
	// 版本号 (时间戳格式): 20260131100000
	Version string

	// 描述
	Description string

	// 迁移的 SQL 语句
	UpSQL []string

	// 回滚的 SQL 语句
	DownSQL []string
}

Migration 表示一个数据库迁移

type MigrationInterface

type MigrationInterface interface {
	// Up 执行迁移
	Up(ctx context.Context, repo *Repository) error

	// Down 回滚迁移
	Down(ctx context.Context, repo *Repository) error

	// Version 返回迁移版本号(通常是时间戳)
	Version() string

	// Description 返回迁移描述
	Description() string
}

Migration 接口 - 每个迁移文件都需要实现这个接口

type MigrationLog

type MigrationLog struct {
	ID         int64
	Version    string
	RunOn      time.Time
	ExecutedAt time.Time
}

MigrationLog 迁移日志记录

type MigrationOperation added in v1.0.3

type MigrationOperation struct {
	Kind        MigrationOperationKind
	Version     string
	Description string
	AppliedAt   time.Time
}

MigrationOperation 是迁移执行层的统一操作描述。 v1.1 起,迁移运行器应只表达操作意图,不直接拼接方言 SQL。

type MigrationOperationKind added in v1.0.3

type MigrationOperationKind string

MigrationOperationKind 表示迁移操作类型。

const (
	MigrationOpRecordApplied MigrationOperationKind = "record_applied"
	MigrationOpRemoveApplied MigrationOperationKind = "remove_applied"
)

type MigrationRunner

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

MigrationRunner 迁移运行器

func NewMigrationRunner

func NewMigrationRunner(repo *Repository) *MigrationRunner

NewMigrationRunner 创建迁移运行器

func (*MigrationRunner) Down

func (r *MigrationRunner) Down(ctx context.Context) error

Down 回滚最后一个迁移

func (*MigrationRunner) Register

func (r *MigrationRunner) Register(migration MigrationInterface)

Register 注册迁移

func (*MigrationRunner) Status

func (r *MigrationRunner) Status(ctx context.Context) ([]MigrationStatus, error)

Status 显示迁移状态

func (*MigrationRunner) Up

func (r *MigrationRunner) Up(ctx context.Context) error

Up 执行所有待执行的迁移

type MigrationStatus

type MigrationStatus struct {
	Version     string
	Description string
	Applied     bool
	AppliedAt   time.Time
}

MigrationStatus 迁移状态

type Migrator

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

Migrator 迁移器

func NewMigrator

func NewMigrator(repo *Repository) *Migrator

NewMigrator 创建新的迁移器

func (*Migrator) Down

func (m *Migrator) Down(ctx context.Context) error

Down 回滚最后一个迁移

func (*Migrator) Register

func (m *Migrator) Register(migration *Migration) error

Register 注册迁移

func (*Migrator) Status

func (m *Migrator) Status(ctx context.Context) ([]map[string]interface{}, error)

Status 显示迁移状态

func (*Migrator) Up

func (m *Migrator) Up(ctx context.Context) error

Up 执行所有待执行的迁移

type MinLengthValidator

type MinLengthValidator struct {
	Length int
}

MinLengthValidator 最小长度验证器

func (*MinLengthValidator) Validate

func (v *MinLengthValidator) Validate(value interface{}) error

type MongoAdapter

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

MongoAdapter MongoDB 适配器(最小可用版本:连接/健康检查)

func NewMongoAdapter

func NewMongoAdapter(config *Config) (*MongoAdapter, error)

NewMongoAdapter 创建 MongoAdapter(不建立连接)

func (*MongoAdapter) Begin

func (a *MongoAdapter) Begin(ctx context.Context, opts ...interface{}) (Tx, error)

Begin MongoDB 不支持 SQL 事务接口

func (*MongoAdapter) Close

func (a *MongoAdapter) Close() error

Close 关闭连接

func (*MongoAdapter) Connect

func (a *MongoAdapter) Connect(ctx context.Context, config *Config) error

Connect 建立 MongoDB 连接

func (*MongoAdapter) Exec

func (a *MongoAdapter) Exec(ctx context.Context, sql string, args ...interface{}) (sql.Result, error)

Exec MongoDB 不支持 SQL Exec

func (*MongoAdapter) ExecuteCompiledFindPlan added in v1.0.0

func (a *MongoAdapter) ExecuteCompiledFindPlan(ctx context.Context, query string) ([]map[string]interface{}, error)

ExecuteCompiledFindPlan 执行由 MongoQueryConstructor 生成的 Find 计划。

func (*MongoAdapter) ExecuteCompiledWritePlan added in v1.0.0

func (a *MongoAdapter) ExecuteCompiledWritePlan(ctx context.Context, query string) (*QueryConstructorExecSummary, error)

ExecuteCompiledWritePlan 执行由 MongoQueryConstructor 生成的写入计划。

func (*MongoAdapter) ExecuteCustomFeature added in v1.0.0

func (a *MongoAdapter) ExecuteCustomFeature(ctx context.Context, feature string, input map[string]interface{}) (interface{}, error)

ExecuteCustomFeature 执行 MongoDB 的自定义能力(当前提供 document join 方案)

func (*MongoAdapter) GetDatabaseFeatures

func (a *MongoAdapter) GetDatabaseFeatures() *DatabaseFeatures

GetDatabaseFeatures MongoDB 特性声明(最小实现)

func (*MongoAdapter) GetQueryBuilderProvider

func (a *MongoAdapter) GetQueryBuilderProvider() QueryConstructorProvider

GetQueryBuilderProvider 返回 MongoDB BSON Query Builder Provider。

func (*MongoAdapter) GetQueryFeatures

func (a *MongoAdapter) GetQueryFeatures() *QueryFeatures

GetQueryFeatures MongoDB 查询特性声明(最小实现)

func (*MongoAdapter) GetRawConn

func (a *MongoAdapter) GetRawConn() interface{}

GetRawConn 返回 mongo.Client

func (*MongoAdapter) HasCustomFeatureImplementation added in v1.0.0

func (a *MongoAdapter) HasCustomFeatureImplementation(feature string) bool

HasCustomFeatureImplementation 声明 MongoDB 可用的自定义能力

func (*MongoAdapter) InspectFullTextRuntime added in v1.0.0

func (a *MongoAdapter) InspectFullTextRuntime(ctx context.Context) (*FullTextRuntimeCapability, error)

InspectFullTextRuntime MongoDB 运行时全文能力说明。 这里不依赖插件检测,默认给出应用层分词可用的能力声明。

func (*MongoAdapter) ListScheduledTasks

func (a *MongoAdapter) ListScheduledTasks(ctx context.Context) ([]*ScheduledTaskStatus, error)

ListScheduledTasks MongoDB 暂不支持定时任务

func (*MongoAdapter) Ping

func (a *MongoAdapter) Ping(ctx context.Context) error

Ping 测试连接

func (*MongoAdapter) Query

func (a *MongoAdapter) Query(ctx context.Context, sql string, args ...interface{}) (*sql.Rows, error)

Query MongoDB 不支持 SQL Query

func (*MongoAdapter) QueryRow

func (a *MongoAdapter) QueryRow(ctx context.Context, sql string, args ...interface{}) *sql.Row

QueryRow MongoDB 不支持 SQL QueryRow

func (*MongoAdapter) RegisterScheduledTask

func (a *MongoAdapter) RegisterScheduledTask(ctx context.Context, task *ScheduledTaskConfig) error

RegisterScheduledTask MongoDB 暂不支持定时任务

func (*MongoAdapter) UnregisterScheduledTask

func (a *MongoAdapter) UnregisterScheduledTask(ctx context.Context, taskName string) error

UnregisterScheduledTask MongoDB 暂不支持定时任务

type MongoCompiledFindPlan added in v1.0.0

type MongoCompiledFindPlan struct {
	Collection string                 `json:"collection"`
	Filter     map[string]interface{} `json:"filter"`
	Projection []string               `json:"projection,omitempty"`
	Sort       []MongoSortField       `json:"sort,omitempty"`
	Limit      *int                   `json:"limit,omitempty"`
	Offset     *int                   `json:"offset,omitempty"`
	Lookups    []MongoLookupStage     `json:"lookups,omitempty"` // $lookup 聚合阶段参数列表
}

MongoCompiledFindPlan 是 Mongo QueryConstructor 编译后的可执行计划。

type MongoCompiledWritePlan added in v1.0.0

type MongoCompiledWritePlan struct {
	Operation         string                   `json:"operation"`
	Collection        string                   `json:"collection"`
	Filter            map[string]interface{}   `json:"filter,omitempty"`
	Update            map[string]interface{}   `json:"update,omitempty"`
	Document          map[string]interface{}   `json:"document,omitempty"`
	Documents         []map[string]interface{} `json:"documents,omitempty"`
	Upsert            bool                     `json:"upsert,omitempty"`
	ReturnInsertedID  bool                     `json:"return_inserted_id,omitempty"`
	ReturnWriteDetail bool                     `json:"return_write_detail,omitempty"`
}

MongoCompiledWritePlan 是 Mongo 写入计划。 Operation 支持 insert_one / insert_many / update_many / delete_many。

type MongoConnectionConfig added in v1.0.0

type MongoConnectionConfig struct {
	URI                  string `json:"uri,omitempty" yaml:"uri,omitempty"`
	Database             string `json:"database,omitempty" yaml:"database,omitempty"`
	RelationJoinStrategy string `json:"relation_join_strategy,omitempty" yaml:"relation_join_strategy,omitempty"` // "lookup" | "pipeline"
	HideThroughArtifacts *bool  `json:"hide_through_artifacts,omitempty" yaml:"hide_through_artifacts,omitempty"` // 默认 true
}

MongoConnectionConfig MongoDB 连接配置。

type MongoFactory

type MongoFactory struct{}

MongoFactory AdapterFactory 实现

func (*MongoFactory) Create

func (f *MongoFactory) Create(config *Config) (Adapter, error)

func (*MongoFactory) Name

func (f *MongoFactory) Name() string

type MongoLocalCache added in v1.0.0

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

MongoLocalCache 提供"预加载集合到内存"的本地缓存能力, 用于替代 MongoDB 代价高昂的 $lookup 连表操作和全文搜索预热。

典型场景:

  • 字典表、角色权限表等体积小且读多写少的集合:整体预加载后做应用层 JOIN, 避免每次请求都触发 $lookup aggregation。
  • 应用层全文搜索预热:把需要搜索的文档拉进内存,配合 fuzzy 搜索库使用。

并发安全:内部使用 sync.RWMutex,多读单写,读路径无锁争用。

示例:

cache, ok := db.GetMongoLocalCache(repo.GetAdapter())
_ = cache.Preload(ctx, "roles", "roles", nil, nil, 10*time.Minute)
roles, _ := cache.Get("roles")

// 应用层 JOIN:把用户列表的 role_id 字段和已缓存的 roles 集合关联
enriched := cache.JoinWith(users, "role_id", "roles", "_id", "role", false)

func GetMongoLocalCache added in v1.0.0

func GetMongoLocalCache(adapter Adapter) (*MongoLocalCache, bool)

GetMongoLocalCache 从 Adapter 获取 MongoLocalCache。 若 adapter 不是 *MongoAdapter,返回 (nil, false)。

func (*MongoLocalCache) ForcePreload added in v1.0.0

func (c *MongoLocalCache) ForcePreload(ctx context.Context, name, collection string, filter, projection bson.D, ttl time.Duration) error

ForcePreload 无视缓存状态,强制重新从 MongoDB 拉取数据并刷新本地缓存。

func (*MongoLocalCache) Get added in v1.0.0

func (c *MongoLocalCache) Get(name string) ([]bson.M, bool)

Get 获取已预加载的文档列表。 若缓存不存在或已过期返回 (nil, false)。

func (*MongoLocalCache) Invalidate added in v1.0.0

func (c *MongoLocalCache) Invalidate(name string)

Invalidate 删除指定名称的本地缓存条目(下次 Preload 会重新从 MongoDB 拉取)。

func (*MongoLocalCache) InvalidateAll added in v1.0.0

func (c *MongoLocalCache) InvalidateAll()

InvalidateAll 清空所有本地缓存条目。

func (*MongoLocalCache) JoinWith added in v1.0.0

func (c *MongoLocalCache) JoinWith(localDocs []bson.M, localKey, cacheName, cacheKey, asField string, many bool) []bson.M

JoinWith 对 localDocs 做应用层等值 JOIN,替代代价高昂的 MongoDB $lookup。

  • localDocs: 主集合已查询出的文档列表(不会被修改)
  • localKey: 主文档中的连接字段名(如 "role_id")
  • cacheName: 维表在本地缓存中的标识符(通过 Preload 加载)
  • cacheKey: 维表文档中的匹配字段名(如 "_id")
  • asField: JOIN 结果写入主文档的字段名(如 "role")
  • many: true = 1:N(结果为 []bson.M 切片),false = N:1(结果为首个匹配文档或 nil)

返回注入了 asField 字段的新文档列表。若缓存不存在或已过期,原样返回 localDocs。

示例(N:1,每个 user 对应一个 role):

enriched := cache.JoinWith(users, "role_id", "roles", "_id", "role", false)

func (*MongoLocalCache) Preload added in v1.0.0

func (c *MongoLocalCache) Preload(ctx context.Context, name, collection string, filter, projection bson.D, ttl time.Duration) error

Preload 按需预加载集合数据到本地内存(若缓存未过期则直接复用,不发起网络请求)。

  • name: 本地缓存标识符(可与集合名不同,用于 JoinWith 等 API 的 cacheName 参数)
  • collection: MongoDB 集合名
  • filter: BSON 过滤条件(nil 表示加载集合全量文档)
  • projection: BSON 字段投影(nil 表示返回全部字段)
  • ttl: 缓存有效期(<= 0 表示永不自动过期)

func (*MongoLocalCache) Stats added in v1.0.0

func (c *MongoLocalCache) Stats() LocalCacheStats

Stats 返回缓存条目的当前统计信息。

type MongoLookupStage added in v1.1.0

type MongoLookupStage struct {
	From            string       `json:"from"`                      // 目标集合名
	LocalField      string       `json:"localField"`                // 本集合中的连接字段
	ForeignField    string       `json:"foreignField"`              // 目标集合中的连接字段
	As              string       `json:"as"`                        // 输出数组字段名(alias)
	Semantic        JoinSemantic `json:"semantic"`                  // optional → 保留空数组;required → 需过滤
	ThroughArtifact bool         `json:"throughArtifact,omitempty"` // true 表示中间关系临时字段
}

MongoLookupStage 描述一个 MongoDB $lookup 聚合阶段的参数。 对于 required 语义(BelongsTo):调用方应在 $lookup 后追加 $unwind{preserveNullAndEmptyArrays:false} 以过滤掉无匹配文档(等价于 INNER JOIN)。 对于 optional 语义(HasMany/HasOne):无需额外处理(等价于 LEFT JOIN/OPTIONAL MATCH)。

type MongoQueryConstructor added in v1.0.0

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

MongoQueryConstructor MongoDB BSON 查询构造器。 目标是复用统一 QueryConstructor 接口,在 Mongo 下编译为 BSON Find 计划。

func NewMongoQueryConstructor added in v1.0.0

func NewMongoQueryConstructor(schema Schema) *MongoQueryConstructor

func (*MongoQueryConstructor) Build added in v1.0.0

func (qb *MongoQueryConstructor) Build(ctx context.Context) (string, []interface{}, error)

func (*MongoQueryConstructor) BuildFindPlan added in v1.0.0

func (qb *MongoQueryConstructor) BuildFindPlan() (*MongoCompiledFindPlan, error)

func (*MongoQueryConstructor) Count added in v1.1.0

func (qb *MongoQueryConstructor) Count(fieldName ...string) QueryConstructor

func (*MongoQueryConstructor) CountWith added in v1.1.0

func (qb *MongoQueryConstructor) CountWith(builder *CountBuilder) QueryConstructor

func (*MongoQueryConstructor) CrossJoin added in v1.0.0

func (qb *MongoQueryConstructor) CrossJoin(table string, alias ...string) QueryConstructor

func (*MongoQueryConstructor) CrossTableStrategy added in v1.0.0

func (qb *MongoQueryConstructor) CrossTableStrategy(strategy CrossTableStrategy) QueryConstructor

func (*MongoQueryConstructor) CustomMode added in v1.1.0

func (qb *MongoQueryConstructor) CustomMode() QueryConstructor

func (*MongoQueryConstructor) DeleteMany added in v1.0.0

func (qb *MongoQueryConstructor) DeleteMany() *MongoQueryConstructor

DeleteMany 设置写入计划为批量删除。 filter 默认取 Where 条件生成的 BSON 过滤器。

func (*MongoQueryConstructor) FromAlias added in v1.0.0

func (qb *MongoQueryConstructor) FromAlias(alias string) QueryConstructor

func (*MongoQueryConstructor) GetNativeBuilder added in v1.0.0

func (qb *MongoQueryConstructor) GetNativeBuilder() interface{}

func (*MongoQueryConstructor) InsertMany added in v1.0.0

func (qb *MongoQueryConstructor) InsertMany(documents []map[string]interface{}) *MongoQueryConstructor

InsertMany 设置写入计划为批量插入。

func (*MongoQueryConstructor) InsertOne added in v1.0.0

func (qb *MongoQueryConstructor) InsertOne(document map[string]interface{}) *MongoQueryConstructor

InsertOne 设置写入计划为单文档插入。

func (*MongoQueryConstructor) Join added in v1.0.0

func (qb *MongoQueryConstructor) Join(table, onClause string, alias ...string) QueryConstructor

func (*MongoQueryConstructor) JoinWith added in v1.1.0

func (qb *MongoQueryConstructor) JoinWith(builder *JoinBuilder) QueryConstructor

func (*MongoQueryConstructor) LeftJoin added in v1.0.0

func (qb *MongoQueryConstructor) LeftJoin(table, onClause string, alias ...string) QueryConstructor

func (*MongoQueryConstructor) Limit added in v1.0.0

func (qb *MongoQueryConstructor) Limit(count int) QueryConstructor

func (*MongoQueryConstructor) Offset added in v1.0.0

func (qb *MongoQueryConstructor) Offset(count int) QueryConstructor

func (*MongoQueryConstructor) OrderBy added in v1.0.0

func (qb *MongoQueryConstructor) OrderBy(field string, direction string) QueryConstructor

func (*MongoQueryConstructor) Page added in v1.1.1

func (qb *MongoQueryConstructor) Page(page int, pageSize int) QueryConstructor

func (*MongoQueryConstructor) Paginate added in v1.1.1

func (*MongoQueryConstructor) ReturnInsertedID added in v1.0.0

func (qb *MongoQueryConstructor) ReturnInsertedID() *MongoQueryConstructor

ReturnInsertedID 请求在写入结果中附加 inserted_id / inserted_ids(仅插入操作有效)。

func (*MongoQueryConstructor) ReturnWriteDetail added in v1.0.0

func (qb *MongoQueryConstructor) ReturnWriteDetail() *MongoQueryConstructor

ReturnWriteDetail 请求在写入结果中附加详细信息(matched/modified/upserted/deleted 等)。

func (*MongoQueryConstructor) RightJoin added in v1.0.0

func (qb *MongoQueryConstructor) RightJoin(table, onClause string, alias ...string) QueryConstructor

func (*MongoQueryConstructor) Select added in v1.0.0

func (qb *MongoQueryConstructor) Select(fields ...string) QueryConstructor

func (*MongoQueryConstructor) SelectCount added in v1.1.0

func (qb *MongoQueryConstructor) SelectCount(ctx context.Context, repo *Repository) (int64, error)

func (*MongoQueryConstructor) UpdateMany added in v1.0.0

func (qb *MongoQueryConstructor) UpdateMany(setFields map[string]interface{}, upsert bool) *MongoQueryConstructor

UpdateMany 设置写入计划为批量更新。 filter 默认取 Where 条件生成的 BSON 过滤器。

func (*MongoQueryConstructor) Upsert added in v1.1.0

func (qb *MongoQueryConstructor) Upsert(ctx context.Context, repo *Repository, cs *Changeset, conflictColumns ...string) (sql.Result, error)

func (*MongoQueryConstructor) Where added in v1.0.0

func (qb *MongoQueryConstructor) Where(condition Condition) QueryConstructor

func (*MongoQueryConstructor) WhereAll added in v1.0.0

func (qb *MongoQueryConstructor) WhereAll(conditions ...Condition) QueryConstructor

func (*MongoQueryConstructor) WhereAny added in v1.0.0

func (qb *MongoQueryConstructor) WhereAny(conditions ...Condition) QueryConstructor

func (*MongoQueryConstructor) WhereWith added in v1.1.0

func (qb *MongoQueryConstructor) WhereWith(builder *WhereBuilder) QueryConstructor

type MongoQueryConstructorProvider added in v1.0.0

type MongoQueryConstructorProvider struct{}

MongoQueryConstructorProvider MongoDB 查询构造器提供者。

func NewMongoQueryConstructorProvider added in v1.0.0

func NewMongoQueryConstructorProvider() *MongoQueryConstructorProvider

func (*MongoQueryConstructorProvider) GetCapabilities added in v1.0.0

func (*MongoQueryConstructorProvider) NewQueryConstructor added in v1.0.0

func (p *MongoQueryConstructorProvider) NewQueryConstructor(schema Schema) QueryConstructor

type MongoSortField added in v1.0.0

type MongoSortField struct {
	Field     string `json:"field"`
	Direction int    `json:"direction"` // 1=ASC, -1=DESC
}

MongoSortField 表示 Mongo 排序字段。

type MongoTTLFeatures added in v1.0.0

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

MongoTTLFeatures 提供 MongoDB TTL 索引管理和文档过期时间设置的特色能力。

MongoDB 原生支持 TTL 索引:在 Date 类型字段上建立 expireAfterSeconds 索引后, MongoDB 后台线程每 60 秒轮询一次,自动删除已过期的文档。

适用场景:Session token、临时验证码、速率限制计数器、日志保留策略等。

示例:

ttlFeat, ok := db.GetMongoTTLFeatures(repo.GetAdapter())
if !ok { ... }
_ = ttlFeat.EnsureTTLIndex(ctx, "sessions", "expires_at", 0)  // 精准到期
_ = ttlFeat.InsertWithExpiry(ctx, "sessions", bson.M{"token": "abc"}, "expires_at",
        time.Now().Add(30*time.Minute))

func GetMongoTTLFeatures added in v1.0.0

func GetMongoTTLFeatures(adapter Adapter) (*MongoTTLFeatures, bool)

GetMongoTTLFeatures 从 Adapter 获取 MongoDB TTL 特性视图。 若 adapter 不是 *MongoAdapter,返回 (nil, false)。

func (*MongoTTLFeatures) DropTTLIndex added in v1.0.0

func (f *MongoTTLFeatures) DropTTLIndex(ctx context.Context, collection, indexName string) error

DropTTLIndex 删除指定名称的 TTL 索引。

func (*MongoTTLFeatures) EnsureTTLIndex added in v1.0.0

func (f *MongoTTLFeatures) EnsureTTLIndex(ctx context.Context, collection, field string, expireAfter time.Duration) error

EnsureTTLIndex 在集合的指定字段上幂等地创建 TTL 索引。

  • collection: MongoDB 集合名
  • field: 必须是 BSON Date 类型字段(如 "expires_at"、"created_at")
  • expireAfter: 文档超过字段记录时间后延迟多久被删除(0 = 精准到期)

若同名/同字段索引已存在(IndexOptionsConflict code 85/86),视为幂等成功。

func (*MongoTTLFeatures) ExtendExpiry added in v1.0.0

func (f *MongoTTLFeatures) ExtendExpiry(ctx context.Context, collection string, filter bson.D, ttlField string, newExpiry time.Time) error

ExtendExpiry 更新符合 filter 的文档的过期时间字段,实现 TTL 续期。

  • filter: 用于定位目标文档的 BSON 过滤条件
  • ttlField: 文档中表示过期时间点的字段名
  • newExpiry: 新的过期时间点

func (*MongoTTLFeatures) InsertWithExpiry added in v1.0.0

func (f *MongoTTLFeatures) InsertWithExpiry(ctx context.Context, collection string, doc bson.M, ttlField string, expiresAt time.Time) error

InsertWithExpiry 插入一个文档并自动设置过期时间字段。

  • collection: MongoDB 集合名
  • doc: 要插入的文档(会被写入 ttlField 字段,调用方 doc 也会被修改)
  • ttlField: 文档中表示过期时间点的字段名(须与对应 TTL 索引字段一致)
  • expiresAt: 文档应在此时间点被 MongoDB 自动删除

func (*MongoTTLFeatures) ListTTLIndexes added in v1.0.0

func (f *MongoTTLFeatures) ListTTLIndexes(ctx context.Context, collection string) ([]*TTLIndexInfo, error)

ListTTLIndexes 列出指定集合上所有带 expireAfterSeconds 的 TTL 索引。

type MongoVirtualView added in v1.0.0

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

MongoVirtualView 用进程内存缓存模拟 MongoDB "物化视图"。

思路:将一条 Aggregation Pipeline 的执行结果按 TTL 缓存在进程内, 避免每次查询都触发完整的 aggregation,同时无需在数据库层维护物化视图 DDL。

与 SQL 物化视图的对比:

  • SQL 物化视图:结果存储在数据库磁盘,需手动 REFRESH 或定时刷新。
  • MongoVirtualView:结果缓存在应用进程内存,按 TTL 自动过期后重拉,免 DDL。

适用场景:报表汇总快照、权限角色预计算、低频变化但高频读取的聚合结果。

示例:

vv, ok := db.GetMongoVirtualView(repo.GetAdapter())
vv.Define("active_user_count", "users",
    bson.A{
        bson.D{{Key: "$match", Value: bson.D{{Key: "active", Value: true}}}},
        bson.D{{Key: "$count", Value: "count"}},
    },
    5*time.Minute,
)
docs, err := vv.Execute(ctx, "active_user_count")

func GetMongoVirtualView added in v1.0.0

func GetMongoVirtualView(adapter Adapter) (*MongoVirtualView, bool)

GetMongoVirtualView 从 Adapter 获取 MongoVirtualView。 若 adapter 不是 *MongoAdapter,返回 (nil, false)。

func (*MongoVirtualView) Define added in v1.0.0

func (v *MongoVirtualView) Define(name, collection string, pipeline bson.A, ttl time.Duration)

Define 注册一个虚拟视图定义(仅注册,不执行聚合)。

  • name: 视图标识符,Execute/Refresh/InvalidateView 时使用
  • collection: 聚合操作的源集合名
  • pipeline: MongoDB Aggregation Pipeline(bson.A,即 []interface{})
  • ttl: 结果缓存时长(<= 0 表示永不自动过期,直到 Refresh 或 InvalidateView)

重复调用 Define 同名视图会覆盖原定义(同时清除旧缓存)。

func (*MongoVirtualView) DefinedViews added in v1.0.0

func (v *MongoVirtualView) DefinedViews() []string

DefinedViews 返回所有已注册的视图名称列表。

func (*MongoVirtualView) Execute added in v1.0.0

func (v *MongoVirtualView) Execute(ctx context.Context, name string) ([]bson.M, error)

Execute 返回虚拟视图的文档列表。

  • 首次调用(或缓存已过期):执行 Aggregation Pipeline 并缓存结果。
  • TTL 内再次调用:直接返回缓存,不发起 MongoDB 请求。

func (*MongoVirtualView) InvalidateAll added in v1.0.0

func (v *MongoVirtualView) InvalidateAll()

InvalidateAll 清除所有视图缓存。

func (*MongoVirtualView) InvalidateView added in v1.0.0

func (v *MongoVirtualView) InvalidateView(name string)

InvalidateView 清除指定视图的内存缓存(下次 Execute 会重新执行 Pipeline)。

func (*MongoVirtualView) IsCached added in v1.0.0

func (v *MongoVirtualView) IsCached(name string) bool

IsCached 检查指定视图是否有未过期的内存缓存。

func (*MongoVirtualView) IsDefined added in v1.0.0

func (v *MongoVirtualView) IsDefined(name string) bool

IsDefined 检查指定名称的视图是否已通过 Define 注册。

func (*MongoVirtualView) Refresh added in v1.0.0

func (v *MongoVirtualView) Refresh(ctx context.Context, name string) ([]bson.M, error)

Refresh 强制重新执行 Aggregation Pipeline,忽略现有缓存,刷新后返回最新结果。

type MySQLAdapter

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

MySQLAdapter MySQL 数据库适配器

func (*MySQLAdapter) Begin

func (a *MySQLAdapter) Begin(ctx context.Context, opts ...interface{}) (Tx, error)

Begin 开始事务

func (*MySQLAdapter) Close

func (a *MySQLAdapter) Close() error

Close 关闭数据库连接

func (*MySQLAdapter) Connect

func (a *MySQLAdapter) Connect(ctx context.Context, config *Config) error

Connect 连接到 MySQL 数据库

func (*MySQLAdapter) Exec

func (a *MySQLAdapter) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

Exec 执行操作 (INSERT/UPDATE/DELETE)

func (*MySQLAdapter) GetDatabaseFeatures

func (a *MySQLAdapter) GetDatabaseFeatures() *DatabaseFeatures

GetDatabaseFeatures 返回 MySQL 数据库特性

func (*MySQLAdapter) GetGormDB

func (a *MySQLAdapter) GetGormDB() *gorm.DB

GetGormDB 获取GORM实例(用于直接访问GORM) Deprecated: Adapter 层不再暴露 GORM 连接。

func (*MySQLAdapter) GetQueryBuilderProvider

func (a *MySQLAdapter) GetQueryBuilderProvider() QueryConstructorProvider

GetQueryBuilderProvider 返回查询构造器提供者

func (*MySQLAdapter) GetQueryFeatures

func (a *MySQLAdapter) GetQueryFeatures() *QueryFeatures

GetQueryFeatures 返回 MySQL 的查询特性

func (*MySQLAdapter) GetRawConn

func (a *MySQLAdapter) GetRawConn() interface{}

GetRawConn 获取底层连接 (返回 *sql.DB)

func (*MySQLAdapter) ListScheduledTasks

func (a *MySQLAdapter) ListScheduledTasks(ctx context.Context) ([]*ScheduledTaskStatus, error)

ListScheduledTasks MySQL 适配器暂不支持

func (*MySQLAdapter) Ping

func (a *MySQLAdapter) Ping(ctx context.Context) error

Ping 测试数据库连接

func (*MySQLAdapter) Query

func (a *MySQLAdapter) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

Query 执行查询 (返回多行)

func (*MySQLAdapter) QueryRow

func (a *MySQLAdapter) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row

QueryRow 执行查询 (返回单行)

func (*MySQLAdapter) RegisterScheduledTask

func (a *MySQLAdapter) RegisterScheduledTask(ctx context.Context, task *ScheduledTaskConfig) error

RegisterScheduledTask MySQL 适配器暂不支持通过 EVENT 方式实现定时任务 建议在应用层使用 cron 库处理定时任务

func (*MySQLAdapter) UnregisterScheduledTask

func (a *MySQLAdapter) UnregisterScheduledTask(ctx context.Context, taskName string) error

UnregisterScheduledTask MySQL 适配器暂不支持

type MySQLConnectionConfig added in v1.0.0

type MySQLConnectionConfig struct {
	Host     string `json:"host,omitempty" yaml:"host,omitempty"`
	Port     int    `json:"port,omitempty" yaml:"port,omitempty"`
	Username string `json:"username,omitempty" yaml:"username,omitempty"`
	Password string `json:"password,omitempty" yaml:"password,omitempty"`
	Database string `json:"database,omitempty" yaml:"database,omitempty"`
	DSN      string `json:"dsn,omitempty" yaml:"dsn,omitempty"`
}

MySQLConnectionConfig MySQL 连接配置。

type MySQLDialect

type MySQLDialect struct {
	DefaultSQLDialect
}

MySQL 方言

func NewMySQLDialect

func NewMySQLDialect() *MySQLDialect

type MySQLDynamicTableHook

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

MySQLDynamicTableHook MySQL 动态表钩子实现 使用 GORM 的 hook 机制实现基于触发的动态建表

func NewMySQLDynamicTableHook

func NewMySQLDynamicTableHook(adapter *MySQLAdapter) *MySQLDynamicTableHook

NewMySQLDynamicTableHook 创建 MySQL 动态表钩子

func (*MySQLDynamicTableHook) CreateDynamicTable

func (h *MySQLDynamicTableHook) CreateDynamicTable(ctx context.Context, configName string, params map[string]interface{}) (string, error)

CreateDynamicTable 手动创建动态表 返回实际创建的表名称

func (*MySQLDynamicTableHook) GetDynamicTableConfig

func (h *MySQLDynamicTableHook) GetDynamicTableConfig(ctx context.Context, configName string) (*DynamicTableConfig, error)

GetDynamicTableConfig 获取特定的动态表配置

func (*MySQLDynamicTableHook) ListCreatedDynamicTables

func (h *MySQLDynamicTableHook) ListCreatedDynamicTables(ctx context.Context, configName string) ([]string, error)

ListCreatedDynamicTables 获取已创建的动态表列表

func (*MySQLDynamicTableHook) ListDynamicTableConfigs

func (h *MySQLDynamicTableHook) ListDynamicTableConfigs(ctx context.Context) ([]*DynamicTableConfig, error)

ListDynamicTableConfigs 列出所有已注册的动态表配置

func (*MySQLDynamicTableHook) RegisterDynamicTable

func (h *MySQLDynamicTableHook) RegisterDynamicTable(ctx context.Context, config *DynamicTableConfig) error

RegisterDynamicTable 注册动态表配置 对于自动策略,在 GORM hook 中注册事件处理

func (*MySQLDynamicTableHook) UnregisterDynamicTable

func (h *MySQLDynamicTableHook) UnregisterDynamicTable(ctx context.Context, configName string) error

UnregisterDynamicTable 注销动态表配置

type MySQLFactory

type MySQLFactory struct{}

MySQLFactory MySQL 适配器工厂

func (*MySQLFactory) Create

func (f *MySQLFactory) Create(config *Config) (Adapter, error)

Create 创建 MySQL 适配器

func (*MySQLFactory) Name

func (f *MySQLFactory) Name() string

Name 返回适配器名称

type MySQLTx

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

MySQLTx MySQL 事务实现

func (*MySQLTx) Commit

func (t *MySQLTx) Commit(ctx context.Context) error

Commit 提交事务

func (*MySQLTx) Exec

func (t *MySQLTx) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

Exec 在事务中执行

func (*MySQLTx) Query

func (t *MySQLTx) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

Query 在事务中查询

func (*MySQLTx) QueryRow

func (t *MySQLTx) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row

QueryRow 在事务中查询单行

func (*MySQLTx) Rollback

func (t *MySQLTx) Rollback(ctx context.Context) error

Rollback 回滚事务

type Neo4jAdapter added in v1.0.0

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

Neo4jAdapter Neo4j 适配器(最小可用版本:连接/健康检查/能力声明)。

func NewNeo4jAdapter added in v1.0.0

func NewNeo4jAdapter(config *Config) (*Neo4jAdapter, error)

NewNeo4jAdapter 创建 Neo4jAdapter(不建立连接)。

func (*Neo4jAdapter) Begin added in v1.0.0

func (a *Neo4jAdapter) Begin(ctx context.Context, opts ...interface{}) (Tx, error)

Begin Neo4j 不支持 SQL 事务接口。

func (*Neo4jAdapter) Close added in v1.0.0

func (a *Neo4jAdapter) Close() error

Close 关闭 Neo4j 连接。

func (*Neo4jAdapter) Connect added in v1.0.0

func (a *Neo4jAdapter) Connect(ctx context.Context, config *Config) error

Connect 建立 Neo4j 连接。

func (*Neo4jAdapter) Exec added in v1.0.0

func (a *Neo4jAdapter) Exec(ctx context.Context, sql string, args ...interface{}) (sql.Result, error)

Exec Neo4j 不支持 SQL Exec 接口。

func (*Neo4jAdapter) ExecCypher added in v1.0.0

func (a *Neo4jAdapter) ExecCypher(ctx context.Context, cypher string, params map[string]interface{}) (*CypherWriteSummary, error)

ExecCypher 执行写类型 Cypher,并返回写入摘要。

func (*Neo4jAdapter) ExecuteCustomFeature added in v1.0.0

func (a *Neo4jAdapter) ExecuteCustomFeature(ctx context.Context, feature string, input map[string]interface{}) (interface{}, error)

ExecuteCustomFeature 执行 Neo4j 自定义能力(返回可执行 Cypher/说明)。

func (*Neo4jAdapter) GetDatabaseFeatures added in v1.0.0

func (a *Neo4jAdapter) GetDatabaseFeatures() *DatabaseFeatures

GetDatabaseFeatures 返回 Neo4j 数据库特性声明。

func (*Neo4jAdapter) GetQueryBuilderProvider added in v1.0.0

func (a *Neo4jAdapter) GetQueryBuilderProvider() QueryConstructorProvider

GetQueryBuilderProvider 返回 Neo4j Cypher Query Builder Provider。

func (*Neo4jAdapter) GetQueryFeatures added in v1.0.0

func (a *Neo4jAdapter) GetQueryFeatures() *QueryFeatures

GetQueryFeatures 返回 Neo4j 查询特性声明。

func (*Neo4jAdapter) GetRawConn added in v1.0.0

func (a *Neo4jAdapter) GetRawConn() interface{}

GetRawConn 返回底层 Neo4j Driver。

func (*Neo4jAdapter) HasCustomFeatureImplementation added in v1.0.0

func (a *Neo4jAdapter) HasCustomFeatureImplementation(feature string) bool

HasCustomFeatureImplementation 声明 Neo4j 可用的自定义能力。

func (*Neo4jAdapter) InspectFullTextRuntime added in v1.0.0

func (a *Neo4jAdapter) InspectFullTextRuntime(ctx context.Context) (*FullTextRuntimeCapability, error)

InspectFullTextRuntime 探测 Neo4j 全文能力(需要全文索引)。

func (*Neo4jAdapter) ListScheduledTasks added in v1.0.0

func (a *Neo4jAdapter) ListScheduledTasks(ctx context.Context) ([]*ScheduledTaskStatus, error)

ListScheduledTasks Neo4j 暂不支持定时任务接口。

func (*Neo4jAdapter) Ping added in v1.0.0

func (a *Neo4jAdapter) Ping(ctx context.Context) error

Ping 检查 Neo4j 连接可用性。

func (*Neo4jAdapter) Query added in v1.0.0

func (a *Neo4jAdapter) Query(ctx context.Context, sql string, args ...interface{}) (*sql.Rows, error)

Query Neo4j 不支持 SQL Query 接口。

func (*Neo4jAdapter) QueryCypher added in v1.0.0

func (a *Neo4jAdapter) QueryCypher(ctx context.Context, cypher string, params map[string]interface{}) ([]map[string]interface{}, error)

QueryCypher 执行读类型 Cypher,并返回记录列表。

func (*Neo4jAdapter) QueryRow added in v1.0.0

func (a *Neo4jAdapter) QueryRow(ctx context.Context, sql string, args ...interface{}) *sql.Row

QueryRow Neo4j 不支持 SQL QueryRow 接口。

func (*Neo4jAdapter) RegisterScheduledTask added in v1.0.0

func (a *Neo4jAdapter) RegisterScheduledTask(ctx context.Context, task *ScheduledTaskConfig) error

RegisterScheduledTask Neo4j 暂不支持定时任务接口。

func (*Neo4jAdapter) UnregisterScheduledTask added in v1.0.0

func (a *Neo4jAdapter) UnregisterScheduledTask(ctx context.Context, taskName string) error

UnregisterScheduledTask Neo4j 暂不支持定时任务接口。

type Neo4jConnectionConfig added in v1.0.0

type Neo4jConnectionConfig struct {
	URI      string `json:"uri,omitempty" yaml:"uri,omitempty"`
	Username string `json:"username,omitempty" yaml:"username,omitempty"`
	Password string `json:"password,omitempty" yaml:"password,omitempty"`
	Database string `json:"database,omitempty" yaml:"database,omitempty"`
}

Neo4jConnectionConfig Neo4j 连接配置。

type Neo4jFactory added in v1.0.0

type Neo4jFactory struct{}

Neo4jFactory AdapterFactory 实现。

func (*Neo4jFactory) Create added in v1.0.0

func (f *Neo4jFactory) Create(config *Config) (Adapter, error)

func (*Neo4jFactory) Name added in v1.0.0

func (f *Neo4jFactory) Name() string

type Neo4jQueryConstructor added in v1.0.0

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

Neo4jQueryConstructor 面向 Neo4j 的 Cypher 查询构造器。

func NewNeo4jQueryConstructor added in v1.0.0

func NewNeo4jQueryConstructor(schema Schema) *Neo4jQueryConstructor

func NewNeo4jQueryConstructorWithCompiler added in v1.0.0

func NewNeo4jQueryConstructorWithCompiler(schema Schema, compiler QueryCompiler) *Neo4jQueryConstructor

func (*Neo4jQueryConstructor) Build added in v1.0.0

func (qb *Neo4jQueryConstructor) Build(ctx context.Context) (string, []interface{}, error)

func (*Neo4jQueryConstructor) BuildIR added in v1.0.0

func (qb *Neo4jQueryConstructor) BuildIR(ctx context.Context) (*QueryIR, error)

func (*Neo4jQueryConstructor) Count added in v1.1.0

func (qb *Neo4jQueryConstructor) Count(fieldName ...string) QueryConstructor

func (*Neo4jQueryConstructor) CountWith added in v1.1.0

func (qb *Neo4jQueryConstructor) CountWith(builder *CountBuilder) QueryConstructor

func (*Neo4jQueryConstructor) CrossJoin added in v1.0.0

func (qb *Neo4jQueryConstructor) CrossJoin(table string, alias ...string) QueryConstructor

func (*Neo4jQueryConstructor) CrossTableStrategy added in v1.0.0

func (qb *Neo4jQueryConstructor) CrossTableStrategy(strategy CrossTableStrategy) QueryConstructor

func (*Neo4jQueryConstructor) CustomMode added in v1.1.0

func (qb *Neo4jQueryConstructor) CustomMode() QueryConstructor

func (*Neo4jQueryConstructor) FromAlias added in v1.0.0

func (qb *Neo4jQueryConstructor) FromAlias(alias string) QueryConstructor

func (*Neo4jQueryConstructor) GetNativeBuilder added in v1.0.0

func (qb *Neo4jQueryConstructor) GetNativeBuilder() interface{}

func (*Neo4jQueryConstructor) Join added in v1.0.0

func (qb *Neo4jQueryConstructor) Join(table, onClause string, alias ...string) QueryConstructor

func (*Neo4jQueryConstructor) JoinWith added in v1.1.0

func (qb *Neo4jQueryConstructor) JoinWith(builder *JoinBuilder) QueryConstructor

JoinWith 使用 JoinBuilder 进行 Schema 感知的连接。 Neo4j 端:label 取自 Schema.TableName();On() 为空时从 Schema FK 约束推断关系类型; Filter() 条件在 WHERE 子句中以 join alias 限定输出。

func (*Neo4jQueryConstructor) LeftJoin added in v1.0.0

func (qb *Neo4jQueryConstructor) LeftJoin(table, onClause string, alias ...string) QueryConstructor

func (*Neo4jQueryConstructor) Limit added in v1.0.0

func (qb *Neo4jQueryConstructor) Limit(count int) QueryConstructor

func (*Neo4jQueryConstructor) Offset added in v1.0.0

func (qb *Neo4jQueryConstructor) Offset(count int) QueryConstructor

func (*Neo4jQueryConstructor) OrderBy added in v1.0.0

func (qb *Neo4jQueryConstructor) OrderBy(field string, direction string) QueryConstructor

func (*Neo4jQueryConstructor) Page added in v1.1.1

func (qb *Neo4jQueryConstructor) Page(page int, pageSize int) QueryConstructor

func (*Neo4jQueryConstructor) Paginate added in v1.1.1

func (*Neo4jQueryConstructor) RightJoin added in v1.0.0

func (qb *Neo4jQueryConstructor) RightJoin(table, onClause string, alias ...string) QueryConstructor

func (*Neo4jQueryConstructor) Select added in v1.0.0

func (qb *Neo4jQueryConstructor) Select(fields ...string) QueryConstructor

func (*Neo4jQueryConstructor) SelectCount added in v1.1.0

func (qb *Neo4jQueryConstructor) SelectCount(ctx context.Context, repo *Repository) (int64, error)

func (*Neo4jQueryConstructor) Upsert added in v1.1.0

func (qb *Neo4jQueryConstructor) Upsert(ctx context.Context, repo *Repository, cs *Changeset, conflictColumns ...string) (sql.Result, error)

func (*Neo4jQueryConstructor) Where added in v1.0.0

func (qb *Neo4jQueryConstructor) Where(condition Condition) QueryConstructor

func (*Neo4jQueryConstructor) WhereAll added in v1.0.0

func (qb *Neo4jQueryConstructor) WhereAll(conditions ...Condition) QueryConstructor

func (*Neo4jQueryConstructor) WhereAny added in v1.0.0

func (qb *Neo4jQueryConstructor) WhereAny(conditions ...Condition) QueryConstructor

func (*Neo4jQueryConstructor) WhereWith added in v1.1.0

func (qb *Neo4jQueryConstructor) WhereWith(builder *WhereBuilder) QueryConstructor

type Neo4jQueryConstructorProvider added in v1.0.0

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

Neo4jQueryConstructorProvider Neo4j 查询构造器提供者。

func NewNeo4jQueryConstructorProvider added in v1.0.0

func NewNeo4jQueryConstructorProvider() *Neo4jQueryConstructorProvider

func (*Neo4jQueryConstructorProvider) GetCapabilities added in v1.0.0

func (*Neo4jQueryConstructorProvider) NewQueryConstructor added in v1.0.0

func (p *Neo4jQueryConstructorProvider) NewQueryConstructor(schema Schema) QueryConstructor

func (*Neo4jQueryConstructorProvider) SetCompiler added in v1.0.0

type NotCondition

type NotCondition struct {
	Condition Condition
}

NotCondition 非条件

func (*NotCondition) Translate

func (c *NotCondition) Translate(translator ConditionTranslator) (string, []interface{}, error)

func (*NotCondition) Type

func (c *NotCondition) Type() string

type OrderBy

type OrderBy struct {
	Field     string
	Direction string // "ASC" | "DESC"
}

OrderBy 排序条件

type PagedQueryConstructorExecutionResult added in v1.1.1

type PagedQueryConstructorExecutionResult struct {
	Statement     string
	Args          []interface{}
	Rows          []map[string]interface{}
	Total         int64
	Page          int
	PageSize      int
	Offset        int
	TotalPages    int
	HasNext       bool
	HasPrevious   bool
	QueryCacheHit bool
	CountCacheHit bool
}

PagedQueryConstructorExecutionResult 表示带分页元信息的统一执行结果。

type PaginationBuilder added in v1.1.1

type PaginationBuilder struct {
	Mode               PaginationMode
	Page               int
	PageSize           int
	CursorField        string
	CursorDirection    string
	CursorValue        interface{}
	CursorPrimaryValue interface{}
}

PaginationBuilder 定义跨后端统一分页语义,不绑定 SQL 细节。

func NewCursorPaginationBuilder added in v1.1.1

func NewCursorPaginationBuilder(field string, direction string, cursorValue interface{}, cursorPrimaryValue interface{}, pageSize int) *PaginationBuilder

func NewPaginationBuilder added in v1.1.1

func NewPaginationBuilder(page int, pageSize int) *PaginationBuilder

func (*PaginationBuilder) CursorBy added in v1.1.1

func (b *PaginationBuilder) CursorBy(field string, direction string, cursorValue interface{}, cursorPrimaryValue interface{}) *PaginationBuilder

func (*PaginationBuilder) OffsetOnly added in v1.1.1

func (b *PaginationBuilder) OffsetOnly() *PaginationBuilder

func (*PaginationBuilder) WithMode added in v1.1.1

type PaginationMode added in v1.1.1

type PaginationMode string
const (
	PaginationModeAuto   PaginationMode = "auto"
	PaginationModeOffset PaginationMode = "offset"
	PaginationModeCursor PaginationMode = "cursor"
)

type PatternValidator

type PatternValidator struct {
	Pattern string
}

PatternValidator 正则验证器

func (*PatternValidator) Validate

func (v *PatternValidator) Validate(value interface{}) error

type PhoneNumberValidator added in v1.0.0

type PhoneNumberValidator struct {
	Locale string
}

PhoneNumberValidator 手机号/电话号码格式验证器 它是 RegexValidator 的特化封装。

func NewPhoneNumberValidatorForLocale added in v1.0.0

func NewPhoneNumberValidatorForLocale(locale string) *PhoneNumberValidator

func (*PhoneNumberValidator) Validate added in v1.0.0

func (v *PhoneNumberValidator) Validate(value interface{}) error

func (*PhoneNumberValidator) ValidateWithLocale added in v1.0.0

func (v *PhoneNumberValidator) ValidateWithLocale(value interface{}, locale string) error

type PoolConfig

type PoolConfig struct {
	MaxConnections int `json:"max_connections" yaml:"max_connections"`
	MinConnections int `json:"min_connections" yaml:"min_connections"`
	ConnectTimeout int `json:"connect_timeout" yaml:"connect_timeout"` // 秒
	IdleTimeout    int `json:"idle_timeout" yaml:"idle_timeout"`       // 秒
	MaxLifetime    int `json:"max_lifetime" yaml:"max_lifetime"`       // 秒
}

PoolConfig 连接池配置 (参考 Ecto 的设计)

type PostalCodeValidator added in v1.0.0

type PostalCodeValidator struct {
	Locale string
}

PostalCodeValidator 邮政编码验证器(中国大陆 6 位) 它是 RegexValidator 的特化封装。

func NewPostalCodeValidatorForLocale added in v1.0.0

func NewPostalCodeValidatorForLocale(locale string) *PostalCodeValidator

func (*PostalCodeValidator) Validate added in v1.0.0

func (v *PostalCodeValidator) Validate(value interface{}) error

func (*PostalCodeValidator) ValidateWithLocale added in v1.0.0

func (v *PostalCodeValidator) ValidateWithLocale(value interface{}, locale string) error

type PostgreSQLAdapter

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

PostgreSQLAdapter PostgreSQL 数据库适配器

func (*PostgreSQLAdapter) Begin

func (a *PostgreSQLAdapter) Begin(ctx context.Context, opts ...interface{}) (Tx, error)

Begin 开始事务

func (*PostgreSQLAdapter) Close

func (a *PostgreSQLAdapter) Close() error

Close 关闭数据库连接

func (*PostgreSQLAdapter) Connect

func (a *PostgreSQLAdapter) Connect(ctx context.Context, config *Config) error

Connect 连接到 PostgreSQL 数据库

func (*PostgreSQLAdapter) Exec

func (a *PostgreSQLAdapter) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

Exec 执行操作 (INSERT/UPDATE/DELETE)

func (*PostgreSQLAdapter) GetDatabaseFeatures

func (a *PostgreSQLAdapter) GetDatabaseFeatures() *DatabaseFeatures

GetDatabaseFeatures 返回 PostgreSQL 数据库特性

func (*PostgreSQLAdapter) GetGormDB

func (a *PostgreSQLAdapter) GetGormDB() *gorm.DB

GetGormDB 获取GORM实例(用于直接访问GORM) Deprecated: Adapter 层不再暴露 GORM 连接。

func (*PostgreSQLAdapter) GetQueryBuilderProvider

func (a *PostgreSQLAdapter) GetQueryBuilderProvider() QueryConstructorProvider

GetQueryBuilderProvider 返回查询构造器提供者

func (*PostgreSQLAdapter) GetQueryFeatures

func (a *PostgreSQLAdapter) GetQueryFeatures() *QueryFeatures

GetQueryFeatures 返回 PostgreSQL 的查询特性

func (*PostgreSQLAdapter) GetRawConn

func (a *PostgreSQLAdapter) GetRawConn() interface{}

GetRawConn 获取底层连接 (返回 *sql.DB)

func (*PostgreSQLAdapter) InspectFullTextRuntime added in v1.0.0

func (a *PostgreSQLAdapter) InspectFullTextRuntime(ctx context.Context) (*FullTextRuntimeCapability, error)

InspectFullTextRuntime 检查 PostgreSQL 全文能力与常见分词插件(zhparser/pg_jieba/pgroonga)。 约定:当调用方要求插件分词加速时,若插件不存在可据此降级。

func (*PostgreSQLAdapter) InspectJSONRuntime added in v1.0.0

func (a *PostgreSQLAdapter) InspectJSONRuntime(ctx context.Context) (*JSONRuntimeCapability, error)

InspectJSONRuntime 检查 PostgreSQL JSON 能力(json/jsonb 类型可用性)。

func (*PostgreSQLAdapter) ListScheduledTasks

func (a *PostgreSQLAdapter) ListScheduledTasks(ctx context.Context) ([]*ScheduledTaskStatus, error)

ListScheduledTasks 列出所有已注册的定时任务 PostgreSQL 版本返回空列表,因为存储过程的管理比较复杂

func (*PostgreSQLAdapter) Ping

func (a *PostgreSQLAdapter) Ping(ctx context.Context) error

Ping 测试数据库连接

func (*PostgreSQLAdapter) PostgresJSONType added in v1.0.0

func (a *PostgreSQLAdapter) PostgresJSONType() string

PostgresJSONType 返回 PostgreSQL 的 JSON 字段映射类型。 默认使用 jsonb;可通过 config.Options["postgres_json_type"] 或 config.Options["json_type"] 配置为 json。

func (*PostgreSQLAdapter) Query

func (a *PostgreSQLAdapter) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

Query 执行查询 (返回多行)

func (*PostgreSQLAdapter) QueryRow

func (a *PostgreSQLAdapter) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row

QueryRow 执行查询 (返回单行)

func (*PostgreSQLAdapter) RegisterScheduledTask

func (a *PostgreSQLAdapter) RegisterScheduledTask(ctx context.Context, task *ScheduledTaskConfig) error

RegisterScheduledTask 在 PostgreSQL 中注册定时任务 使用 PostgreSQL 的触发器 + 函数来实现按月自动创建表的功能

func (*PostgreSQLAdapter) UnregisterScheduledTask

func (a *PostgreSQLAdapter) UnregisterScheduledTask(ctx context.Context, taskName string) error

UnregisterScheduledTask 注销定时任务

type PostgreSQLDialect

type PostgreSQLDialect struct {
	DefaultSQLDialect
	// contains filtered or unexported fields
}

PostgreSQL 方言

func NewPostgreSQLDialect

func NewPostgreSQLDialect() *PostgreSQLDialect

func (*PostgreSQLDialect) GetPlaceholder

func (d *PostgreSQLDialect) GetPlaceholder(index int) string

func (*PostgreSQLDialect) QuoteIdentifier

func (d *PostgreSQLDialect) QuoteIdentifier(name string) string

type PostgreSQLDynamicTableHook

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

PostgreSQLDynamicTableHook PostgreSQL 动态表钩子实现 使用触发器和自定义函数实现自动化动态建表

func NewPostgreSQLDynamicTableHook

func NewPostgreSQLDynamicTableHook(adapter *PostgreSQLAdapter) *PostgreSQLDynamicTableHook

NewPostgreSQLDynamicTableHook 创建 PostgreSQL 动态表钩子

func (*PostgreSQLDynamicTableHook) CreateDynamicTable

func (h *PostgreSQLDynamicTableHook) CreateDynamicTable(ctx context.Context, configName string, params map[string]interface{}) (string, error)

CreateDynamicTable 手动创建动态表 返回实际创建的表名称

func (*PostgreSQLDynamicTableHook) GetDynamicTableConfig

func (h *PostgreSQLDynamicTableHook) GetDynamicTableConfig(ctx context.Context, configName string) (*DynamicTableConfig, error)

GetDynamicTableConfig 获取特定的动态表配置

func (*PostgreSQLDynamicTableHook) ListCreatedDynamicTables

func (h *PostgreSQLDynamicTableHook) ListCreatedDynamicTables(ctx context.Context, configName string) ([]string, error)

ListCreatedDynamicTables 获取已创建的动态表列表

func (*PostgreSQLDynamicTableHook) ListDynamicTableConfigs

func (h *PostgreSQLDynamicTableHook) ListDynamicTableConfigs(ctx context.Context) ([]*DynamicTableConfig, error)

ListDynamicTableConfigs 列出所有已注册的动态表配置

func (*PostgreSQLDynamicTableHook) RegisterDynamicTable

func (h *PostgreSQLDynamicTableHook) RegisterDynamicTable(ctx context.Context, config *DynamicTableConfig) error

RegisterDynamicTable 注册动态表配置 对于自动策略,创建触发器和存储函数来自动化建表

func (*PostgreSQLDynamicTableHook) UnregisterDynamicTable

func (h *PostgreSQLDynamicTableHook) UnregisterDynamicTable(ctx context.Context, configName string) error

UnregisterDynamicTable 注销动态表配置

type PostgreSQLFactory

type PostgreSQLFactory struct{}

PostgreSQLFactory PostgreSQL 适配器工厂

func (*PostgreSQLFactory) Create

func (f *PostgreSQLFactory) Create(config *Config) (Adapter, error)

Create 创建 PostgreSQL 适配器

func (*PostgreSQLFactory) Name

func (f *PostgreSQLFactory) Name() string

Name 返回适配器名称

type PostgreSQLFeatures added in v1.0.0

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

PostgreSQLFeatures 提供 PostgreSQL 特有的高级数据库功能。 通过 GetPostgreSQLFeatures(adapter) 获取实例,非 PostgreSQL 适配器返回 false。

示例:

features, ok := db.GetPostgreSQLFeatures(repo.GetAdapter())
if !ok {
    return errors.New("not PostgreSQL")
}

// ENUM 类型
err = features.EnumType("order_status").
    Values("pending", "processing", "shipped", "delivered", "cancelled").
    IfNotExists().
    Create(ctx)

// DOMAIN 类型
err = features.DomainType("email_address").
    BaseType("TEXT").
    NotNull().
    Check(`VALUE ~ '^[^@\s]+@[^@\s]+\.[^@\s]+$'`).
    Create(ctx)

// COMPOSITE 类型
err = features.CompositeType("geo_point").
    Field("lat", "DOUBLE PRECISION").
    Field("lng", "DOUBLE PRECISION").
    Create(ctx)

func GetPostgreSQLFeatures added in v1.0.0

func GetPostgreSQLFeatures(adapter Adapter) (*PostgreSQLFeatures, bool)

GetPostgreSQLFeatures 从 Adapter 中提取 PostgreSQLFeatures。 若传入的不是 *PostgreSQLAdapter,则 ok == false。

func (*PostgreSQLFeatures) CompositeType added in v1.0.0

func (f *PostgreSQLFeatures) CompositeType(typeName string) *CompositeTypeBuilder

CompositeType 开始构建一个 PostgreSQL COMPOSITE 自定义类型(结构体类型)。 COMPOSITE 类型可以作为列类型或函数返回类型使用。

生成的 DDL 示例:

CREATE TYPE "address" AS (
    street  TEXT,
    city    VARCHAR(100),
    zip     CHAR(6)
)

func (*PostgreSQLFeatures) DomainType added in v1.0.0

func (f *PostgreSQLFeatures) DomainType(typeName string) *DomainTypeBuilder

DomainType 开始构建一个 PostgreSQL DOMAIN 自定义类型。 DOMAIN 是对已有基础类型的约束包装,可以附加 NOT NULL 和 CHECK 约束。

生成的 DDL 示例:

CREATE DOMAIN "email_address" AS TEXT NOT NULL
    CHECK (VALUE ~ '^[^@\s]+@[^@\s]+\.[^@\s]+$')

func (*PostgreSQLFeatures) EnumType added in v1.0.0

func (f *PostgreSQLFeatures) EnumType(typeName string) *EnumTypeBuilder

EnumType 开始构建一个 PostgreSQL ENUM 自定义类型。

生成的 DDL 示例:

CREATE TYPE "order_status" AS ENUM ('pending', 'processing', 'shipped')

func (*PostgreSQLFeatures) MaterializedView added in v1.0.0

func (f *PostgreSQLFeatures) MaterializedView(viewName string) *PostgreSQLViewBuilder

MaterializedView 开始构建 PostgreSQL 物化视图。

func (*PostgreSQLFeatures) View added in v1.0.0

func (f *PostgreSQLFeatures) View(viewName string) *PostgreSQLViewBuilder

View 开始构建一个 PostgreSQL 普通视图。 默认使用 CREATE OR REPLACE VIEW。

type PostgreSQLTx

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

PostgreSQLTx PostgreSQL 事务实现

func (*PostgreSQLTx) Commit

func (t *PostgreSQLTx) Commit(ctx context.Context) error

Commit 提交事务

func (*PostgreSQLTx) Exec

func (t *PostgreSQLTx) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

Exec 在事务中执行

func (*PostgreSQLTx) Query

func (t *PostgreSQLTx) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

Query 在事务中查询

func (*PostgreSQLTx) QueryRow

func (t *PostgreSQLTx) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row

QueryRow 在事务中查询单行

func (*PostgreSQLTx) Rollback

func (t *PostgreSQLTx) Rollback(ctx context.Context) error

Rollback 回滚事务

type PostgreSQLViewBuilder added in v1.0.0

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

PostgreSQLViewBuilder 构建 PostgreSQL 视图(普通视图/物化视图)DDL。

func (*PostgreSQLViewBuilder) Args added in v1.0.0

func (b *PostgreSQLViewBuilder) Args(args ...interface{}) *PostgreSQLViewBuilder

Args 设置执行创建语句时的参数。

func (*PostgreSQLViewBuilder) As added in v1.0.0

As 设置视图定义 SQL(AS 后的 SELECT 语句)。

func (*PostgreSQLViewBuilder) BuildCreate added in v1.0.0

func (b *PostgreSQLViewBuilder) BuildCreate() (string, error)

BuildCreate 生成创建视图 DDL。

func (*PostgreSQLViewBuilder) BuildDrop added in v1.0.0

func (b *PostgreSQLViewBuilder) BuildDrop() (string, error)

BuildDrop 生成删除视图 DDL。

func (*PostgreSQLViewBuilder) BuildRefresh added in v1.0.0

func (b *PostgreSQLViewBuilder) BuildRefresh() (string, error)

BuildRefresh 生成刷新物化视图 DDL。

func (*PostgreSQLViewBuilder) Create added in v1.0.0

func (b *PostgreSQLViewBuilder) Create(ctx context.Context) error

Create 执行创建视图。

func (*PostgreSQLViewBuilder) CreateOnly added in v1.0.0

CreateOnly 强制使用 CREATE VIEW(仅普通视图)。

func (*PostgreSQLViewBuilder) CreateOrReplace added in v1.0.0

func (b *PostgreSQLViewBuilder) CreateOrReplace() *PostgreSQLViewBuilder

CreateOrReplace 使用 CREATE OR REPLACE VIEW(仅普通视图,默认)。

func (*PostgreSQLViewBuilder) Drop added in v1.0.0

Drop 执行删除视图。

func (*PostgreSQLViewBuilder) DropIfExists added in v1.0.0

func (b *PostgreSQLViewBuilder) DropIfExists() *PostgreSQLViewBuilder

DropIfExists 删除视图时使用 IF EXISTS(默认)。

func (*PostgreSQLViewBuilder) DropStrict added in v1.0.0

DropStrict 删除视图时不使用 IF EXISTS。

func (*PostgreSQLViewBuilder) Refresh added in v1.0.0

func (b *PostgreSQLViewBuilder) Refresh(ctx context.Context) error

Refresh 执行刷新物化视图。

func (*PostgreSQLViewBuilder) RefreshConcurrently added in v1.0.0

func (b *PostgreSQLViewBuilder) RefreshConcurrently() *PostgreSQLViewBuilder

RefreshConcurrently 启用并发刷新(REFRESH MATERIALIZED VIEW CONCURRENTLY)。

func (*PostgreSQLViewBuilder) Schema added in v1.0.0

Schema 指定视图所在 schema(默认 public)。

func (*PostgreSQLViewBuilder) WithCheckOption added in v1.0.0

func (b *PostgreSQLViewBuilder) WithCheckOption() *PostgreSQLViewBuilder

WithCheckOption 为普通视图添加 WITH CHECK OPTION。

func (*PostgreSQLViewBuilder) WithNoData added in v1.0.0

WithNoData 为物化视图添加 WITH NO DATA。

type PostgresConnectionConfig added in v1.0.0

type PostgresConnectionConfig struct {
	Host     string `json:"host,omitempty" yaml:"host,omitempty"`
	Port     int    `json:"port,omitempty" yaml:"port,omitempty"`
	Username string `json:"username,omitempty" yaml:"username,omitempty"`
	Password string `json:"password,omitempty" yaml:"password,omitempty"`
	Database string `json:"database,omitempty" yaml:"database,omitempty"`
	SSLMode  string `json:"ssl_mode,omitempty" yaml:"ssl_mode,omitempty"`
	DSN      string `json:"dsn,omitempty" yaml:"dsn,omitempty"`
}

PostgresConnectionConfig PostgreSQL 连接配置。

type PresetRegistry added in v1.0.0

type PresetRegistry struct {
	Date DatePresetRegistry
}

PresetRegistry 统一预置工具入口。 后续可继续扩展为 Presets.User / Presets.Order / Presets.Task 等模块。 约束:这里仅放应用层语义预置(adapter-agnostic)。 例如 Mongo pipeline / collection / BSON 这类 Adapter 细节不应进入 Presets, 需放在各 Adapter 自己的能力层实现与文档中。

type QueryBuilder

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

QueryBuilder 查询构建器 (使用 Changeset 进行数据操作) Deprecated: QueryBuilder(v1) 仅保留兼容,建议使用 Repository.NewQueryConstructor() 创建 v2 查询构造器。

func NewQueryBuilder

func NewQueryBuilder(schema Schema, repo *Repository) *QueryBuilder

NewQueryBuilder 创建查询构建器 Deprecated: 使用 Repository.NewQueryConstructor(schema) 获取 v2 查询构造器。

func (*QueryBuilder) Delete

func (qb *QueryBuilder) Delete(whereClause string, whereArgs ...interface{}) (sql.Result, error)

Delete 删除数据

func (*QueryBuilder) DeleteByID

func (qb *QueryBuilder) DeleteByID(id interface{}) (sql.Result, error)

DeleteByID 按 ID 删除数据

func (*QueryBuilder) Insert

func (qb *QueryBuilder) Insert(cs *Changeset) (sql.Result, error)

Insert 插入数据

func (*QueryBuilder) Query

func (qb *QueryBuilder) Query() *QueryChain

Query 开始链式查询

func (*QueryBuilder) Select

func (qb *QueryBuilder) Select(columns string, whereClause string, whereArgs ...interface{}) (*sql.Rows, error)

Select 查询数据

func (*QueryBuilder) SelectAll

func (qb *QueryBuilder) SelectAll() (*sql.Rows, error)

SelectAll 查询所有数据

func (*QueryBuilder) SelectByID

func (qb *QueryBuilder) SelectByID(id interface{}) (*sql.Row, error)

SelectByID 按 ID 查询单条数据

func (*QueryBuilder) SelectCount

func (qb *QueryBuilder) SelectCount(whereClause string, whereArgs ...interface{}) (int64, error)

SelectCount 查询数据总数

func (*QueryBuilder) SelectOne

func (qb *QueryBuilder) SelectOne(whereClause string, whereArgs ...interface{}) (*sql.Row, error)

SelectOne 查询单条数据

func (*QueryBuilder) SoftDelete

func (qb *QueryBuilder) SoftDelete(whereClause string, whereArgs ...interface{}) (sql.Result, error)

SoftDelete 软删除数据 (仅适用于有 deleted_at 字段的表)

func (*QueryBuilder) SoftDeleteByID

func (qb *QueryBuilder) SoftDeleteByID(id interface{}) (sql.Result, error)

SoftDeleteByID 按 ID 软删除数据

func (*QueryBuilder) Transaction

func (qb *QueryBuilder) Transaction(fn func(*QueryBuilder) error) error

Transaction 事务操作

func (*QueryBuilder) Update

func (qb *QueryBuilder) Update(cs *Changeset, whereClause string, whereArgs ...interface{}) (sql.Result, error)

Update 更新数据

func (*QueryBuilder) UpdateByID

func (qb *QueryBuilder) UpdateByID(id interface{}, cs *Changeset) (sql.Result, error)

UpdateByID 按 ID 更新数据

func (*QueryBuilder) WithContext

func (qb *QueryBuilder) WithContext(ctx context.Context) *QueryBuilder

WithContext 设置上下文

type QueryBuilderCapabilities

type QueryBuilderCapabilities struct {
	// 支持的条件操作
	SupportsEq      bool
	SupportsNe      bool
	SupportsGt      bool
	SupportsLt      bool
	SupportsGte     bool
	SupportsLte     bool
	SupportsIn      bool
	SupportsBetween bool
	SupportsLike    bool
	SupportsAnd     bool
	SupportsOr      bool
	SupportsNot     bool

	// 支持的查询特性
	SupportsSelect   bool // 字段选择
	SupportsOrderBy  bool // 排序
	SupportsLimit    bool // LIMIT
	SupportsOffset   bool // OFFSET
	SupportsJoin     bool // JOIN(关系查询)
	SupportsSubquery bool // 子查询

	// 优化特性
	SupportsQueryPlan bool // 查询计划分析
	SupportsIndex     bool // 索引提示

	// 原生查询支持
	SupportsNativeQuery bool   // 是否支持原生查询(如 Cypher)
	NativeQueryLang     string // 原生查询语言名称(如 "cypher")

	// 其他标记
	Description string // 此 Adapter 的简要描述
}

QueryBuilderCapabilities 查询构造器能力声明 声明此 Adapter 的 QueryBuilder 支持哪些操作和优化

func DefaultQueryBuilderCapabilities

func DefaultQueryBuilderCapabilities() *QueryBuilderCapabilities

DefaultQueryBuilderCapabilities 返回默认的查询能力(SQL 兼容)

type QueryCacheConfig added in v1.0.0

type QueryCacheConfig struct {
	MaxEntries        int  `json:"max_entries,omitempty" yaml:"max_entries,omitempty"`
	DefaultTTLSeconds int  `json:"default_ttl_seconds,omitempty" yaml:"default_ttl_seconds,omitempty"`
	EnableMetrics     bool `json:"enable_metrics,omitempty" yaml:"enable_metrics,omitempty"`
}

QueryCacheConfig Repository 查询编译缓存配置。

type QueryChain

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

QueryChain 链式查询构建器 Deprecated: QueryChain 属于 v1 兼容层,建议迁移到 v2 QueryConstructor 链式 API。

func (*QueryChain) All

func (qc *QueryChain) All() (*sql.Rows, error)

All 查询所有

func (*QueryChain) Count

func (qc *QueryChain) Count() (int64, error)

Count 统计数量

func (*QueryChain) First

func (qc *QueryChain) First() (*sql.Row, error)

First 查询第一条

func (*QueryChain) Limit

func (qc *QueryChain) Limit(limit int) *QueryChain

Limit 设置 LIMIT

func (*QueryChain) Offset

func (qc *QueryChain) Offset(offset int) *QueryChain

Offset 设置 OFFSET

func (*QueryChain) OrderBy

func (qc *QueryChain) OrderBy(orderBy string) *QueryChain

OrderBy 设置排序

func (*QueryChain) Where

func (qc *QueryChain) Where(condition string, args ...interface{}) *QueryChain

Where 添加 WHERE 条件

type QueryCompileHints added in v1.0.0

type QueryCompileHints struct {
	UseTempTable bool
	TempTable    string
	ViewRoute    *QueryViewRouteIR
}

QueryCompileHints 编译阶段提示信息。

type QueryCompiler added in v1.0.0

type QueryCompiler interface {
	Compile(ctx context.Context, ir *QueryIR) (string, []interface{}, error)
}

QueryCompiler 查询编译器接口。 Builder 负责构造 IR,Compiler 负责将 IR 编译为目标数据库语言。

type QueryConstructor

type QueryConstructor interface {
	// 条件查询
	Where(condition Condition) QueryConstructor
	WhereWith(builder *WhereBuilder) QueryConstructor

	// 多条件 AND 组合
	WhereAll(conditions ...Condition) QueryConstructor

	// 多条件 OR 组合
	WhereAny(conditions ...Condition) QueryConstructor

	// 字段选择
	Select(fields ...string) QueryConstructor
	Count(fieldName ...string) QueryConstructor
	CountWith(builder *CountBuilder) QueryConstructor

	// 排序
	OrderBy(field string, direction string) QueryConstructor // direction: "ASC" | "DESC"

	// 分页
	Limit(count int) QueryConstructor
	Offset(count int) QueryConstructor
	Page(page int, pageSize int) QueryConstructor
	Paginate(builder *PaginationBuilder) QueryConstructor

	// 跨表查询(raw string JOIN)
	FromAlias(alias string) QueryConstructor
	Join(table, onClause string, alias ...string) QueryConstructor
	LeftJoin(table, onClause string, alias ...string) QueryConstructor
	RightJoin(table, onClause string, alias ...string) QueryConstructor
	CrossJoin(table string, alias ...string) QueryConstructor

	// JoinWith 使用 JoinBuilder 进行 Schema 感知的跨表连接。
	// SQL 后端:从 Schema.TableName() 取表名;Filter 条件追加到 WHERE。
	// Neo4j 后端:从 Schema FK 约束推断关系类型(On 为空时自动推断);
	//             Filter 条件转换为对连接节点的属性过滤。
	JoinWith(builder *JoinBuilder) QueryConstructor

	// 跨表查询策略(方言级默认 + 显式覆盖)
	CrossTableStrategy(strategy CrossTableStrategy) QueryConstructor
	CustomMode() QueryConstructor

	// 构建查询
	Build(ctx context.Context) (string, []interface{}, error)

	// 统计结果数量(忽略当前分页设置)
	SelectCount(ctx context.Context, repo *Repository) (int64, error)

	// UPSERT(支持方言原生语法;不支持时事务模拟)
	Upsert(ctx context.Context, repo *Repository, cs *Changeset, conflictColumns ...string) (sql.Result, error)

	// 获取底层查询构造器(用于 Adapter 特定优化)
	GetNativeBuilder() interface{}
}

QueryConstructor 查询构造器接口 - 顶层 API 用户通过此接口构建查询,具体实现由适配器提供

type QueryConstructorAutoExecutionResult added in v1.0.0

type QueryConstructorAutoExecutionResult struct {
	Mode      string
	Statement string
	Args      []interface{}
	Rows      []map[string]interface{}
	Exec      *QueryConstructorExecSummary
}

QueryConstructorAutoExecutionResult 表示 QueryConstructor 自动路由执行结果。 Mode=query 表示查询结果在 Rows;Mode=exec 表示写入摘要在 Exec 中。

type QueryConstructorExecSummary added in v1.0.0

type QueryConstructorExecSummary struct {
	RowsAffected int64
	LastInsertID *int64
	Counters     map[string]int
	Details      map[string]interface{}
}

QueryConstructorExecSummary 表示写入执行摘要。

type QueryConstructorExecutionResult added in v1.0.0

type QueryConstructorExecutionResult struct {
	Statement string
	Args      []interface{}
	Rows      []map[string]interface{}
}

QueryConstructorExecutionResult 表示 QueryConstructor 统一执行结果。

type QueryConstructorProvider

type QueryConstructorProvider interface {
	// 创建新的查询构造器
	NewQueryConstructor(schema Schema) QueryConstructor

	// 获取此 Adapter 的查询能力声明
	GetCapabilities() *QueryBuilderCapabilities
}

QueryConstructorProvider 查询构造器提供者接口 - 中层转义层 每个 Adapter 实现此接口,提供数据库特定的 QueryConstructor

type QueryFallbackStrategy

type QueryFallbackStrategy string

QueryFallbackStrategy 查询特性不支持时的降级策略

const (
	// 不支持,无替代方案
	QueryFallbackNone QueryFallbackStrategy = "none"
	// 在应用层处理(客户端过滤/排序等)
	QueryFallbackApplicationLayer QueryFallbackStrategy = "application_layer"
	// 通过数据库自定义函数降级(如 SQLite 注册 JSON_EXTRACT_GO)
	QueryFallbackCustomFunction QueryFallbackStrategy = "custom_function"
	// 使用替代语法(例如 SQL Server vs PostgreSQL)
	QueryFallbackAlternativeSyntax QueryFallbackStrategy = "alternative_syntax"
	// 分解为多个简单查询
	QueryFallbackMultiQuery QueryFallbackStrategy = "multi_query"
	// 使用临时表
	QueryFallbackTemporaryTable QueryFallbackStrategy = "temporary_table"
)

type QueryFeature

type QueryFeature struct {
	Name        string                // 特性名称(如 "IN_RANGE_QUERY")
	Supported   bool                  // 是否支持
	Fallback    QueryFallbackStrategy // 不支持时的降级策略
	Notes       string                // 备注说明
	SQLExamples map[string]string     // 各数据库的 SQL 示例 (数据库名 => SQL)
}

QueryFeature 单个查询特性描述

type QueryFeatureCategory

type QueryFeatureCategory string

QueryFeatureCategory 查询特性分类

const (
	// 基础查询操作
	QueryCategoryBasicOps QueryFeatureCategory = "basic_operations"
	// JOIN 操作
	QueryCategoryJoinOps QueryFeatureCategory = "join_operations"
	// 高级查询特性
	QueryCategoryAdvancedQueries QueryFeatureCategory = "advanced_queries"
	// 聚合和分析
	QueryCategoryAggregation QueryFeatureCategory = "aggregation"
	// 文本搜索
	QueryCategoryTextSearch QueryFeatureCategory = "text_search"
	// JSON 相关操作
	QueryCategoryJSON QueryFeatureCategory = "json_operations"
)

type QueryFeatures

type QueryFeatures struct {
	// 基础查询特性
	SupportsIN       bool // IN (value1, value2, ...) 范围查询
	SupportsNotIN    bool // NOT IN 查询
	SupportsBetween  bool // BETWEEN 查询
	SupportsLike     bool // LIKE 模式匹配
	SupportsDistinct bool // DISTINCT 去重
	SupportsGroupBy  bool // GROUP BY 分组
	SupportsHaving   bool // HAVING 条件过滤

	// JOIN 操作
	SupportsInnerJoin     bool // INNER JOIN
	SupportsLeftJoin      bool // LEFT JOIN
	SupportsRightJoin     bool // RIGHT JOIN
	SupportsCrossJoin     bool // CROSS JOIN
	SupportsFullOuterJoin bool // FULL OUTER JOIN
	SupportsSelfJoin      bool // 自连接

	// 高级查询特性
	SupportsCTE                bool // 公用表表达式 (WITH ... AS)
	SupportsRecursiveCTE       bool // 递归 CTE
	SupportsWindowFunc         bool // 窗口函数 (ROW_NUMBER, RANK, etc)
	SupportsSubquery           bool // 子查询
	SupportsCorrelatedSubquery bool // 关联子查询
	SupportsUnion              bool // UNION / UNION ALL
	SupportsExcept             bool // EXCEPT / MINUS
	SupportsIntersect          bool // INTERSECT

	// 聚合和分析函数
	SupportsOrderByInAggregate bool // 聚合函数中的 ORDER BY (如 STRING_AGG(...ORDER BY...))
	SupportsArrayAggregate     bool // 数组聚合
	SupportsStringAggregate    bool // 字符串聚合

	// 文本搜索
	SupportsFullTextSearch bool // 全文搜索
	SupportsRegexMatch     bool // 正则表达式匹配
	SupportsFuzzyMatch     bool // 模糊匹配

	// JSON 操作
	SupportsJSONPath      bool // JSON 路径提取
	SupportsJSONType      bool // JSON 数据类型
	SupportsJSONOperators bool // JSON 运算符
	SupportsJSONAgg       bool // JSON 聚合

	// 案例表达式
	SupportsCase         bool // CASE WHEN THEN ELSE END
	SupportsCaseWithElse bool // CASE 带 ELSE

	// 其他特性
	SupportsLimit    bool // LIMIT 限制行数
	SupportsOffset   bool // OFFSET 偏移
	SupportsOrderBy  bool // ORDER BY 排序
	SupportsNulls    bool // IS NULL / IS NOT NULL
	SupportsCastType bool // CAST(...AS type)
	SupportsCoalesce bool // COALESCE 函数

	// 特殊数据库特性
	SupportsIfExists     bool // IF EXISTS 子句
	SupportsInsertIgnore bool // INSERT IGNORE (MySQL) 或 ON CONFLICT (PostgreSQL)
	SupportsUpsert       bool // INSERT ... ON DUPLICATE KEY UPDATE 或 ON CONFLICT

	// ==================== VIEW 支持 ====================
	SupportsView             bool // 是否支持 VIEW
	SupportsMaterializedView bool // 物化视图支持(如 PostgreSQL)
	SupportsViewForPreload   bool // 是否支持用 VIEW 实现 Preload 优化

	// ==================== 多 Adapter 路由优化信息 ====================
	// Search 操作优化
	SearchOptimizationSupported bool // 该 adapter 是否支持 search
	SearchOptimizationIsOptimal bool // 是否是 search 的最优 adapter
	SearchOptimizationPriority  int  // 路由优先级 (1=最优, 2=次优, 3=备选)

	// Recursive 查询优化
	RecursiveOptimizationSupported       bool // 是否支持递归查询
	RecursiveOptimizationIsOptimal       bool // 是否是递归查询的最优 adapter
	RecursiveOptimizationPriority        int  // 路由优先级
	RecursiveOptimizationHasNativeSyntax bool // 是否有原生递归语法(否则需要补偿)

	// Adapter 功能标签
	AdapterTags []string // 功能标签,如 ["text_search", "graph", "relational", "time_series"]

	// 优化说明
	OptimizationNotes map[string]string // 各种优化信息的说明

	// 映射:特性名 => 降级策略
	FallbackStrategies map[string]QueryFallbackStrategy
	// 特性说明
	FeatureNotes map[string]string
	// 替代语法映射
	AlternativeSyntax map[string]string

	// 版本化特性支持(可选)
	FeatureSupport map[string]FeatureSupport
}

QueryFeatures 数据库查询特性集合

func GetQueryFeatures

func GetQueryFeatures(dbType string) *QueryFeatures

GetQueryFeatures 获取数据库的查询特性

func NewMongoQueryFeatures

func NewMongoQueryFeatures() *QueryFeatures

NewMongoQueryFeatures MongoDB 查询特性(最小占位实现)

func NewMySQLQueryFeatures

func NewMySQLQueryFeatures() *QueryFeatures

NewMySQLQueryFeatures MySQL 查询特性

func NewNeo4jQueryFeatures added in v1.0.0

func NewNeo4jQueryFeatures() *QueryFeatures

NewNeo4jQueryFeatures Neo4j 查询特性(Cypher 能力映射)。

func NewPostgreSQLQueryFeatures

func NewPostgreSQLQueryFeatures() *QueryFeatures

NewPostgreSQLQueryFeatures PostgreSQL 查询特性

func NewSQLServerQueryFeatures

func NewSQLServerQueryFeatures() *QueryFeatures

NewSQLServerQueryFeatures SQL Server 查询特性

func NewSQLiteQueryFeatures

func NewSQLiteQueryFeatures() *QueryFeatures

NewSQLiteQueryFeatures SQLite 查询特性

func (*QueryFeatures) GetAlternativeSyntax

func (qf *QueryFeatures) GetAlternativeSyntax(feature string) string

GetAlternativeSyntax 获取替代语法

func (*QueryFeatures) GetFallbackStrategy

func (qf *QueryFeatures) GetFallbackStrategy(feature string) QueryFallbackStrategy

GetFallbackStrategy 获取不支持特性时的降级策略

func (*QueryFeatures) GetFeatureNote

func (qf *QueryFeatures) GetFeatureNote(feature string) string

GetFeatureNote 获取特性说明

func (*QueryFeatures) GetFeatureSupport

func (qf *QueryFeatures) GetFeatureSupport(feature string) FeatureSupport

GetFeatureSupport 获取特性支持详情(若未定义则返回零值)

func (*QueryFeatures) HasQueryFeature

func (qf *QueryFeatures) HasQueryFeature(feature string) bool

HasQueryFeature 检查是否支持某个查询特性

func (*QueryFeatures) SupportsFeatureWithVersion

func (qf *QueryFeatures) SupportsFeatureWithVersion(feature, version string) bool

SupportsFeatureWithVersion 根据版本判断特性支持(version 为空时退回到常规判断)

type QueryIR added in v1.0.0

type QueryIR struct {
	Source             QuerySourceIR
	Projections        []string
	Conditions         []Condition
	OrderBys           []QueryOrderIR
	Limit              *int
	Offset             *int
	Joins              []QueryJoinIR
	CrossTableStrategy CrossTableStrategy
	Hints              QueryCompileHints
}

QueryIR 表示查询的中间表示(IR),用于解耦构建阶段与目标语言编译阶段。

type QueryJoinIR added in v1.0.0

type QueryJoinIR struct {
	JoinType string
	Semantic JoinSemantic // 语义意图(来自 JoinBuilder.semantic);"" 表示 raw Join 或未设置
	Relation *QueryJoinRelationIR
	Table    string
	Schema   Schema // Schema 引用,来自 JoinBuilder,nil 表示 raw string JOIN
	Alias    string
	OnClause string
	Filters  []Condition // 对连接目标实体的额外过滤条件(各后端自行处理)
}

QueryJoinIR 连接信息。

type QueryJoinRelationIR added in v1.1.0

type QueryJoinRelationIR struct {
	Type       RelationType
	Name       string
	Direction  string // "forward" | "reverse"
	Reversible bool
	ResolvedBy string // "relation_registry" | "foreign_key"
	Through    *QueryRelationThroughIR
}

QueryJoinRelationIR 关系元数据(用于适配器优化)。 例如: - SQL Server 可基于 ManyToMany + Through 选择递归 CTE 或中间表路径。 - Neo4j 可基于 Through 将中间关系映射为边/路径展开。 - Mongo 可生成多段 $lookup 管道。

type QueryOrderIR added in v1.0.0

type QueryOrderIR struct {
	Field     string
	Direction string
}

QueryOrderIR 排序信息。

type QueryRelationThroughIR added in v1.1.0

type QueryRelationThroughIR struct {
	Table     string
	SourceKey string
	TargetKey string
}

QueryRelationThroughIR 多对多中间关系元数据。

type QuerySourceIR added in v1.0.0

type QuerySourceIR struct {
	Table  string
	Alias  string
	Schema Schema // Schema 引用,nil 表示非 Schema 感知模式
}

QuerySourceIR 查询数据源。

type QueryViewRouteIR added in v1.0.0

type QueryViewRouteIR struct {
	ViewName string
	Alias    string
}

QueryViewRouteIR 视图路由提示。

type RangeValidator added in v1.0.0

type RangeValidator struct {
	Min *float64
	Max *float64
}

RangeValidator 数值范围验证器(闭区间)

func NewMaxRangeValidator added in v1.0.0

func NewMaxRangeValidator(max float64) *RangeValidator

func NewMinRangeValidator added in v1.0.0

func NewMinRangeValidator(min float64) *RangeValidator

func NewRangeValidator added in v1.0.0

func NewRangeValidator(min, max float64) *RangeValidator

func (*RangeValidator) Validate added in v1.0.0

func (v *RangeValidator) Validate(value interface{}) error

type RawSQLMigration

type RawSQLMigration struct {
	*BaseMigration
	// contains filtered or unexported fields
}

RawSQLMigration 原始 SQL 迁移

func NewRawSQLMigration

func NewRawSQLMigration(version, description string) *RawSQLMigration

NewRawSQLMigration 创建原始 SQL 迁移

func (*RawSQLMigration) AddDownSQL

func (m *RawSQLMigration) AddDownSQL(sql string) *RawSQLMigration

AddDownSQL 添加 Down SQL

func (*RawSQLMigration) AddUpSQL

func (m *RawSQLMigration) AddUpSQL(sql string) *RawSQLMigration

AddUpSQL 添加 Up SQL

func (*RawSQLMigration) Down

func (m *RawSQLMigration) Down(ctx context.Context, repo *Repository) error

Down 回滚迁移

func (*RawSQLMigration) ForAdapter

func (m *RawSQLMigration) ForAdapter(adapter string) *RawSQLMigration

ForAdapter 指定 adapter

func (*RawSQLMigration) Up

func (m *RawSQLMigration) Up(ctx context.Context, repo *Repository) error

Up 执行迁移

type RecursiveQueryBuilder added in v1.0.0

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

RecursiveQueryBuilder 构建 SQL Server T-SQL 递归 CTE 查询。

生成的 T-SQL 格式:

WITH [cte_name] ([col1], [col2], ...) AS (
    <anchor>          -- 锚定成员(基准结果集)
    UNION ALL
    <recursive>       -- 递归成员(自我引用 CTE)
)
SELECT <select> FROM [cte_name]
OPTION (MAXRECURSION <n>)

func (*RecursiveQueryBuilder) Anchor added in v1.0.0

Anchor 设置递归 CTE 的锚定成员(基准查询,非递归部分)。 应为完整的 SELECT 语句,不含 UNION。

func (*RecursiveQueryBuilder) Build added in v1.0.0

func (b *RecursiveQueryBuilder) Build() (string, error)

Build 生成最终的 T-SQL 字符串。不执行查询,可用于日志或调试。

func (*RecursiveQueryBuilder) Columns added in v1.0.0

func (b *RecursiveQueryBuilder) Columns(cols ...string) *RecursiveQueryBuilder

Columns 可选:显式声明 CTE 的列名列表(对应 WITH name (col1, col2) AS ...)。 若不调用则不生成列名声明,由 anchor SELECT 决定列名。

func (*RecursiveQueryBuilder) Execute added in v1.0.0

func (b *RecursiveQueryBuilder) Execute(ctx context.Context) (*sql.Rows, error)

Execute 构建并执行递归 CTE 查询,返回原始 *sql.Rows。 调用方负责关闭 rows(defer rows.Close())。

func (*RecursiveQueryBuilder) MaxRecursion added in v1.0.0

func (b *RecursiveQueryBuilder) MaxRecursion(n int) *RecursiveQueryBuilder

MaxRecursion 设置 OPTION(MAXRECURSION n)。 n = 0 表示不限制(等同于 OPTION(MAXRECURSION 0));默认为 100(SQL Server 默认)。

func (*RecursiveQueryBuilder) OrderBy added in v1.0.0

OrderBy 设置最终 SELECT 的 ORDER BY 子句(不含 ORDER BY 关键字)。

示例:OrderBy("depth ASC, name")

func (*RecursiveQueryBuilder) Recursive added in v1.0.0

Recursive 设置递归成员(自我引用上一步结果的查询)。 应为完整的 SELECT 语句,JOIN 部分引用 cteName。

func (*RecursiveQueryBuilder) ScanRows added in v1.0.0

func (b *RecursiveQueryBuilder) ScanRows(ctx context.Context) ([]map[string]interface{}, error)

ScanRows 是 Execute 的便捷包装,将每一行扫描为 map[string]interface{}。 适合字段集不确定的场景;对于已知结构推荐直接使用 Execute 手动 Scan。

func (*RecursiveQueryBuilder) Select added in v1.0.0

func (b *RecursiveQueryBuilder) Select(selectExpr string) *RecursiveQueryBuilder

Select 设置从 CTE 中最终 SELECT 的列表达式,如 "id, name, depth"。 若不调用,默认使用 SELECT *。

func (*RecursiveQueryBuilder) SelectAll added in v1.0.0

SelectAll 设置最终查询为 SELECT *(默认行为,显式调用以提高可读性)。

func (*RecursiveQueryBuilder) Where added in v1.0.0

func (b *RecursiveQueryBuilder) Where(condition string, args ...interface{}) *RecursiveQueryBuilder

Where 设置最终 SELECT 的 WHERE 过滤条件(不含 WHERE 关键字)。 参数化值使用 @p1、@p2 ... 作为占位符(SQL Server 风格)。

示例:Where("depth <= @p1", 3)

type RegexValidator added in v1.0.0

type RegexValidator struct {
	Pattern      string
	Code         string
	InvalidType  string
	InvalidValue string
}

RegexValidator 通用正则验证器

func (*RegexValidator) Validate added in v1.0.0

func (v *RegexValidator) Validate(value interface{}) error

type RelationThrough added in v1.1.0

type RelationThrough struct {
	Schema    Schema // 中间关系 Schema(优先)
	Table     string // 中间关系表/集合名(Schema 为空时兜底)
	SourceKey string // source -> through 的连接键
	TargetKey string // through -> target 的连接键
}

RelationThrough 声明多对多关系的中间关系信息。

SQL 可将 Table 视为中间表(可做递归 CTE / join 表优化); Neo4j 可将其映射为边关系类型或中间节点; Mongo 可将其用于两段 $lookup 管道。

type RelationType

type RelationType string
const (
	OneToOne   RelationType = "one_to_one"
	OneToMany  RelationType = "one_to_many"
	ManyToOne  RelationType = "many_to_one"
	ManyToMany RelationType = "many_to_many"
)
const (
	// RelationHasMany 一对多:本 Schema 是"一"侧,目标 Schema 持有外键(FK 在目标侧)。
	// 连接时默认 optional(本实体可能有 0 个目标实体)。
	RelationHasMany RelationType = "has_many"

	// RelationHasOne 一对一:本 Schema 是"一"侧,目标 Schema 持有外键(FK 在目标侧)。
	// 连接时默认 optional(本实体可能没有对应目标实体)。
	RelationHasOne RelationType = "has_one"

	// RelationBelongsTo 多对一:本 Schema 持有外键(FK 在本侧),目标 Schema 是"一"侧。
	// 连接时默认 required(本实体必须有对应父实体)。
	RelationBelongsTo RelationType = "belongs_to"

	// RelationManyToMany 多对多:通常需要 Through 中间关系(中间表/中间边)。
	// 连接时默认 optional。
	RelationManyToMany RelationType = ManyToMany
)

Schema 关系类型常量(ORM 风格,用于 SchemaRelation 关系注册表)。 使用与 relationship.go 中相同的 RelationType 类型,添加 HasMany/HasOne/BelongsTo 语义。

type RelationalSchema added in v1.1.0

type RelationalSchema interface {
	Schema
	Relations() []SchemaRelation
	FindRelation(targetTable string) *SchemaRelation
}

RelationalSchema 扩展 Schema,支持显式关系注册(HasMany / HasOne / BelongsTo)。 BaseSchema 实现此接口;关系注册优先于 FK 约束用于连接语义推断和跨集合关联。

type Relationship

type Relationship struct {
	// 关系名称(用于查询时引用)
	Name string

	// 源表和目标表
	FromSchema Schema
	ToSchema   Schema

	// 关系类型
	Type RelationType

	// 外键定义
	ForeignKey *ForeignKeyDef

	// 关联表(仅用于多对多)
	JoinTable *JoinTableDef
}

Relationship 表示表之间的关系定义

type RelationshipManager

type RelationshipManager interface {
	// 获取该 Adapter 的关系支持能力
	GetRelationshipSupport() *RelationshipSupport

	// 创建关系(创建外键、中间表等)
	CreateRelationship(ctx context.Context, rel *Relationship) error

	// 删除关系
	DropRelationship(ctx context.Context, fromTable, relName string) error

	// 查询关系(带关联数据)
	QueryWithRelation(ctx context.Context, schema Schema, rel *Relationship, query string, args ...interface{}) (interface{}, error)

	// 检查关系是否存在
	HasRelationship(ctx context.Context, fromTable, relName string) (bool, error)
}

RelationshipManager Adapter 需要实现的关系管理接口

type RelationshipStrategy

type RelationshipStrategy string
const (
	// 原生支持(PostgreSQL, SQL Server)
	StrategyNative RelationshipStrategy = "native"

	// 通过中间表模拟多对多(MySQL, SQLite)
	StrategyJoinTable RelationshipStrategy = "join_table"

	// 通过外键实现关系(所有关系型数据库)
	StrategyForeignKey RelationshipStrategy = "foreign_key"

	// 应用层实现(非关系型数据库)
	StrategyApplication RelationshipStrategy = "application"

	// 完全不支持
	StrategyNotSupported RelationshipStrategy = "not_supported"
)

type RelationshipSupport

type RelationshipSupport struct {
	// 基础关系类型支持
	OneToOne   bool
	OneToMany  bool
	ManyToMany bool

	// 关系特性
	SupportsForeignKey bool // 是否支持外键约束
	SupportsJoin       bool // 是否支持 JOIN 操作
	SupportsNested     bool // 是否支持嵌套关系查询

	// 实现方式
	Strategy RelationshipStrategy // 如何实现关系
}

RelationshipSupport 关系支持能力声明

type RelationshipValidator

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

RelationshipValidator 用于验证关系定义的有效性和兼容性

func NewRelationshipValidator

func NewRelationshipValidator(support *RelationshipSupport) *RelationshipValidator

NewRelationshipValidator 创建验证器

func (*RelationshipValidator) CanJoin

func (v *RelationshipValidator) CanJoin() bool

CanJoin 检查是否可以执行 JOIN 操作

func (*RelationshipValidator) GetSupportSummary

func (v *RelationshipValidator) GetSupportSummary() map[string]bool

GetSupportSummary 获取支持情况的总结

func (*RelationshipValidator) NeedsManyToManyEmulation

func (v *RelationshipValidator) NeedsManyToManyEmulation(rel *Relationship) bool

NeedsManyToManyEmulation 检查是否需要多对多转发

func (*RelationshipValidator) ValidateRelationship

func (v *RelationshipValidator) ValidateRelationship(rel *Relationship) error

ValidateRelationship 验证单个关系是否在 Adapter 支持范围内

type Repository

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

Repository 数据库仓储对象 (类似 Ecto.Repo)

func InitDB

func InitDB(configPath string) (*Repository, error)

InitDB 使用配置文件初始化数据库 这是推荐的使用方式,遵循 Ecto 的依赖注入模式

func InitDBFromAdapterRegistry

func InitDBFromAdapterRegistry(configPath, adapterName string) (*Repository, error)

InitDBFromAdapterRegistry 从多 Adapter 配置文件初始化指定 adapter configPath: YAML/JSON 配置文件路径 adapterName: 在 adapters 中注册的名称

func InitDBFromEnv

func InitDBFromEnv() (*Repository, error)

InitDBFromEnv 使用环境变量初始化数据库 环境变量:

DB_ADAPTER: 适配器类型 (sqlite/postgres/mysql)
DB_PATH: SQLite 数据库文件路径
DB_HOST: 数据库主机
DB_PORT: 数据库端口
DB_USER: 数据库用户名
DB_PASSWORD: 数据库密码
DB_NAME: 数据库名称
DB_SSL_MODE: PostgreSQL SSL 模式

func InitDBWithDefaults

func InitDBWithDefaults(adapterType string) (*Repository, error)

InitDBWithDefaults 使用默认配置初始化数据库

func NewRepository

func NewRepository(config *Config) (*Repository, error)

NewRepository 创建新的仓储实例 (通过配置注入)

func NewRepositoryFromAdapterConfig

func NewRepositoryFromAdapterConfig(name string) (*Repository, error)

NewRepositoryFromAdapterConfig 通过已注册的 Adapter 配置创建 Repository

func (*Repository) AnalyzeFuzzySearch added in v1.0.0

func (r *Repository) AnalyzeFuzzySearch(ctx context.Context, field, keyword, version string) (*FuzzySearchPlan, error)

AnalyzeFuzzySearch 根据数据库能力(含运行时插件探测)生成模糊查询计划。

func (*Repository) Begin

func (r *Repository) Begin(ctx context.Context, opts ...interface{}) (Tx, error)

Begin 开始事务 Deprecated: 这是底层事务原语,主要供迁移/框架集成使用。 业务层应优先使用 Repository.WithChangeset,以避免绕过 Changeset 校验与写入封装。

func (*Repository) BuildAndCacheQuery added in v1.0.0

func (r *Repository) BuildAndCacheQuery(ctx context.Context, cacheKey string, constructor QueryConstructor) (query string, args []interface{}, cacheHit bool, err error)

BuildAndCacheQuery 编译查询并缓存;命中缓存时直接返回。 返回值 cacheHit=true 表示直接复用缓存,无需再次 Build。

func (*Repository) BuildAndCacheQueryTemplate added in v1.0.0

func (r *Repository) BuildAndCacheQueryTemplate(ctx context.Context, cacheKey string, constructor QueryConstructor) (query string, argCount int, cacheHit bool, err error)

BuildAndCacheQueryTemplate 编译查询模板并缓存;命中缓存时直接返回模板。 与 BuildAndCacheQuery 的区别是该 API 不缓存具体参数值,仅缓存 query 文本和参数位个数。

func (*Repository) BuildFuzzyCondition added in v1.0.0

func (r *Repository) BuildFuzzyCondition(field, keyword, version string) Condition

BuildFuzzyCondition 构建兼容模糊查询条件: - 支持 full_text_search 时使用 FullText - 不支持时自动降级为 LIKE '%keyword%' version 用于版本化能力判断(可为空)

func (*Repository) BuildFuzzyConditionWithContext added in v1.0.0

func (r *Repository) BuildFuzzyConditionWithContext(ctx context.Context, field, keyword, version string) (Condition, error)

BuildFuzzyConditionWithContext 构建兼容模糊查询条件(带上下文能力探测)

func (*Repository) ClearCompiledQueryCache added in v1.0.0

func (r *Repository) ClearCompiledQueryCache()

ClearCompiledQueryCache 清空 Repository 的查询编译缓存。

func (*Repository) Close

func (r *Repository) Close() error

Close 关闭数据库连接

func (*Repository) Connect

func (r *Repository) Connect(ctx context.Context) error

Connect 连接数据库

func (*Repository) DecideFeatureExecution added in v1.0.0

func (r *Repository) DecideFeatureExecution(feature, version string) (*FeatureExecutionDecision, error)

DecideFeatureExecution 决策某功能应走原生、自定义、降级或报错

func (*Repository) Exec

func (r *Repository) Exec(ctx context.Context, sql string, args ...interface{}) (sql.Result, error)

Exec 执行操作

func (*Repository) ExecCypher added in v1.0.0

func (r *Repository) ExecCypher(ctx context.Context, cypher string, params map[string]interface{}) (*CypherWriteSummary, error)

ExecCypher 在 Repository 上执行 Neo4j 写查询。

func (*Repository) ExecWithCachedTemplate added in v1.0.0

func (r *Repository) ExecWithCachedTemplate(ctx context.Context, cacheKey string, args ...interface{}) (sql.Result, error)

ExecWithCachedTemplate 使用缓存模板执行写操作。

func (*Repository) ExecuteFeature added in v1.0.0

func (r *Repository) ExecuteFeature(ctx context.Context, feature, version string, input map[string]interface{}) (interface{}, error)

ExecuteFeature 尝试执行功能;仅在 custom 模式下真正执行。 native/fallback/unsupported 会返回解释性错误,便于上层路由决策。

func (*Repository) ExecuteQueryConstructor added in v1.0.0

func (r *Repository) ExecuteQueryConstructor(ctx context.Context, constructor QueryConstructor) (*QueryConstructorExecutionResult, error)

ExecuteQueryConstructor 执行 QueryConstructor,自动路由 SQL/Neo4j/MongoDB。 - SQL 适配器:执行 Query 并将结果扫描为 []map[string]interface{} - Neo4j 适配器:执行 QueryCypher 并返回记录 - MongoDB 适配器:执行 BSON Find 计划并返回文档

func (*Repository) ExecuteQueryConstructorAuto added in v1.0.0

func (r *Repository) ExecuteQueryConstructorAuto(ctx context.Context, constructor QueryConstructor) (*QueryConstructorAutoExecutionResult, error)

ExecuteQueryConstructorAuto 执行 QueryConstructor,自动识别读/写语义并路由到 adapter。

路由规则: - SQL:SELECT/WITH...SELECT 走 Query,其他语句走 Exec - Neo4j:MATCH/OPTIONAL MATCH/RETURN/CALL...YIELD 走 Query,其余走 ExecCypher - MongoDB:支持由 MongoQueryConstructor 生成的 MONGO_FIND:: 查询计划(query)与 MONGO_WRITE:: 写入计划(exec)

func (*Repository) ExecuteQueryConstructorPaged added in v1.1.1

func (r *Repository) ExecuteQueryConstructorPaged(ctx context.Context, constructor QueryConstructor, page int, pageSize int) (*PagedQueryConstructorExecutionResult, error)

ExecuteQueryConstructorPaged 执行分页查询,并返回总数与分页元信息。

func (*Repository) ExecuteQueryConstructorPagedWithCache added in v1.1.1

func (r *Repository) ExecuteQueryConstructorPagedWithCache(ctx context.Context, cacheKeyPrefix string, constructor QueryConstructor, page int, pageSize int) (*PagedQueryConstructorExecutionResult, error)

ExecuteQueryConstructorPagedWithCache 执行分页查询,并为分页查询与 count 查询接入编译缓存。

func (*Repository) ExecuteQueryConstructorPaginated added in v1.1.1

func (r *Repository) ExecuteQueryConstructorPaginated(ctx context.Context, constructor QueryConstructor, builder *PaginationBuilder) (*PagedQueryConstructorExecutionResult, error)

ExecuteQueryConstructorPaginated 使用统一分页语义执行查询(offset/cursor/auto)。

func (*Repository) ExecuteQueryConstructorPaginatedWithCache added in v1.1.1

func (r *Repository) ExecuteQueryConstructorPaginatedWithCache(ctx context.Context, cacheKeyPrefix string, constructor QueryConstructor, builder *PaginationBuilder) (*PagedQueryConstructorExecutionResult, error)

ExecuteQueryConstructorPaginatedWithCache 使用统一分页语义执行查询,并为分页查询与 count 查询接入编译缓存。

func (*Repository) ExecuteQueryConstructorWithCache added in v1.0.0

func (r *Repository) ExecuteQueryConstructorWithCache(ctx context.Context, cacheKey string, constructor QueryConstructor) (*QueryConstructorExecutionResult, bool, error)

ExecuteQueryConstructorWithCache 执行 QueryConstructor,并在编译阶段接入缓存。 返回 cacheHit=true 表示复用了已缓存的编译结果。

func (*Repository) GetAdapter

func (r *Repository) GetAdapter() Adapter

GetAdapter 获取底层适配器 (用于高级操作)

func (*Repository) GetCompiledQuery added in v1.0.0

func (r *Repository) GetCompiledQuery(cacheKey string) (*CompiledQuery, bool)

GetCompiledQuery 从缓存读取已编译查询。

func (*Repository) GetCompiledQueryCacheStats added in v1.0.0

func (r *Repository) GetCompiledQueryCacheStats() CompiledQueryCacheStats

GetCompiledQueryCacheStats 返回查询缓存命中统计。

func (*Repository) GetCompiledQueryTemplate added in v1.0.0

func (r *Repository) GetCompiledQueryTemplate(cacheKey string) (*CompiledQueryTemplate, bool)

GetCompiledQueryTemplate 从缓存读取查询模板。

func (*Repository) GetGormDB

func (r *Repository) GetGormDB() *gorm.DB

GetGormDB 从 Repository 获取 GORM 实例 Deprecated: 为了保持 Adapter 与 ORM 解耦,此方法始终返回 nil。

func (*Repository) GetQueryBuilderCapabilities added in v1.0.0

func (r *Repository) GetQueryBuilderCapabilities() (*QueryBuilderCapabilities, error)

GetQueryBuilderCapabilities 获取当前适配器的查询构造能力声明

func (*Repository) GetStartupCapabilityReport added in v1.0.0

func (r *Repository) GetStartupCapabilityReport() *StartupCapabilityReport

GetStartupCapabilityReport 返回最近一次启动体检报告。

func (*Repository) InvalidateCompiledQuery added in v1.0.0

func (r *Repository) InvalidateCompiledQuery(cacheKey string)

InvalidateCompiledQuery 删除指定缓存键。

func (*Repository) ListScheduledTasks

func (r *Repository) ListScheduledTasks(ctx context.Context) ([]*ScheduledTaskStatus, error)

ListScheduledTasks 列出所有已注册的定时任务

func (*Repository) NewChangesetExecutor added in v1.0.0

func (r *Repository) NewChangesetExecutor(ctx context.Context, schema Schema) (*ChangesetExecutor, error)

NewChangesetExecutor 创建面向业务层的 Changeset 执行器。

func (*Repository) NewQueryConstructor added in v1.0.0

func (r *Repository) NewQueryConstructor(schema Schema) (QueryConstructor, error)

NewQueryConstructor 创建 v2 查询构造器(推荐)

func (*Repository) Ping

func (r *Repository) Ping(ctx context.Context) error

Ping 测试数据库连接

func (*Repository) Query

func (r *Repository) Query(ctx context.Context, sql string, args ...interface{}) (*sql.Rows, error)

Query 执行查询

func (*Repository) QueryCypher added in v1.0.0

func (r *Repository) QueryCypher(ctx context.Context, cypher string, params map[string]interface{}) ([]map[string]interface{}, error)

QueryCypher 在 Repository 上执行 Neo4j 读查询。

func (*Repository) QueryRow

func (r *Repository) QueryRow(ctx context.Context, sql string, args ...interface{}) *sql.Row

QueryRow 执行单行查询

func (*Repository) QueryRowWithCachedTemplate added in v1.0.0

func (r *Repository) QueryRowWithCachedTemplate(ctx context.Context, cacheKey string, args ...interface{}) (*sql.Row, error)

QueryRowWithCachedTemplate 使用缓存模板执行单行查询。

func (*Repository) QueryStruct

func (r *Repository) QueryStruct(ctx context.Context, dest interface{}, sql string, args ...interface{}) error

QueryStruct 查询单个结构体 自动将查询结果映射到结构体

func (*Repository) QueryStructs

func (r *Repository) QueryStructs(ctx context.Context, dest interface{}, sql string, args ...interface{}) error

QueryStructs 查询多个结构体 自动将查询结果映射到结构体切片

func (*Repository) QueryWithCachedTemplate added in v1.0.0

func (r *Repository) QueryWithCachedTemplate(ctx context.Context, cacheKey string, args ...interface{}) (*sql.Rows, error)

QueryWithCachedTemplate 使用缓存模板执行查询。

func (*Repository) RegisterScheduledTask

func (r *Repository) RegisterScheduledTask(ctx context.Context, task *ScheduledTaskConfig) error

RegisterScheduledTask 注册定时任务 支持按月自动创建表等后台任务,具体实现由各个适配器决定:

  • PostgreSQL: 使用触发器和 pg_cron 扩展
  • MySQL: 使用 MySQL EVENT
  • SQLite/其他: 建议由应用层通过 cron 库处理

func (*Repository) RunStartupCapabilityCheck added in v1.0.0

func (r *Repository) RunStartupCapabilityCheck(ctx context.Context, cfg *StartupCapabilityConfig) (*StartupCapabilityReport, error)

RunStartupCapabilityCheck 执行启动期能力体检并根据 strict/lenient 决策。

func (*Repository) StoreCompiledQuery added in v1.0.0

func (r *Repository) StoreCompiledQuery(cacheKey string, query string, args ...interface{}) error

StoreCompiledQuery 手动写入一条编译查询到缓存。

func (*Repository) StoreCompiledQueryTemplate added in v1.0.0

func (r *Repository) StoreCompiledQueryTemplate(cacheKey string, query string, argCount int) error

StoreCompiledQueryTemplate 手动写入一条查询模板到缓存。

func (*Repository) UnregisterScheduledTask

func (r *Repository) UnregisterScheduledTask(ctx context.Context, taskName string) error

UnregisterScheduledTask 注销定时任务

func (*Repository) WithChangeset added in v1.0.0

func (r *Repository) WithChangeset(ctx context.Context, schema Schema, fn func(*ChangesetExecutor) error) error

WithChangeset 在单个事务内执行一组基于 Changeset 的写操作。 这是业务层推荐的多步写入入口。

type RequiredValidator

type RequiredValidator struct{}

RequiredValidator 必填验证器

func (*RequiredValidator) Validate

func (v *RequiredValidator) Validate(value interface{}) error

type SQLDialect

type SQLDialect interface {
	// 获取方言名称
	Name() string

	// 转义标识符(表名、列名)
	QuoteIdentifier(name string) string

	// 转义字符串值
	QuoteValue(value interface{}) string

	// 返回参数化占位符(? 或 $1 等)
	GetPlaceholder(index int) string

	// 生成 LIMIT/OFFSET 子句
	GenerateLimitOffset(limit *int, offset *int) string

	// 转换条件为 SQL(可选的方言特定优化)
	TranslateCondition(condition Condition, argIndex *int) (string, []interface{}, error)
}

SQLDialect SQL 方言接口 不同的数据库可以实现此接口来提供方言特定的 SQL 生成

type SQLQueryConstructor

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

SQLQueryConstructor SQL 查询构造器 - 底层执行层 实现 QueryConstructor 接口,生成标准 SQL 每个 Adapter 可以通过继承和覆写方法来实现方言特定的 SQL 生成

func NewSQLQueryConstructor

func NewSQLQueryConstructor(schema Schema, dialect SQLDialect) *SQLQueryConstructor

NewSQLQueryConstructor 创建新的 SQL 查询构造器

func NewSQLQueryConstructorWithCompiler added in v1.0.0

func NewSQLQueryConstructorWithCompiler(schema Schema, dialect SQLDialect, compiler QueryCompiler) *SQLQueryConstructor

NewSQLQueryConstructorWithCompiler 使用指定编译器创建查询构造器。 若 compiler 为 nil,则默认使用 BaseSQLCompiler。

func (*SQLQueryConstructor) Build

func (qb *SQLQueryConstructor) Build(ctx context.Context) (string, []interface{}, error)

Build 构建 SQL 查询

func (*SQLQueryConstructor) BuildIR added in v1.0.0

func (qb *SQLQueryConstructor) BuildIR(ctx context.Context) (*QueryIR, error)

BuildIR 构建独立查询 IR(中间表示)。 该方法不会生成最终 SQL/Cypher,便于后续接入多语言编译器。

func (*SQLQueryConstructor) Count added in v1.1.0

func (qb *SQLQueryConstructor) Count(fieldName ...string) QueryConstructor

func (*SQLQueryConstructor) CountWith added in v1.1.0

func (qb *SQLQueryConstructor) CountWith(builder *CountBuilder) QueryConstructor

func (*SQLQueryConstructor) CrossJoin added in v1.0.0

func (qb *SQLQueryConstructor) CrossJoin(table string, alias ...string) QueryConstructor

CrossJoin 添加 CROSS JOIN(可选别名,无 ON 条件)。

func (*SQLQueryConstructor) CrossTableStrategy added in v1.0.0

func (qb *SQLQueryConstructor) CrossTableStrategy(strategy CrossTableStrategy) QueryConstructor

CrossTableStrategy 设置跨表查询策略。

func (*SQLQueryConstructor) CursorPage added in v1.1.1

func (qb *SQLQueryConstructor) CursorPage(field string, direction string, cursorValue interface{}, cursorPrimaryValue interface{}, pageSize int) *SQLQueryConstructor

CursorPage 使用游标分页替代大 OFFSET,要求首个排序字段与游标字段一致。 当排序字段不是主键时,需要同时提供 cursorPrimaryValue 作为稳定 tie-breaker。

func (*SQLQueryConstructor) CustomMode added in v1.1.0

func (qb *SQLQueryConstructor) CustomMode() QueryConstructor

func (*SQLQueryConstructor) FromAlias added in v1.0.0

func (qb *SQLQueryConstructor) FromAlias(alias string) QueryConstructor

FromAlias 为主表设置别名,便于跨表查询中进行字段映射。

func (*SQLQueryConstructor) GetNativeBuilder

func (qb *SQLQueryConstructor) GetNativeBuilder() interface{}

GetNativeBuilder 获取底层查询构造器(返回自身)

func (*SQLQueryConstructor) Join added in v1.0.0

func (qb *SQLQueryConstructor) Join(table, onClause string, alias ...string) QueryConstructor

Join 添加 INNER JOIN。 若 alias 为空,则在 PostgreSQL/SQL Server 下会自动生成别名并采用 AS 语法。

func (*SQLQueryConstructor) JoinWith added in v1.1.0

func (qb *SQLQueryConstructor) JoinWith(builder *JoinBuilder) QueryConstructor

JoinWith 使用 JoinBuilder 进行 Schema 感知的跨表连接。 表名从 builder.schema.TableName() 取得;Filter() 条件以 join alias(或表名)限定后追加到 WHERE。

func (*SQLQueryConstructor) LeftJoin added in v1.0.0

func (qb *SQLQueryConstructor) LeftJoin(table, onClause string, alias ...string) QueryConstructor

LeftJoin 添加 LEFT JOIN。

func (*SQLQueryConstructor) Limit

func (qb *SQLQueryConstructor) Limit(count int) QueryConstructor

Limit 限制行数

func (*SQLQueryConstructor) Offset

func (qb *SQLQueryConstructor) Offset(count int) QueryConstructor

Offset 偏移行数

func (*SQLQueryConstructor) OrderBy

func (qb *SQLQueryConstructor) OrderBy(field string, direction string) QueryConstructor

OrderBy 排序

func (*SQLQueryConstructor) Page added in v1.1.1

func (qb *SQLQueryConstructor) Page(page int, pageSize int) QueryConstructor

Page 按页设置 LIMIT/OFFSET。

func (*SQLQueryConstructor) Paginate added in v1.1.1

func (*SQLQueryConstructor) RightJoin added in v1.0.0

func (qb *SQLQueryConstructor) RightJoin(table, onClause string, alias ...string) QueryConstructor

RightJoin 添加 RIGHT JOIN。

func (*SQLQueryConstructor) Select

func (qb *SQLQueryConstructor) Select(fields ...string) QueryConstructor

Select 选择字段

func (*SQLQueryConstructor) SelectCount added in v1.1.0

func (qb *SQLQueryConstructor) SelectCount(ctx context.Context, repo *Repository) (int64, error)

SelectCount 统计匹配记录数,忽略当前构造器上的分页设置。

func (*SQLQueryConstructor) Upsert added in v1.1.0

func (qb *SQLQueryConstructor) Upsert(ctx context.Context, repo *Repository, cs *Changeset, conflictColumns ...string) (sql.Result, error)

Upsert 基于 Changeset 执行 upsert。 支持方言原生 upsert;不支持时回退到事务模拟(先 UPDATE,后 INSERT)。

func (*SQLQueryConstructor) Where

func (qb *SQLQueryConstructor) Where(condition Condition) QueryConstructor

Where 添加单个条件

func (*SQLQueryConstructor) WhereAll

func (qb *SQLQueryConstructor) WhereAll(conditions ...Condition) QueryConstructor

WhereAll 添加多个 AND 条件

func (*SQLQueryConstructor) WhereAny

func (qb *SQLQueryConstructor) WhereAny(conditions ...Condition) QueryConstructor

WhereAny 添加多个 OR 条件

func (*SQLQueryConstructor) WhereWith added in v1.1.0

func (qb *SQLQueryConstructor) WhereWith(builder *WhereBuilder) QueryConstructor

type SQLServerAdapter

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

SQLServerAdapter SQL Server 数据库适配器

func (*SQLServerAdapter) Begin

func (a *SQLServerAdapter) Begin(ctx context.Context, opts ...interface{}) (Tx, error)

Begin 开始事务

func (*SQLServerAdapter) Close

func (a *SQLServerAdapter) Close() error

Close 关闭数据库连接

func (*SQLServerAdapter) Connect

func (a *SQLServerAdapter) Connect(ctx context.Context, config *Config) error

Connect 连接到 SQL Server 数据库

func (*SQLServerAdapter) Exec

func (a *SQLServerAdapter) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

Exec 执行操作 (INSERT/UPDATE/DELETE)

func (*SQLServerAdapter) GetDatabaseFeatures

func (a *SQLServerAdapter) GetDatabaseFeatures() *DatabaseFeatures

GetDatabaseFeatures 返回 SQL Server 数据库特性

func (*SQLServerAdapter) GetGormDB

func (a *SQLServerAdapter) GetGormDB() *gorm.DB

GetGormDB 获取GORM实例(用于直接访问GORM) Deprecated: Adapter 层不再暴露 GORM 连接。

func (*SQLServerAdapter) GetQueryBuilderProvider

func (a *SQLServerAdapter) GetQueryBuilderProvider() QueryConstructorProvider

GetQueryBuilderProvider 返回查询构造器提供者

func (*SQLServerAdapter) GetQueryFeatures

func (a *SQLServerAdapter) GetQueryFeatures() *QueryFeatures

GetQueryFeatures 返回 SQL Server 的查询特性

func (*SQLServerAdapter) GetRawConn

func (a *SQLServerAdapter) GetRawConn() interface{}

GetRawConn 获取底层连接 (返回 *sql.DB)

func (*SQLServerAdapter) InspectFullTextRuntime added in v1.0.0

func (a *SQLServerAdapter) InspectFullTextRuntime(ctx context.Context) (*FullTextRuntimeCapability, error)

InspectFullTextRuntime 检查 SQL Server Full-Text Search 是否安装。

func (*SQLServerAdapter) InspectJSONRuntime added in v1.0.0

func (a *SQLServerAdapter) InspectJSONRuntime(ctx context.Context) (*JSONRuntimeCapability, error)

InspectJSONRuntime 检查 SQL Server JSON 运行时能力。 说明:SQL Server 的 JSON 函数能力为内建能力(2016+),并非独立插件生态。

func (*SQLServerAdapter) ListScheduledTasks

func (a *SQLServerAdapter) ListScheduledTasks(ctx context.Context) ([]*ScheduledTaskStatus, error)

ListScheduledTasks SQL Server 适配器暂不支持

func (*SQLServerAdapter) Ping

func (a *SQLServerAdapter) Ping(ctx context.Context) error

Ping 测试数据库连接

func (*SQLServerAdapter) Query

func (a *SQLServerAdapter) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

Query 执行查询 (返回多行)

func (*SQLServerAdapter) QueryRow

func (a *SQLServerAdapter) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row

QueryRow 执行查询 (返回单行)

func (*SQLServerAdapter) RegisterScheduledTask

func (a *SQLServerAdapter) RegisterScheduledTask(ctx context.Context, task *ScheduledTaskConfig) error

RegisterScheduledTask SQL Server 适配器支持 SQL Server Agent 方式的定时任务 注意:需要 SQL Server Agent 服务运行,且用户需要相应权限

func (*SQLServerAdapter) UnregisterScheduledTask

func (a *SQLServerAdapter) UnregisterScheduledTask(ctx context.Context, taskName string) error

UnregisterScheduledTask SQL Server 适配器暂不支持

type SQLServerConnectionConfig added in v1.0.0

type SQLServerConnectionConfig struct {
	Host                     string `json:"host,omitempty" yaml:"host,omitempty"`
	Port                     int    `json:"port,omitempty" yaml:"port,omitempty"`
	Username                 string `json:"username,omitempty" yaml:"username,omitempty"`
	Password                 string `json:"password,omitempty" yaml:"password,omitempty"`
	Database                 string `json:"database,omitempty" yaml:"database,omitempty"`
	DSN                      string `json:"dsn,omitempty" yaml:"dsn,omitempty"`
	ManyToManyStrategy       string `json:"many_to_many_strategy,omitempty" yaml:"many_to_many_strategy,omitempty"`             // "direct_join" | "recursive_cte"
	RecursiveCTEDepth        int    `json:"recursive_cte_depth,omitempty" yaml:"recursive_cte_depth,omitempty"`                 // 默认 8
	RecursiveCTEMaxRecursion int    `json:"recursive_cte_max_recursion,omitempty" yaml:"recursive_cte_max_recursion,omitempty"` // 默认 100
}

SQLServerConnectionConfig SQL Server 连接配置。

type SQLServerDialect

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

SQL Server 方言

func NewSQLServerDialect

func NewSQLServerDialect() *SQLServerDialect

func NewSQLServerDialectWithManyToManyStrategy added in v1.1.0

func NewSQLServerDialectWithManyToManyStrategy(strategy string) *SQLServerDialect

func NewSQLServerDialectWithOptions added in v1.1.0

func NewSQLServerDialectWithOptions(strategy string, recursiveCTEDepth int, maxRecursion int) *SQLServerDialect

func (*SQLServerDialect) GenerateLimitOffset

func (d *SQLServerDialect) GenerateLimitOffset(limit *int, offset *int) string

SQL Server 使用 OFFSET...ROWS FETCH...ROWS ONLY 语法

func (*SQLServerDialect) GetPlaceholder

func (d *SQLServerDialect) GetPlaceholder(index int) string

SQL Server 使用 @p1, @p2 形式的参数

func (*SQLServerDialect) Name

func (d *SQLServerDialect) Name() string

func (*SQLServerDialect) QuoteIdentifier

func (d *SQLServerDialect) QuoteIdentifier(name string) string

SQL Server 使用方括号引用标识符

func (*SQLServerDialect) QuoteValue

func (d *SQLServerDialect) QuoteValue(value interface{}) string

func (*SQLServerDialect) SQLManyToManyStrategy added in v1.1.0

func (d *SQLServerDialect) SQLManyToManyStrategy() string

func (*SQLServerDialect) SQLRecursiveCTEDepth added in v1.1.0

func (d *SQLServerDialect) SQLRecursiveCTEDepth() int

func (*SQLServerDialect) SQLRecursiveCTEMaxRecursion added in v1.1.0

func (d *SQLServerDialect) SQLRecursiveCTEMaxRecursion() int

func (*SQLServerDialect) TranslateCondition

func (d *SQLServerDialect) TranslateCondition(condition Condition, argIndex *int) (string, []interface{}, error)

type SQLServerDynamicTableHook added in v1.0.0

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

SQLServerDynamicTableHook SQL Server 动态表钩子实现。 使用原生 Trigger + T-SQL Procedure 方案实现自动建表。

func NewSQLServerDynamicTableHook added in v1.0.0

func NewSQLServerDynamicTableHook(adapter *SQLServerAdapter) *SQLServerDynamicTableHook

NewSQLServerDynamicTableHook 创建 SQL Server 动态表钩子。

func (*SQLServerDynamicTableHook) CreateDynamicTable added in v1.0.0

func (h *SQLServerDynamicTableHook) CreateDynamicTable(ctx context.Context, configName string, params map[string]interface{}) (string, error)

CreateDynamicTable 手动创建动态表。

func (*SQLServerDynamicTableHook) GetDynamicTableConfig added in v1.0.0

func (h *SQLServerDynamicTableHook) GetDynamicTableConfig(ctx context.Context, configName string) (*DynamicTableConfig, error)

GetDynamicTableConfig 获取特定的动态表配置。

func (*SQLServerDynamicTableHook) ListCreatedDynamicTables added in v1.0.0

func (h *SQLServerDynamicTableHook) ListCreatedDynamicTables(ctx context.Context, configName string) ([]string, error)

ListCreatedDynamicTables 获取已创建的动态表列表。

func (*SQLServerDynamicTableHook) ListDynamicTableConfigs added in v1.0.0

func (h *SQLServerDynamicTableHook) ListDynamicTableConfigs(ctx context.Context) ([]*DynamicTableConfig, error)

ListDynamicTableConfigs 列出所有已注册的动态表配置。

func (*SQLServerDynamicTableHook) RegisterDynamicTable added in v1.0.0

func (h *SQLServerDynamicTableHook) RegisterDynamicTable(ctx context.Context, config *DynamicTableConfig) error

RegisterDynamicTable 注册动态表配置。

func (*SQLServerDynamicTableHook) UnregisterDynamicTable added in v1.0.0

func (h *SQLServerDynamicTableHook) UnregisterDynamicTable(ctx context.Context, configName string) error

UnregisterDynamicTable 注销动态表配置。

type SQLServerFactory

type SQLServerFactory struct{}

SQLServerFactory SQL Server 适配器工厂

func (*SQLServerFactory) Create

func (f *SQLServerFactory) Create(config *Config) (Adapter, error)

Create 创建 SQL Server 适配器

func (*SQLServerFactory) Name

func (f *SQLServerFactory) Name() string

Name 返回适配器名称

type SQLServerFeatures added in v1.0.0

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

SQLServerFeatures 提供 SQL Server 特有的高级数据库功能。 通过 GetSQLServerFeatures(adapter) 获取实例,非 SQL Server 返回 false。

示例:

features, ok := db.GetSQLServerFeatures(repo.GetAdapter())
if !ok {
    return errors.New("not SQL Server")
}
rows, err := features.RecursiveQuery("org_tree").
    Anchor("SELECT id, name, parent_id, 0 AS depth FROM departments WHERE parent_id IS NULL").
    Recursive("SELECT d.id, d.name, d.parent_id, t.depth+1 FROM departments d JOIN org_tree t ON d.parent_id = t.id").
    SelectAll().
    MaxRecursion(50).
    Execute(ctx)

func GetSQLServerFeatures added in v1.0.0

func GetSQLServerFeatures(adapter Adapter) (*SQLServerFeatures, bool)

GetSQLServerFeatures 从 Adapter 中提取 SQLServerFeatures。 若传入的不是 *SQLServerAdapter,则 ok == false。

func (*SQLServerFeatures) MergeInto added in v1.0.0

func (f *SQLServerFeatures) MergeInto(targetTable string) *SQLServerMergeBuilder

MergeInto 开始构建 SQL Server MERGE 语句(常用于 Upsert / 同步)。

示例:

err := features.MergeInto("dbo.users").
	Using("(SELECT 1 AS id, N'Alice' AS name) AS s").
	On("t.[id] = s.[id]").
	WhenMatchedUpdate("t.[name] = s.[name]").
	WhenNotMatchedInsert([]string{"id", "name"}, "s.[id], s.[name]").
	Execute(ctx)

func (*SQLServerFeatures) RecursiveQuery added in v1.0.0

func (f *SQLServerFeatures) RecursiveQuery(cteName string) *RecursiveQueryBuilder

RecursiveQuery 开始构建一个递归 CTE 查询(WITH ... UNION ALL ...)。 cteName 是 CTE 的名称,在 T-SQL 中作为临时视图引用。

func (*SQLServerFeatures) TempTable added in v1.0.0

TempTable 开始构建 SQL Server 临时表(默认局部临时表 #name)。

对跨语句/跨连接场景,建议使用 Global() 生成全局临时表 ##name。

func (*SQLServerFeatures) View added in v1.0.0

View 开始构建 SQL Server 视图语句。 默认使用 CREATE OR ALTER VIEW,便于幂等更新。

type SQLServerMergeBuilder added in v1.0.0

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

SQLServerMergeBuilder 构建 SQL Server MERGE 语句。

func (*SQLServerMergeBuilder) Args added in v1.0.0

func (b *SQLServerMergeBuilder) Args(args ...interface{}) *SQLServerMergeBuilder

Args 设置 Execute 时传递给 Query/Exec 的参数。

func (*SQLServerMergeBuilder) Build added in v1.0.0

func (b *SQLServerMergeBuilder) Build() (string, error)

Build 生成完整 MERGE T-SQL。

func (*SQLServerMergeBuilder) DisableHoldLock added in v1.0.0

func (b *SQLServerMergeBuilder) DisableHoldLock() *SQLServerMergeBuilder

DisableHoldLock 关闭 WITH (HOLDLOCK) 提示。

func (*SQLServerMergeBuilder) Execute added in v1.0.0

func (b *SQLServerMergeBuilder) Execute(ctx context.Context) (sql.Result, error)

Execute 执行 MERGE(不返回 OUTPUT 结果)。

func (*SQLServerMergeBuilder) On added in v1.0.0

On 设置目标与源的匹配条件。

func (*SQLServerMergeBuilder) Output added in v1.0.0

func (b *SQLServerMergeBuilder) Output(outputExpr string) *SQLServerMergeBuilder

Output 设置 OUTPUT 子句(例如 "$action, inserted.id")。

func (*SQLServerMergeBuilder) Query added in v1.0.0

func (b *SQLServerMergeBuilder) Query(ctx context.Context) (*sql.Rows, error)

Query 执行 MERGE 并返回输出结果(用于 OUTPUT 子句场景)。

func (*SQLServerMergeBuilder) SourceAlias added in v1.0.0

func (b *SQLServerMergeBuilder) SourceAlias(alias string) *SQLServerMergeBuilder

SourceAlias 设置源别名(默认 s)。

func (*SQLServerMergeBuilder) TargetAlias added in v1.0.0

func (b *SQLServerMergeBuilder) TargetAlias(alias string) *SQLServerMergeBuilder

TargetAlias 设置目标表别名(默认 t)。

func (*SQLServerMergeBuilder) Using added in v1.0.0

func (b *SQLServerMergeBuilder) Using(sourceSQL string) *SQLServerMergeBuilder

Using 设置 MERGE USING 源(通常是子查询 + 别名)。 例如:"(SELECT ... ) AS s"。

func (*SQLServerMergeBuilder) WhenMatchedUpdate added in v1.0.0

func (b *SQLServerMergeBuilder) WhenMatchedUpdate(setClause string) *SQLServerMergeBuilder

WhenMatchedUpdate 设置匹配后 UPDATE 子句(仅 SET 部分)。 例如:"t.[name] = s.[name], t.[updated_at] = SYSUTCDATETIME()"。

func (*SQLServerMergeBuilder) WhenNotMatchedBySourceDelete added in v1.0.0

func (b *SQLServerMergeBuilder) WhenNotMatchedBySourceDelete() *SQLServerMergeBuilder

WhenNotMatchedBySourceDelete 设置源不存在时删除目标数据。

func (*SQLServerMergeBuilder) WhenNotMatchedInsert added in v1.0.0

func (b *SQLServerMergeBuilder) WhenNotMatchedInsert(columns []string, valuesExpr string) *SQLServerMergeBuilder

WhenNotMatchedInsert 设置未匹配时 INSERT 子句。 columns 是目标列列表,valuesExpr 是 VALUES(...) 内表达式。

type SQLServerTempTableBuilder added in v1.0.0

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

SQLServerTempTableBuilder 构建 SQL Server 临时表语句。 默认创建局部临时表(#name),可通过 Global() 切换为全局临时表(##name)。

func (*SQLServerTempTableBuilder) Args added in v1.0.0

func (b *SQLServerTempTableBuilder) Args(args ...interface{}) *SQLServerTempTableBuilder

Args 设置 Execute 时参数。

func (*SQLServerTempTableBuilder) AsSelect added in v1.0.0

AsSelect 使用 SELECT ... INTO 临时表(自动忽略 Column 定义)。

func (*SQLServerTempTableBuilder) BuildCreate added in v1.0.0

func (b *SQLServerTempTableBuilder) BuildCreate() (string, error)

BuildCreate 生成创建临时表 SQL。

func (*SQLServerTempTableBuilder) BuildDrop added in v1.0.0

func (b *SQLServerTempTableBuilder) BuildDrop() string

BuildDrop 生成删除临时表 SQL。

func (*SQLServerTempTableBuilder) Column added in v1.0.0

func (b *SQLServerTempTableBuilder) Column(name, dataType string, nullable bool) *SQLServerTempTableBuilder

Column 添加列定义。

func (*SQLServerTempTableBuilder) Drop added in v1.0.0

Drop 执行删除临时表 SQL。

func (*SQLServerTempTableBuilder) DropIfExists added in v1.0.0

DropIfExists 创建前先执行 IF OBJECT_ID(tempdb..) IS NOT NULL DROP TABLE。

func (*SQLServerTempTableBuilder) ExecuteCreate added in v1.0.0

func (b *SQLServerTempTableBuilder) ExecuteCreate(ctx context.Context) error

ExecuteCreate 执行创建临时表 SQL。

func (*SQLServerTempTableBuilder) Global added in v1.0.0

Global 使用全局临时表(##name)。

func (*SQLServerTempTableBuilder) KeepIfExists added in v1.0.0

KeepIfExists 保留已存在临时表,不自动 Drop。

func (*SQLServerTempTableBuilder) Local added in v1.0.0

Local 使用局部临时表(#name,默认)。

func (*SQLServerTempTableBuilder) TempTableName added in v1.0.0

func (b *SQLServerTempTableBuilder) TempTableName() string

TempTableName 返回实际临时表名(#xxx 或 ##xxx)。

type SQLServerTempTableColumn added in v1.0.0

type SQLServerTempTableColumn struct {
	Name     string
	Type     string
	Nullable bool
}

type SQLServerTx

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

SQLServerTx SQL Server 事务实现

func (*SQLServerTx) Commit

func (t *SQLServerTx) Commit(ctx context.Context) error

Commit 提交事务

func (*SQLServerTx) Exec

func (t *SQLServerTx) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

Exec 在事务中执行

func (*SQLServerTx) Query

func (t *SQLServerTx) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

Query 在事务中查询

func (*SQLServerTx) QueryRow

func (t *SQLServerTx) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row

QueryRow 在事务中查询单行

func (*SQLServerTx) Rollback

func (t *SQLServerTx) Rollback(ctx context.Context) error

Rollback 回滚事务

type SQLServerViewBuilder added in v1.0.0

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

SQLServerViewBuilder 构建 SQL Server VIEW 语句。

func (*SQLServerViewBuilder) Args added in v1.0.0

func (b *SQLServerViewBuilder) Args(args ...interface{}) *SQLServerViewBuilder

Args 设置创建视图 SQL 的参数(一般较少使用)。

func (*SQLServerViewBuilder) As added in v1.0.0

As 设置视图查询定义(AS 后的 SELECT 语句)。

func (*SQLServerViewBuilder) BuildCreate added in v1.0.0

func (b *SQLServerViewBuilder) BuildCreate() (string, error)

BuildCreate 生成 CREATE/ALTER VIEW SQL。

func (*SQLServerViewBuilder) BuildDrop added in v1.0.0

func (b *SQLServerViewBuilder) BuildDrop() (string, error)

BuildDrop 生成 DROP VIEW SQL。

func (*SQLServerViewBuilder) CreateOnly added in v1.0.0

func (b *SQLServerViewBuilder) CreateOnly() *SQLServerViewBuilder

CreateOnly 使用 CREATE VIEW(若视图已存在会报错)。

func (*SQLServerViewBuilder) CreateOrAlter added in v1.0.0

func (b *SQLServerViewBuilder) CreateOrAlter() *SQLServerViewBuilder

CreateOrAlter 使用 CREATE OR ALTER VIEW(默认)。

func (*SQLServerViewBuilder) Drop added in v1.0.0

Drop 执行 DROP VIEW。

func (*SQLServerViewBuilder) DropIfExists added in v1.0.0

func (b *SQLServerViewBuilder) DropIfExists() *SQLServerViewBuilder

DropIfExists 删除视图时使用 IF EXISTS(默认 true)。

func (*SQLServerViewBuilder) DropStrict added in v1.0.0

func (b *SQLServerViewBuilder) DropStrict() *SQLServerViewBuilder

DropStrict 删除视图时不使用 IF EXISTS。

func (*SQLServerViewBuilder) ExecuteCreate added in v1.0.0

func (b *SQLServerViewBuilder) ExecuteCreate(ctx context.Context) error

ExecuteCreate 执行 CREATE/ALTER VIEW。

func (*SQLServerViewBuilder) WithCheckOption added in v1.0.0

func (b *SQLServerViewBuilder) WithCheckOption() *SQLServerViewBuilder

WithCheckOption 在视图尾部追加 WITH CHECK OPTION。

type SQLiteAdapter

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

SQLiteAdapter SQLite 数据库适配器

func NewSQLiteAdapter

func NewSQLiteAdapter(config *Config) (*SQLiteAdapter, error)

NewSQLiteAdapter 创建 SQLite 适配器

func (*SQLiteAdapter) Begin

func (a *SQLiteAdapter) Begin(ctx context.Context, opts ...interface{}) (Tx, error)

Begin 开始事务

func (*SQLiteAdapter) Close

func (a *SQLiteAdapter) Close() error

Close 关闭数据库连接

func (*SQLiteAdapter) Connect

func (a *SQLiteAdapter) Connect(ctx context.Context, config *Config) error

Connect 连接到 SQLite 数据库

func (*SQLiteAdapter) Exec

func (a *SQLiteAdapter) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

Exec 执行操作 (INSERT/UPDATE/DELETE)

func (*SQLiteAdapter) GetDatabaseFeatures

func (a *SQLiteAdapter) GetDatabaseFeatures() *DatabaseFeatures

GetDatabaseFeatures 返回 SQLite 数据库特性

func (*SQLiteAdapter) GetGormDB

func (a *SQLiteAdapter) GetGormDB() *gorm.DB

GetGormDB 获取GORM实例(用于直接访问GORM) Deprecated: Adapter 层不再暴露 GORM 连接。

func (*SQLiteAdapter) GetQueryBuilderProvider

func (a *SQLiteAdapter) GetQueryBuilderProvider() QueryConstructorProvider

GetQueryBuilderProvider 返回查询构造器提供者

func (*SQLiteAdapter) GetQueryFeatures

func (a *SQLiteAdapter) GetQueryFeatures() *QueryFeatures

GetQueryFeatures 返回 SQLite 的查询特性

func (*SQLiteAdapter) GetRawConn

func (a *SQLiteAdapter) GetRawConn() interface{}

GetRawConn 获取底层连接 (返回 *sql.DB)

func (*SQLiteAdapter) InspectFullTextRuntime added in v1.0.0

func (a *SQLiteAdapter) InspectFullTextRuntime(ctx context.Context) (*FullTextRuntimeCapability, error)

InspectFullTextRuntime 检查 SQLite 是否编译启用了 FTS3/4/5。

func (*SQLiteAdapter) ListScheduledTasks

func (a *SQLiteAdapter) ListScheduledTasks(ctx context.Context) ([]*ScheduledTaskStatus, error)

ListScheduledTasks SQLite 适配器暂不支持

func (*SQLiteAdapter) Ping

func (a *SQLiteAdapter) Ping(ctx context.Context) error

Ping 测试数据库连接

func (*SQLiteAdapter) Query

func (a *SQLiteAdapter) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

Query 执行查询 (返回多行)

func (*SQLiteAdapter) QueryRow

func (a *SQLiteAdapter) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row

QueryRow 执行查询 (返回单行)

func (*SQLiteAdapter) RegisterCommonSQLiteFunctions

func (a *SQLiteAdapter) RegisterCommonSQLiteFunctions() error

RegisterCommonSQLiteFunctions 注册常用的 SQLite 自定义函数

func (*SQLiteAdapter) RegisterSQLiteAggregateFunction

func (a *SQLiteAdapter) RegisterSQLiteAggregateFunction(fn *SQLiteAggregateFunction) error

RegisterSQLiteAggregateFunction 注册自定义聚合函数

func (*SQLiteAdapter) RegisterSQLiteFunction

func (a *SQLiteAdapter) RegisterSQLiteFunction(fn *SQLiteCustomFunction) error

RegisterSQLiteFunction 注册 SQLite 自定义函数 这允许在 SQLite 中使用 Go 编写的函数,性能优于应用层处理

注意:此功能需要在连接时通过 sql.OpenDB 使用自定义连接器 由于 GORM 的封装,当前实现有限制,建议直接使用 sql.DB

func (*SQLiteAdapter) RegisterScheduledTask

func (a *SQLiteAdapter) RegisterScheduledTask(ctx context.Context, task *ScheduledTaskConfig) error

RegisterScheduledTask SQLite 适配器暂不支持通过触发器方式实现定时任务 建议在应用层使用 cron 库处理定时任务

func (*SQLiteAdapter) UnregisterScheduledTask

func (a *SQLiteAdapter) UnregisterScheduledTask(ctx context.Context, taskName string) error

UnregisterScheduledTask SQLite 适配器暂不支持

type SQLiteAggregateFunction

type SQLiteAggregateFunction struct {
	Name    string
	NumArgs int
	Step    func(ctx interface{}, args ...interface{}) (interface{}, error) // 每行调用
	Final   func(ctx interface{}) (interface{}, error)                      // 最终结果
}

SQLiteAggregateFunction 自定义聚合函数定义

type SQLiteConnectionConfig added in v1.0.0

type SQLiteConnectionConfig struct {
	Path string `json:"path,omitempty" yaml:"path,omitempty"`
	DSN  string `json:"dsn,omitempty" yaml:"dsn,omitempty"`
}

SQLiteConnectionConfig SQLite 连接配置。

type SQLiteCustomFunction

type SQLiteCustomFunction struct {
	Name    string                                         // 函数名称
	NumArgs int                                            // 参数数量 (-1 表示可变参数)
	Pure    bool                                           // 是否为纯函数(无副作用)
	Impl    func(args ...interface{}) (interface{}, error) // 函数实现
}

SQLiteCustomFunction 自定义函数定义

type SQLiteDialect

type SQLiteDialect struct {
	DefaultSQLDialect
}

SQLite 方言

func NewSQLiteDialect

func NewSQLiteDialect() *SQLiteDialect

type SQLiteDynamicTableHook

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

SQLiteDynamicTableHook SQLite 动态表钩子实现 使用 GORM 的 hook 机制实现基于触发的动态建表

func NewSQLiteDynamicTableHook

func NewSQLiteDynamicTableHook(adapter *SQLiteAdapter) *SQLiteDynamicTableHook

NewSQLiteDynamicTableHook 创建 SQLite 动态表钩子

func (*SQLiteDynamicTableHook) CreateDynamicTable

func (h *SQLiteDynamicTableHook) CreateDynamicTable(ctx context.Context, configName string, params map[string]interface{}) (string, error)

CreateDynamicTable 手动创建动态表 返回实际创建的表名称

func (*SQLiteDynamicTableHook) GetDynamicTableConfig

func (h *SQLiteDynamicTableHook) GetDynamicTableConfig(ctx context.Context, configName string) (*DynamicTableConfig, error)

GetDynamicTableConfig 获取特定的动态表配置

func (*SQLiteDynamicTableHook) ListCreatedDynamicTables

func (h *SQLiteDynamicTableHook) ListCreatedDynamicTables(ctx context.Context, configName string) ([]string, error)

ListCreatedDynamicTables 获取已创建的动态表列表

func (*SQLiteDynamicTableHook) ListDynamicTableConfigs

func (h *SQLiteDynamicTableHook) ListDynamicTableConfigs(ctx context.Context) ([]*DynamicTableConfig, error)

ListDynamicTableConfigs 列出所有已注册的动态表配置

func (*SQLiteDynamicTableHook) RegisterDynamicTable

func (h *SQLiteDynamicTableHook) RegisterDynamicTable(ctx context.Context, config *DynamicTableConfig) error

RegisterDynamicTable 注册动态表配置 对于自动策略,在 GORM hook 中注册事件处理

func (*SQLiteDynamicTableHook) UnregisterDynamicTable

func (h *SQLiteDynamicTableHook) UnregisterDynamicTable(ctx context.Context, configName string) error

UnregisterDynamicTable 注销动态表配置

type SQLiteTx

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

SQLiteTx SQLite 事务实现

func (*SQLiteTx) Commit

func (t *SQLiteTx) Commit(ctx context.Context) error

Commit 提交事务

func (*SQLiteTx) Exec

func (t *SQLiteTx) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

Exec 在事务中执行

func (*SQLiteTx) Query

func (t *SQLiteTx) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

Query 在事务中查询

func (*SQLiteTx) QueryRow

func (t *SQLiteTx) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row

QueryRow 在事务中查询单行

func (*SQLiteTx) Rollback

func (t *SQLiteTx) Rollback(ctx context.Context) error

Rollback 回滚事务

type ScheduledTaskConfig

type ScheduledTaskConfig struct {
	// 任务的唯一标识符(如 "monthly_page_logs")
	Name string

	// 任务类型
	Type ScheduledTaskType

	// 任务的 Cron 表达式(如 "0 0 1 * *" 表示每月1号0点)
	// 某些数据库实现可能不使用此字段
	CronExpression string

	// 任务特定的配置参数,根据任务类型而定
	// 对于 TaskTypeMonthlyTableCreation,应包含:
	//   - tableName: string - 表名前缀
	//   - monthFormat: string - 月份格式(如 "2006_01")
	//   - fieldDefinitions: string - 表字段定义(SQL DDL)
	Config map[string]interface{}

	// 任务描述
	Description string

	// 是否启用此任务
	Enabled bool
}

ScheduledTaskConfig 定时任务配置 这个结构体定义了要执行的定时任务的参数,不同的数据库适配器 可以根据不同的实现方式(如 PostgreSQL 触发器、应用层 cron)来处理

func (*ScheduledTaskConfig) GetMonthlyTableConfig

func (c *ScheduledTaskConfig) GetMonthlyTableConfig() map[string]interface{}

GetMonthlyTableConfig 便捷方法:获取按月创建表的配置

func (*ScheduledTaskConfig) Validate

func (c *ScheduledTaskConfig) Validate() error

Validate 验证任务配置的有效性

type ScheduledTaskEventListener

type ScheduledTaskEventListener interface {
	OnTaskRegistered(ctx context.Context, config *ScheduledTaskConfig) error
	OnTaskUnregistered(ctx context.Context, taskName string) error
	OnTaskExecutionStarted(ctx context.Context, taskName string) error
	OnTaskExecutionCompleted(ctx context.Context, taskName string, err error) error
}

ScheduledTaskEventListener 定时任务事件监听器接口 用于监听定时任务的生命周期事件

type ScheduledTaskExecutor

type ScheduledTaskExecutor interface {
	// Execute 执行定时任务
	// taskName: 任务名称
	// config: 完整的任务配置
	Execute(ctx context.Context, taskName string, config *ScheduledTaskConfig) error
}

ScheduledTaskExecutor 定时任务执行器接口 由应用层实现,用于执行不同类型的定时任务

type ScheduledTaskStatus

type ScheduledTaskStatus struct {
	// 任务名称
	Name string

	// 任务类型
	Type ScheduledTaskType

	// 是否正在运行
	Running bool

	// 上次执行时间(Unix 时间戳)
	LastExecutedAt int64

	// 下次执行时间(Unix 时间戳,如果适用)
	NextExecutedAt int64

	// 任务创建者信息(可选)
	CreatedAt int64

	// 额外的状态信息
	Info map[string]interface{}
}

ScheduledTaskStatus 定时任务执行状态

type ScheduledTaskType

type ScheduledTaskType string

ScheduledTaskType 定时任务类型枚举

const (
	// TaskTypeMonthlyTableCreation 按月自动创建表的任务
	TaskTypeMonthlyTableCreation ScheduledTaskType = "monthly_table_creation"
)

type Schema

type Schema interface {
	// 获取模式名称(表名)
	TableName() string

	// 获取所有字段
	Fields() []*Field

	// 获取字段
	GetField(name string) *Field

	// 获取主键字段
	PrimaryKeyField() *Field
}

Schema 定义数据模式接口 (参考 Ecto.Schema)

type SchemaMigration

type SchemaMigration struct {
	*BaseMigration
	// contains filtered or unexported fields
}

SchemaMigration 基于 Schema 的迁移

func NewSchemaMigration

func NewSchemaMigration(version, description string) *SchemaMigration

NewSchemaMigration 创建基于 Schema 的迁移

func (*SchemaMigration) CreateTable

func (m *SchemaMigration) CreateTable(schema Schema) *SchemaMigration

CreateTable 添加要创建的表

func (*SchemaMigration) Down

func (m *SchemaMigration) Down(ctx context.Context, repo *Repository) error

Down 回滚迁移

func (*SchemaMigration) DropTable

func (m *SchemaMigration) DropTable(schema Schema) *SchemaMigration

DropTable 添加要删除的表

func (*SchemaMigration) Up

func (m *SchemaMigration) Up(ctx context.Context, repo *Repository) error

Up 执行迁移

type SchemaRegistry

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

SchemaRegistry Schema 注册表,便于查找和管理多个 Schema

func NewSchemaRegistry

func NewSchemaRegistry() *SchemaRegistry

NewSchemaRegistry 创建空的 Schema 注册表

func (*SchemaRegistry) Get

func (r *SchemaRegistry) Get(name string) Schema

Get 获取指定名称的 Schema

func (*SchemaRegistry) GetAllSchemaNames

func (r *SchemaRegistry) GetAllSchemaNames() []string

GetAllSchemaNames 获取所有已注册的 Schema 名称

func (*SchemaRegistry) Register

func (r *SchemaRegistry) Register(name string, schema Schema)

Register 注册一个 Schema

type SchemaRelation added in v1.1.0

type SchemaRelation struct {
	Type         RelationType
	TargetSchema Schema
	Name         string // 关系名称(适配器可据此映射关系类型/边类型)
	ForeignKey   string // 持有 FK 的一侧字段名
	OriginKey    string // 被引用的一侧字段名(通常是 PK)
	Through      *RelationThrough
	Reversible   bool // 一对一可逆标记(或显式声明允许反向路径优化)
	// contains filtered or unexported fields
}

SchemaRelation 声明两个 Schema 之间的关系。

字段语义:

  • HasMany / HasOne:FK 在目标 Schema 侧;ForeignKey 是目标侧字段,OriginKey 是本侧字段(通常是 PK)。
  • BelongsTo:FK 在本 Schema 侧;ForeignKey 是本侧字段,OriginKey 是目标侧字段(通常是 PK)。

适配器行为:

  • SQL:自然使用 FK 约束;关系声明补充语义推断。
  • Neo4j:ForeignKey/OriginKey 是逻辑字段,关系以边(edge)存储;不物化为节点属性。
  • MongoDB:适配器根据 ForeignKey/OriginKey 生成 $lookup 管道;字段是否物化由适配器自决。

func (*SchemaRelation) Semantic added in v1.1.0

func (r *SchemaRelation) Semantic() JoinSemantic

Semantic 根据关系类型和显式覆盖推断 JoinSemantic。

func (*SchemaRelation) SemanticFromSource added in v1.1.0

func (r *SchemaRelation) SemanticFromSource() JoinSemantic

SemanticFromSource 从"源"的视角推断语义: 当 source 连接到 join Schema,而 join Schema 声明了指向 source 的关系时使用。 规则:join BelongsTo source → source 视角为 optional(source 可能有 0 个 join)

join HasMany/HasOne source → source 视角为 required(source 是 join 的父实体,join 必有 FK)

type SchemaRelationBuilder added in v1.1.0

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

SchemaRelationBuilder 关系声明的流式构造器,通过 HasMany/HasOne/BelongsTo 创建。

func (*SchemaRelationBuilder) Named added in v1.1.0

Named 为关系声明一个语义名称。 适配器可将其映射为底层关系类型(例如 Neo4j 边类型)。

func (*SchemaRelationBuilder) Optional added in v1.1.0

Optional 显式覆盖为 optional 语义(不论关系类型默认值)。

func (*SchemaRelationBuilder) Over added in v1.1.0

func (b *SchemaRelationBuilder) Over(foreignKey, originKey string) *SchemaRelationBuilder

Over 声明关联字段。 foreignKey 是持有 FK 的一侧字段名;originKey 是被引用的一侧字段名(通常是 PK)。 HasMany/HasOne:foreignKey 在目标侧,originKey 在本侧。 BelongsTo:foreignKey 在本侧,originKey 在目标侧。

func (*SchemaRelationBuilder) Relation added in v1.1.0

func (b *SchemaRelationBuilder) Relation() *SchemaRelation

Relation 返回构建好的 SchemaRelation(主要用于测试断言)。

func (*SchemaRelationBuilder) Required added in v1.1.0

Required 显式覆盖为 required 语义(不论关系类型默认值)。

func (*SchemaRelationBuilder) Reversible added in v1.1.0

func (b *SchemaRelationBuilder) Reversible(enabled bool) *SchemaRelationBuilder

Reversible 标记该关系允许反向路径优化(典型用于一对一)。

func (*SchemaRelationBuilder) Through added in v1.1.0

func (b *SchemaRelationBuilder) Through(through Schema, sourceKey, targetKey string) *SchemaRelationBuilder

Through 声明多对多关系使用的中间关系(中间表/集合/边)。 sourceKey 表示 source -> through 的连接键,targetKey 表示 through -> target 的连接键。

type SchemaRelationshipBuilder

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

SchemaRelationshipBuilder Schema 中的关系构建

func NewSchemaRelationshipBuilder

func NewSchemaRelationshipBuilder(schema *BaseSchema) *SchemaRelationshipBuilder

NewSchemaRelationshipBuilder 创建关系构建器

func (*SchemaRelationshipBuilder) BelongsTo

func (b *SchemaRelationshipBuilder) BelongsTo(name string, toSchema Schema, foreignKey, primaryKey string) *SchemaRelationshipBuilder

BelongsTo 定义多对一关系(反向一对多)

func (*SchemaRelationshipBuilder) GetRelationships

func (b *SchemaRelationshipBuilder) GetRelationships() []*Relationship

GetRelationships 获取所有关系

func (*SchemaRelationshipBuilder) HasAndBelongsToMany

func (b *SchemaRelationshipBuilder) HasAndBelongsToMany(
	name string,
	toSchema Schema,
	joinTableName string,
	fromForeignKey string,
	toForeignKey string,
) *SchemaRelationshipBuilder

HasAndBelongsToMany 定义多对多关系

func (*SchemaRelationshipBuilder) HasMany

func (b *SchemaRelationshipBuilder) HasMany(name string, toSchema Schema, foreignKey, primaryKey string) *SchemaRelationshipBuilder

HasMany 定义一对多关系

func (*SchemaRelationshipBuilder) HasOne

func (b *SchemaRelationshipBuilder) HasOne(name string, toSchema Schema, foreignKey, primaryKey string) *SchemaRelationshipBuilder

HasOne 定义一对一关系

type ShardingRiskLevel added in v1.0.0

type ShardingRiskLevel string

ShardingRiskLevel 分表稳定性风险等级。

const (
	ShardingRiskLow    ShardingRiskLevel = "low"
	ShardingRiskMedium ShardingRiskLevel = "medium"
	ShardingRiskHigh   ShardingRiskLevel = "high"
)

type ShardingStabilityReport added in v1.0.0

type ShardingStabilityReport struct {
	TemplateKind    ShardingTemplateKind
	SampleCount     int
	UniqueShards    []string
	Deterministic   bool
	ShardLoads      map[string]int
	HotShards       []string
	Recommendations []string
	RiskLevel       ShardingRiskLevel
	Errors          []string
	Warnings        []string
}

ShardingStabilityReport 分表稳定性报告。

func (*ShardingStabilityReport) CanRelease added in v1.0.0

func (r *ShardingStabilityReport) CanRelease() bool

CanRelease 判断该分表策略是否满足发布门禁。 规则: - 存在错误 -> 不可发布 - RiskLevel == high -> 不可发布 - 其他情况可发布(包含 medium,建议人工确认)

func (*ShardingStabilityReport) ReleaseBlockReasons added in v1.0.0

func (r *ShardingStabilityReport) ReleaseBlockReasons() []string

ReleaseBlockReasons 返回阻断发布的原因列表。

type ShardingStabilityTool added in v1.0.0

type ShardingStabilityTool struct{}

ShardingStabilityTool 分表稳定性检查工具。

func NewShardingStabilityTool added in v1.0.0

func NewShardingStabilityTool() *ShardingStabilityTool

NewShardingStabilityTool 创建分表稳定性检查工具。

func (*ShardingStabilityTool) ValidateShardNaming added in v1.0.0

func (t *ShardingStabilityTool) ValidateShardNaming(baseTableName string, shardIDs []string) []error

ValidateShardNaming 检查分表命名稳定性,确保生成的表名可预测且只包含安全字符。

func (*ShardingStabilityTool) ValidateTemplate added in v1.0.0

func (t *ShardingStabilityTool) ValidateTemplate(template *AutoShardingTemplate, samples []map[string]interface{}, maxShards int) *ShardingStabilityReport

ValidateTemplate 使用样本数据验证分表模板的稳定性。

type ShardingTemplateKind added in v1.0.0

type ShardingTemplateKind string

ShardingTemplateKind 分表模板类型。

const (
	ShardingByDataScale ShardingTemplateKind = "data_scale"
	ShardingByDate      ShardingTemplateKind = "date"
	ShardingByRegion    ShardingTemplateKind = "region"
)

type SimpleCondition

type SimpleCondition struct {
	Field    string
	Operator string // "eq", "ne", "gt", "lt", "gte", "lte", "in", "like", "between", "full_text"
	Value    interface{}
}

SimpleCondition 简单条件(字段 操作符 值)

func (*SimpleCondition) Translate

func (c *SimpleCondition) Translate(translator ConditionTranslator) (string, []interface{}, error)

func (*SimpleCondition) Type

func (c *SimpleCondition) Type() string

type StartupCapabilityCheck added in v1.0.0

type StartupCapabilityCheck struct {
	Name               string `json:"name"`
	EffectiveMode      string `json:"effective_mode"`
	Required           bool   `json:"required"`
	Supported          bool   `json:"supported"`
	InspectorAvailable bool   `json:"inspector_available"`
	Status             string `json:"status"`
	Notes              string `json:"notes,omitempty"`
	Error              string `json:"error,omitempty"`
}

StartupCapabilityCheck 单项能力检查结果。

type StartupCapabilityConfig added in v1.0.0

type StartupCapabilityConfig struct {
	// 模式:strict | lenient(默认 lenient)
	Mode string `json:"mode" yaml:"mode"`

	// 按能力覆盖模式(strict | lenient)。
	// 可用于“全局 lenient,但对 json_runtime 强制 strict”。
	CapabilityModes map[string]string `json:"capability_modes,omitempty" yaml:"capability_modes,omitempty"`

	// 需要检查的能力名;为空时默认检查 json_runtime 和 full_text_runtime。
	Inspect []string `json:"inspect,omitempty" yaml:"inspect,omitempty"`

	// 必须满足的能力名(strict 模式下不满足将失败)。
	Required []string `json:"required,omitempty" yaml:"required,omitempty"`
}

StartupCapabilityConfig 启动期能力体检配置。

type StartupCapabilityReport added in v1.0.0

type StartupCapabilityReport struct {
	Adapter     string                   `json:"adapter"`
	Mode        string                   `json:"mode"`
	GeneratedAt string                   `json:"generated_at"`
	Checks      []StartupCapabilityCheck `json:"checks"`
}

StartupCapabilityReport 启动体检报告。

type TTLIndexInfo added in v1.0.0

type TTLIndexInfo struct {
	// Name 索引名称(MongoDB 自动生成或指定)
	Name string
	// Field 建立 TTL 索引的字段名
	Field string
	// ExpireAfter 文档字段时间到达后再延迟多久删除(0 表示精准到期即删)
	ExpireAfter time.Duration
}

TTLIndexInfo 描述一个 TTL 索引的元信息。

type TableConstraint added in v1.0.0

type TableConstraint struct {
	Name   string
	Kind   ConstraintKind
	Fields []string
	// 外键专属字段(Kind == ConstraintForeignKey 时有效)
	RefTable  string   // 被引用表名
	RefFields []string // 被引用列名(顺序与 Fields 对应)
	OnDelete  string   // "CASCADE" | "SET NULL" | "RESTRICT" | "NO ACTION" | ""
	OnUpdate  string   // "CASCADE" | "SET NULL" | "RESTRICT" | "NO ACTION" | ""
	// Neo4jRelType 可选:在 Neo4j 中对应的关系类型(如 "FOLLOWS"、"OWNS")。
	// 仅当 Kind == ConstraintForeignKey 时有效。
	// 空时由 Neo4j 编译器根据约束名推断(去除 "fk_"/"rel_" 等常见前缀后转大写)。
	Neo4jRelType string
	// 可选:外键热点查询视图声明(仅当 Kind == ConstraintForeignKey 时有意义)
	ViewHint *ViewHint
}

TableConstraint 表级约束定义(用于复合主键、复合唯一约束、复合外键等)

type Transformer

type Transformer interface {
	// 转换值
	Transform(value interface{}) (interface{}, error)
}

Transformer 转换器接口

type TrimTransformer

type TrimTransformer struct{}

TrimTransformer 字符串修剪转换器

func (*TrimTransformer) Transform

func (t *TrimTransformer) Transform(value interface{}) (interface{}, error)

type Tx

type Tx interface {
	Commit(ctx context.Context) error
	Rollback(ctx context.Context) error

	// 事务中的查询和执行
	Query(ctx context.Context, sql string, args ...interface{}) (*sql.Rows, error)
	QueryRow(ctx context.Context, sql string, args ...interface{}) *sql.Row
	Exec(ctx context.Context, sql string, args ...interface{}) (sql.Result, error)
}

Tx 定义事务接口

type TypeConversionError

type TypeConversionError struct {
	From string
	To   string
}

TypeConversionError 类型转换错误

func (*TypeConversionError) Error

func (e *TypeConversionError) Error() string

type URLValidator added in v1.0.0

type URLValidator struct {
	Locale string
}

URLValidator URL 格式验证器(http/https) 它是 RegexValidator 的特化封装。

func NewURLValidatorForLocale added in v1.0.0

func NewURLValidatorForLocale(locale string) *URLValidator

func (*URLValidator) Validate added in v1.0.0

func (v *URLValidator) Validate(value interface{}) error

func (*URLValidator) ValidateWithLocale added in v1.0.0

func (v *URLValidator) ValidateWithLocale(value interface{}, locale string) error

type UniqueValidator

type UniqueValidator struct {
	Schema Schema
	Field  string
}

UniqueValidator 唯一性验证器

func (*UniqueValidator) Validate

func (v *UniqueValidator) Validate(value interface{}) error

type ValidationConfig added in v1.0.0

type ValidationConfig struct {
	// 默认 locale(例如: zh-CN / en-US)
	DefaultLocale string `json:"default_locale" yaml:"default_locale"`

	// 启用的 locale 列表;支持同时启用多个 locale
	EnabledLocales []string `json:"enabled_locales" yaml:"enabled_locales"`
}

ValidationConfig 校验 locale 配置

type ValidationError

type ValidationError struct {
	Code    string
	Message string
}

ValidationError 验证错误

func NewValidationError

func NewValidationError(code, message string) *ValidationError

NewValidationError 创建验证错误

func (*ValidationError) Error

func (e *ValidationError) Error() string

type ValidationMessages added in v1.0.0

type ValidationMessages struct {
	EmailInvalidType   string
	EmailInvalidValue  string
	PhoneInvalidType   string
	PhoneInvalidValue  string
	URLInvalidType     string
	URLInvalidValue    string
	PostalInvalidType  string
	PostalInvalidValue string
	IDCardInvalidType  string
	IDCardInvalidValue string
}

ValidationMessages 校验消息模板。

type ValidationProfile added in v1.0.0

type ValidationProfile struct {
	Locale            string
	EmailPattern      string
	PhonePattern      string
	URLPattern        string
	PostalCodePattern string
	IDCardPattern     string
	Messages          ValidationMessages
}

ValidationProfile 区域化校验规则配置。

type Validator

type Validator interface {
	// 验证值,返回错误信息或 nil
	Validate(value interface{}) error
}

Validator 验证器接口

type ViewBuilder added in v1.0.0

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

ViewBuilder 构建通用 VIEW DDL。

func (*ViewBuilder) Args added in v1.0.0

func (b *ViewBuilder) Args(args ...interface{}) *ViewBuilder

Args 设置 ExecuteCreate 时传入的参数。

func (*ViewBuilder) As added in v1.0.0

func (b *ViewBuilder) As(selectSQL string) *ViewBuilder

As 设置视图定义 SQL(AS 后的 SELECT 语句)。

func (*ViewBuilder) BuildCreate added in v1.0.0

func (b *ViewBuilder) BuildCreate() (string, error)

BuildCreate 生成 CREATE/ALTER VIEW DDL。

func (*ViewBuilder) BuildDrop added in v1.0.0

func (b *ViewBuilder) BuildDrop() (string, error)

BuildDrop 生成 DROP VIEW DDL。

func (*ViewBuilder) CreateOnly added in v1.0.0

func (b *ViewBuilder) CreateOnly() *ViewBuilder

CreateOnly 强制使用 CREATE VIEW。

func (*ViewBuilder) CreateOrAlter added in v1.0.0

func (b *ViewBuilder) CreateOrAlter() *ViewBuilder

CreateOrAlter 使用各数据库等价语法:

  • SQL Server: CREATE OR ALTER VIEW
  • PostgreSQL/MySQL: CREATE OR REPLACE VIEW
  • SQLite: 不支持(会在 BuildCreate 报错)

func (*ViewBuilder) Drop added in v1.0.0

func (b *ViewBuilder) Drop(ctx context.Context) error

Drop 执行删除视图。

func (*ViewBuilder) DropIfExists added in v1.0.0

func (b *ViewBuilder) DropIfExists() *ViewBuilder

DropIfExists 删除视图时使用 IF EXISTS(默认)。

func (*ViewBuilder) DropStrict added in v1.0.0

func (b *ViewBuilder) DropStrict() *ViewBuilder

DropStrict 删除视图时不使用 IF EXISTS。

func (*ViewBuilder) ExecuteCreate added in v1.0.0

func (b *ViewBuilder) ExecuteCreate(ctx context.Context) error

ExecuteCreate 执行创建视图。

func (*ViewBuilder) Materialized added in v1.0.0

func (b *ViewBuilder) Materialized() *ViewBuilder

Materialized 切换为物化视图(仅 PostgreSQL)。

func (*ViewBuilder) WithCheckOption added in v1.0.0

func (b *ViewBuilder) WithCheckOption() *ViewBuilder

WithCheckOption 追加 WITH CHECK OPTION(SQLite 不支持)。

type ViewFeatures added in v1.0.0

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

ViewFeatures 提供跨数据库的 VIEW 功能统一入口。

目标是把视图能力放在通用特性层:

  • SQL Server / PostgreSQL: 增强支持(replace/alter 更完整)
  • MySQL / SQLite: 基础支持(创建/删除)
  • MongoDB: 不支持

使用示例:

vf, ok := db.GetViewFeatures(repo.GetAdapter())
if !ok {
    return errors.New("adapter does not support view features")
}
err := vf.View("report_user_stats").
    As("SELECT id, name FROM users WHERE active = 1").
    ExecuteCreate(ctx)

func GetViewFeatures added in v1.0.0

func GetViewFeatures(adapter Adapter) (*ViewFeatures, bool)

GetViewFeatures 从 Adapter 中提取通用 ViewFeatures。

func (*ViewFeatures) View added in v1.0.0

func (f *ViewFeatures) View(name string) *ViewBuilder

View 开始构建一个通用视图。

type ViewHint added in v1.0.0

type ViewHint struct {
	// ViewName 视图名称;空时自动生成为 "<localTable>_<refTable>_view"。
	ViewName string
	// Materialized 是否物化视图(PostgreSQL MATERIALIZED VIEW)。
	// SQL Server 忽略此标志,始终创建普通视图。
	Materialized bool
	// Columns 视图 SELECT 的列表达式列表;空表示 "local_alias.*, ref_alias.*"。
	// 建议指定明确的列以避免歧义,例如 []string{"o.id AS order_id", "u.name"}。
	Columns []string
	// JoinType LEFT/RIGHT/INNER;空时默认为 INNER。
	JoinType string
}

ViewHint 外键约束上的视图提示,声明该关联应创建(或复用)的跨表视图。 适用于高热点跨表查询场景,由 Migration 阶段自动生成视图 DDL, 运行时由 QueryBuilder 自动路由到视图而非直接 JOIN。

type WhereBuilder added in v1.1.0

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

WhereBuilder 条件构造器(独立于 QueryConstructor)。 可先构造完整条件树,再一次性注入 Where 子句。

func NewWhereBuilder added in v1.1.0

func NewWhereBuilder(condition Condition) *WhereBuilder

NewWhereBuilder 创建独立 WhereBuilder。

func (*WhereBuilder) And added in v1.1.0

func (b *WhereBuilder) And(condition Condition) *WhereBuilder

And 追加 AND 条件。

func (*WhereBuilder) Build added in v1.1.0

func (b *WhereBuilder) Build() Condition

Build 返回构造后的根条件。

func (*WhereBuilder) Not added in v1.1.0

func (b *WhereBuilder) Not() *WhereBuilder

Not 将当前条件取反。

func (*WhereBuilder) Or added in v1.1.0

func (b *WhereBuilder) Or(condition Condition) *WhereBuilder

Or 追加 OR 条件。

Directories

Path Synopsis
cmd
eit-migrate command

Jump to

Keyboard shortcuts

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