Files
condition/README.md
T
what ed77aa4648 docs: 补充 README,说明 v1-legacy 分支的能力范围与安装方式
记录这条老线跟 master 的差异,以及依赖方(如 zg-estate)应该怎么锁定/更新
到这个分支,避免误跑 go get -u 拉到 master 上的破坏性改动。
2026-08-21 09:05:24 +08:00

2.2 KiB
Raw Blame History

git.fsdpf.net/go/conditionv1-legacy

老架构下的条件表达式 DSL:把一组条件(等值/比较/模糊匹配/IN 等)组织成可嵌套的 AND/OR 树,ToSql 手工拼接成 SQL 字符串(db.Raw(...)),供权限过滤、规则引擎等场景复用同一套 条件描述。

这个分支有什么

  • Condition:条件树节点,ConditionTypeAND/OR)是独立的 string 类型,ToSql(m TokenValue) db.Expression 内部把子条件/表达式各自渲染成字符串、strings.Join 拼接、手动 加括号、返回 db.Raw(sql)——不是表达式树,是纯字符串拼接。
  • ConditionExpr:单个表达式(字段 + 操作符 + 值),ConditionOperator 是独立的 string 类型("="/"!="/"LIKE"/"IN" 等字符串常量),TokenValue 接口定义在这个文件里 GetParam(k string) req.GlobalParams,不是新架构的 valuex.Accessor)。
  • engine/Engine[T] 规则引擎,EngineParam 包一层 req.GlobalParams 给条件求值用。

这个分支的定位

给还在维护、但还没迁移到新架构(master 分支上 Condition.ToSql 改用 db-v2 表达式树、 TokenValue 改用 reflux/valuex、新增 JSON 序列化支持)的老项目用,比如 zg-estate(间接 依赖)。只接受独立于新架构的 bug 修复。

依赖方怎么安装/更新

Go modules 不会记住某个版本是从哪个分支解析出来的,go.mod/go.sum 里存的只是一次性解析出 的 commit 伪版本号,分支上有新提交也不会自动同步。

首次锁定,或者要拿这个分支上新提交的更新,都执行同一条命令:

go get git.fsdpf.net/go/condition@v1-legacy

禁止跑裸的 go get -u(或者 go get git.fsdpf.net/go/condition@latest)——这个仓库没有 打语义化 tag,Go 对"最新版本"的解析规则是退回到仓库默认分支(master)的 HEAD,会把新架构 的破坏性改动一起拉进来,而不是停留在这个分支上。同时注意这条老线依赖的 git.fsdpf.net/go/db/git.fsdpf.net/go/req 也要一起锁定在它们各自的 v1-legacy 分支, 不能新老混用。