Commit Graph
227 Commits
Author SHA1 Message Date
rulego-team cae738223e fix: trunc/pow/exp 非法入参与越界返回错误,不再静默返回 NaN/0 2026-07-07 14:44:18 +08:00
rulego-team b00a782fdd test: 锁定非 JOIN 直接路径的 WHERE filter 行为不变 #39 2026-07-07 14:17:20 +08:00
rulego-team f197654bb5 feat: 富化前移使 WHERE 可筛元表列,LEFT 无匹配用空 map 支持 IS NULL #39 2026-07-07 14:10:21 +08:00
rulego-team 17534a2776 test: JOIN 自定义源/生命周期/异步路径/Upsert/Delete/WHERE/别名场景 #39 2026-07-07 12:43:03 +08:00
rulego-team 25f0f24f43 refactor: RegisterTable 变参化,键从 JOIN ON 自动推导 #39 2026-07-07 12:07:50 +08:00
rulego-team 6299925b9c test: 多表 JOIN 富化用例 #39 2026-07-07 11:59:28 +08:00
rulego-team 906eff0c70 feat: 流-表 JOIN(v0.5 元数据富化) #39 2026-07-07 11:02:51 +08:00
rulego-team e483db8a2e fix: expr() 动态表达式走 env 路径取行数据,修复编译路径静默返回 nil
编译路径把 StreamSQL 函数烘焙进 program,闭包 ctx.Data 只含函数包装不含行数据。
expr() 读行数据求值动态子表达式,必须路由到 env 路径(闭包捕获真实 data)。
其余表达式仍走快速编译路径,性能不变。
2026-07-07 10:20:45 +08:00
rulego-team 978304aba9 perf: WHERE 复合快速路径放行字符串字面量
去掉对引号的保守排除——若字面量含 &&/|| 被误拆,逐段严格正则校验会拒绝并回退
(如 msg == 'a && b' 仍正确回退)。覆盖 status=='active' && temp>20 这类混合条件。
2026-07-07 09:29:39 +08:00
rulego-team 7270d39bcb perf: WHERE 快速路径扩展到扁平 AND/OR 复合条件
对 `a OP lit (&&|||) b OP lit ...`(纯数值、无括号/字符串)在编译期拆分识别为
fastCompound,运行期逐段快速比较,任一段类型不匹配则整体回退 expr-lang。
rsql 已把 AND/OR 下译为 &&/||,故按 &&/|| 拆分。

基准:
  MultiFieldFilter (temp>20 && humid<80) 1286ns/6alloc -> 668ns/3alloc (1.9x)
2026-07-07 09:27:49 +08:00
rulego-team 82a83dcf91 perf: WHERE 简单比较走快速路径,绕过 expr-lang 反射
对 `field OP literal`(数值/字符串单比较)在编译期用正则识别,运行期直接读 map 字段比较;
类型不匹配/字段缺失/复合条件自动回退 expr-lang,语义零偏差。

基准:
  孤立 WHERE 求值 216ns/1alloc -> 35ns/0alloc (6.2x, 零分配)
  FilterProject 915ns/5alloc -> 605ns/3alloc (1.5x)
  (MultiFieldFilter 的 AND 复合条件不匹配快速路径,回退 expr-lang,不变)
2026-07-07 09:23:07 +08:00
rulego-team d3b83891f0 perf: 消除求值路径的缓存键 fmt.Sprintf 与数据 env 拷贝
- 缓存键改用 reflect.TypeOf 比较(progCacheEntry),免去每次 fmt.Sprintf
- 编译路径直接把 data 传给 expr.Run(expr-lang 求值只读,不写 env),省去 createDataEnv 拷贝

ExprBridge 微基准:
  Arithmetic   1.13µs/6alloc -> 594ns/4alloc
  FunctionCall 0.99µs/7alloc -> 508ns/5alloc
  Field        0.74µs/3alloc -> 266ns/1alloc
主路径集成基准:
  ComputedFields 4671ns/22alloc -> 2692ns/14alloc
2026-07-07 01:13:00 +08:00
rulego-team f99a1b9ad4 test: 新增主路径集成基准(EmitSync,真实 RSQL)
FilterProject/MultiFieldFilter/ComputedFields/StringConcat/NoFilter,
用 EmitSync 同步测端到端每行延迟(用户实际调用路径)。
2026-07-07 01:00:29 +08:00
rulego-team b7c40d09f5 perf: 缓存表达式预处理结果(反引号/LIKE/IS NULL)
按输入表达式缓存确定性预处理结果,避免每行重复 ToUpper/Contains/正则扫描。
字符串拼接检查依赖 data,保留在 EvaluateExpression 每次执行。

基准(data-only env 之后 -> 现在):
  Arithmetic   2.1µs/10alloc -> 2.0µs/8alloc
  FunctionCall 1.9µs/11alloc -> 1.6µs/9alloc
  StringConcat 1.18µs/7alloc -> 0.82µs/5alloc
  Field        1.4µs/7alloc  -> 1.26µs/5alloc
2026-07-07 00:45:10 +08:00
rulego-team fe191d757b perf: 编译路径运行环境改为仅数据 env,省去每行重建函数包装闭包
编译时函数已通过 expr.Function 烘焙进 program,运行时 env 只需数据,
无需每行重建 ~44 个函数包装闭包。公开 CreateEnhancedExprEnvironment 不变;
expr.Eval 回退路径仍用完整 env。

基准(M15 之后 -> 现在):
  Arithmetic   146µs/317alloc -> 2.1µs/10alloc
  FunctionCall 140µs/318alloc -> 1.9µs/11alloc
  Field        136µs/314alloc -> 1.4µs/7alloc
对比初始基线(Arithmetic 413µs/1398alloc)累计约 197x 提升
2026-07-07 00:37:27 +08:00
rulego-team bb1800c0a6 perf(M15): ExprBridge 缓存编译后的 *vm.Program
按 (env类型, 表达式) 缓存编译结果,相同表达式编译一次、多次运行,
消除每行重新构建函数 options 与 expr.Compile 的开销(原每次评估都重编译)。

基准(-benchtime=2s -count=3,取中位):
  Arithmetic   413µs/1398alloc -> 146µs/317alloc  (~2.8x 快, 4.4x 少分配)
  FunctionCall 391µs/1405alloc -> 140µs/318alloc  (~2.8x, 4.4x)
  Field        387µs/1374alloc -> 136µs/314alloc  (~2.8x, 4.4x)
  StringConcat 1.23µs/7alloc   -> 1.36µs/7alloc   (走快速路径,无回归)
2026-07-07 00:23:48 +08:00
rulego-team f14a3b4d7a fix: P0 bug 批量修复 H12/M1/M9/M10/M11/M16
- H12: 表达式 tokenizer 不再把 <expr>-<digit> 粘成负数 token;parseExpression 顶层剩余 token 报错(price*2-1 原静默截断为 200,现正确为 199)
- M1: SlidingWindow.closeExpiredWindows 只清理 triggeredWindows 记账,行驱逐交给 extractWindowDataLocked,修复重叠窗口数据丢失
- M9: is_null/is_not_null 用 reflect 识别 typed-nil((*int)(nil) 等原误判为非空)
- M10: percentile 标量 Execute 排除百分位参数 p、校验 [0,1]、index clamp,修复数据污染与越界 panic
- M11: row_number 共享实例自增加锁,消除数据竞争
- M16: LIKE 匹配器改为 O(n*m) 双指针算法,消除对抗性模式指数回溯 DoS(三处同改)
- 测试: 新增 regression_test.go / tokenizer_regression_test.go / sliding_expiry_regression_test.go 覆盖以上场景;修正 streamsql_function_integration_test 过期的 cast('int') 期望(int32→int)
2026-07-07 00:15:29 +08:00
rulego-team da04eb3d0b test: date_format 锁定小写 yyyy-MM-dd 与 yyyy-MM-dd HH:mm:ss 支持 2026-07-06 23:18:44 +08:00
rulego-team a0b8773d81 fix: date_format 区分 mm=分钟 / MM=月份,修复 HH:mm:ss 分钟被月份覆盖 2026-07-06 22:42:35 +08:00
rulego-team 6afa73fecc feat: 实现 ORDER BY,窗口/批内排序,先排序后 LIMIT;顺带修 parseWhere 漏 ORDER 边界 2026-07-06 22:18:17 +08:00
rulego-team ca0c4fefe1 fix: substring 按 rune 切片避免多字节截断;date_add/sub 越界返回错误 2026-07-06 21:18:51 +08:00
rulego-team 7fd5e8ed64 fix: Stop join 所有 sink/处理协程,消除 Stop 后泄漏与关闭期内联阻塞 2026-07-06 21:09:52 +08:00
rulego-team 1dc6b87a7f fix: cast/ToInt64E 越界返回错误而非静默回绕 2026-07-06 16:38:32 +08:00
rulego-team 387ba0daa5 fix: LIKE 模式含 _ 或内部 % 时走 like_match 避免通配符丢失 2026-07-06 15:55:06 +08:00
rulego-team 016e613875 fix: 注册 percentile 为 AggregatorFunction 避免 CreateLegacyAggregator panic 2026-07-06 15:51:11 +08:00
rulego-team 3f7a5b3d37 fix: parseLimit 改用 token 流识别 LIMIT 避免子串误匹配 2026-07-06 15:42:49 +08:00
rulego-team 549412cd8f fix: array 集合函数支持不可哈希元素避免 panic 2026-07-06 13:50:39 +08:00
rulego-team b3ca746ac6 fix: fieldpath 修复 MapIndex 键类型不匹配 panic 2026-07-06 13:43:14 +08:00
rulego-team b3e72e360e fix: 窗口移除 close(outputChan) 消除关闭期 send-on-closed panic 2026-07-06 13:33:34 +08:00
rulego-team cf5adbd4a5 fix: 移除 Stop 中 close(dataChan) 消除 send-on-closed panic 2026-07-06 13:12:21 +08:00
rulego-team 9aec9ac85f fix: 修复 counting 窗口关闭 panic 等多处 panic/除零/静默缺陷 2026-07-06 12:51:23 +08:00
rulego-team a717d41ba0 fix: 修复 tumbling/counting 窗口构造函数的 context 泄漏 2026-07-06 12:19:24 +08:00
rulego-team 9f6f545f9b feat:支持数组取值 v0.10.7 2026-01-19 22:20:02 +08:00
rulego-team 1e1282a1f8 feat:json_extract支持map 和 array入参 2026-01-19 21:26:39 +08:00
rulego-team 52653b2143 ci:测试超时设置600s v0.10.6 2025-12-21 11:57:52 +08:00
Whki 2db23f5b99 Merge pull request #45 from rulego/dependabot/go_modules/github.com/expr-lang/expr-1.17.7
chore(deps): bump github.com/expr-lang/expr from 1.17.6 to 1.17.7
2025-12-20 16:24:18 +08:00
rulego-team c7cece15e2 feat:window输出结果增加溢出策略 2025-12-20 16:15:53 +08:00
rulego-team 09fe63102e fix:SessionWindow和CountingWindow bufferSize初始化 2025-12-20 11:14:37 +08:00
rulego-team b405a935b7 增加同步的获取结果的方法 2025-12-20 11:10:21 +08:00
dependabot[bot] 1c781979a6 chore(deps): bump github.com/expr-lang/expr from 1.17.6 to 1.17.7
Bumps [github.com/expr-lang/expr](https://github.com/expr-lang/expr) from 1.17.6 to 1.17.7.
- [Release notes](https://github.com/expr-lang/expr/releases)
- [Commits](https://github.com/expr-lang/expr/compare/v1.17.6...v1.17.7)

---
updated-dependencies:
- dependency-name: github.com/expr-lang/expr
  dependency-version: 1.17.7
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-17 02:14:17 +00:00
rulego-team 16778f2ac3 test:fix test fail 2025-12-16 17:40:23 +08:00
rulego-team ba2cdd5629 fix:修复有特殊符号出现多余字段 v0.10.5 2025-12-16 11:50:34 +08:00
rulego-team 47b7e07c6b fix:修复特殊符号被认为非法 2025-12-16 11:34:30 +08:00
rulego-team 9739f213e9 fix:修复Trigger未清除过期数据问题 2025-12-16 11:15:33 +08:00
rulego-team 4528d1f1a6 fix(window): 修复事件时间窗口未触发问题并添加调试日志 v0.10.4 2025-11-15 13:54:27 +08:00
Whki 6ce76d506c Merge pull request #43 from rulego/dev
Dev
2025-11-15 13:15:05 +08:00
rulego-team 8207e6ba8c fix:修复延迟数据处理逻辑 2025-11-15 13:06:06 +08:00
rulego-team b2c638671a ci:增加测试时间 2025-11-15 00:49:49 +08:00
rulego-team 1744502678 feat:增加事件时间窗口处理机制 2025-11-15 00:27:55 +08:00
Whki 8a6e41ab78 Merge pull request #42 from rulego/dev
Dev
2025-11-14 10:53:22 +08:00