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

39 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# git.fsdpf.net/go/conditionv1-legacy
老架构下的条件表达式 DSL:把一组条件(等值/比较/模糊匹配/IN 等)组织成可嵌套的 `AND`/`OR`
树,`ToSql` 手工拼接成 SQL 字符串(`db.Raw(...)`),供权限过滤、规则引擎等场景复用同一套
条件描述。
## 这个分支有什么
- `Condition`:条件树节点,`ConditionType``AND`/`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`)——这个仓库没有
打语义化 tagGo 对"最新版本"的解析规则是退回到仓库默认分支(`master`)的 HEAD,会把新架构
的破坏性改动一起拉进来,而不是停留在这个分支上。同时注意这条老线依赖的
`git.fsdpf.net/go/db`/`git.fsdpf.net/go/req` 也要一起锁定在它们各自的 `v1-legacy` 分支,
不能新老混用。