Expand description
VEL —— 变量求值语言(Variable Evaluation Language)。
KnowDB 定期刷新(crate::refresh)的 SQL 供给可携带一小段 VEL 代码:
每行一个赋值 $name = 表达式,刷新循环每次执行前按 knowdb 自身时钟求值,
再用结果替换 SQL 模板里的 $name 占位符。语义完全归宿主配置;本模块只提供
微型语法 + 内建函数表(无控制流,错误即配置错误,boot/首 tick 即暴露)。
§语法
code := 行* # 行 = 赋值 | 空行 | 注释(整行或行尾 '#')
赋值 := '$' 名 '=' 表达式
表达式 := 字符串字面量 | 函数调用 # 表达式后只允许行尾 # 注释
名 := [A-Za-z_][A-Za-z0-9_]* # 重复定义 → 配置错误- 字符串字面量:双引号包裹(如
$max_age = "30 days"),值原样透传(含#); - 内建函数(参数为秒,标签 prefix 默认
"p"):
| 函数 | 值 |
|---|---|
phase_now(period_s, bucket_s[, prefix]) | 当前相位格标签 prefix + fold(now),fold(t) = (t mod period) div bucket |
phase_next(period_s, bucket_s[, prefix]) | 下一相位格标签 fold(now + bucket)(周期末自动回绕首格) |
示例(demo PG 供给:基线只取当前/下一相位格在保留期内的收盘):
$max_age = "30 days" # 保留期(写死)
$cur = phase_now(240, 15) # 当前相位格
$next = phase_next(240, 15)空代码 = 静态 SQL 直接执行。求值时钟见 current_wall_nanos。
Enums§
- VarDef
- VEL 赋值(解析产物)。
Functions§
- current_
wall_ nanos - 当前墙钟 epoch 纳秒(VEL 求值的时钟来源)。
- eval
- 在给定时刻求值全部变量(
(name, value);按代码行序)。 - parse
- 解析 VEL 代码 → 有序赋值列表。
- render
- 求值 VEL 代码并渲染 SQL 模板。boot 装载可复用本函数保证与刷新同源。
- resolve_
vars - 把
$name占位符替换为对应值。