Skip to main content

Module vel

Module vel 

Source
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 占位符替换为对应值。