ThearchyHelios
72d9d2770c
认证队列的确定性重复按规范形分组:条件换序、AND 两边换位的进同一组
以前按 normalize_sql 的规范文本分组,WHERE 的条件照原文的先后,同一个形状换了条件顺序就拆成两组,凑不够门槛进不了队。
- sql_semantics.sql_shape:在判等价同一套不认列的规范形式(_light)上把字面量抹成只看类型(字还是数)的占位,再把交换律
成立的地方按抹掉之后的写法重排——AND / OR 的各项、IN 列表、= / <> / + / * 的两边、比大小的两边(换边时大于小于跟着
换);抹掉之后一样的几项按原值排,同一组里字面量的位置对得上。不另写解析器。认不出的(解析不了、sqlglot 会读错的写法、
字面量对不回 normalize_sql 的)为 None,照旧按规范文本分组(只会分得细)。positions 把规范形里的字面量对回 normalize_sql
的位置,固化成模板时用。
- ledger/certify:Shape 加 key / canonical / positions;队列按(数据源、规范形)分组,跨轮变了的位置按规范形对齐,再换回
代表那条的位置;固化时同组的别的运行也按规范形认、按同样的对齐认参数。这一项的 id 按规范形算;以前按规范文本记的
「不是口径」照样认(组里任何一条的规范文本对得上就算)。
测试:tests/test_ledger_certify.py 新增四条——三种换序写法同一个形状、字面量位置对得上;七种真不同(换列、OR、少条件、
换运算符、数对字、IN 列表、换聚合)不是同一个形状;真跑三轮换序的问数据进同一组、多筛一个地区的不进,固化出两个日期
参数;按旧 id 记的「不是口径」照样生效。把分组改回按文本再跑,换序那条失败。
2026-10-17 12:09:58 +08:00
..
2026-10-16 13:48:09 +08:00
2026-10-17 07:59:19 +08:00
2026-10-15 12:09:29 +08:00
2026-10-16 12:46:48 +08:00
2026-10-16 16:38:09 +08:00
2026-10-16 14:23:41 +08:00
2026-10-16 13:48:09 +08:00
2026-10-16 14:15:51 +08:00
2026-10-16 14:15:51 +08:00
2026-10-14 21:55:51 +08:00
2026-10-14 21:55:51 +08:00
2026-10-14 21:55:51 +08:00
2026-10-15 12:09:29 +08:00
2026-10-14 21:55:51 +08:00
2026-10-15 07:15:37 +08:00
2026-10-16 10:14:27 +08:00
2026-10-15 07:15:37 +08:00
2026-10-14 21:55:51 +08:00
2026-10-15 08:35:28 +08:00
2026-10-15 12:09:29 +08:00
2026-10-15 13:55:19 +08:00
2026-10-16 19:52:03 +08:00
2026-10-16 10:14:27 +08:00
2026-10-15 08:35:28 +08:00
2026-10-15 07:15:37 +08:00
2026-10-14 20:05:23 +08:00
2026-10-15 14:32:25 +08:00
2026-10-15 13:55:19 +08:00
2026-10-15 17:31:20 +08:00
2026-10-15 13:55:19 +08:00
2026-10-15 13:55:19 +08:00
2026-10-16 10:34:18 +08:00
2026-10-16 10:14:27 +08:00
2026-10-16 12:46:48 +08:00
2026-10-16 12:46:48 +08:00
2026-10-12 17:23:27 +08:00
2026-10-12 19:09:50 +08:00
2026-10-12 19:09:50 +08:00
2026-10-16 12:46:48 +08:00
2026-10-12 23:01:09 +08:00
2026-10-16 16:20:25 +08:00
2026-10-14 22:08:33 +08:00
2026-10-15 14:44:26 +08:00
2026-10-14 21:55:51 +08:00
2026-10-16 14:17:06 +08:00
2026-10-16 14:17:06 +08:00
2026-10-14 09:59:19 +08:00
2026-10-16 10:25:28 +08:00
2026-10-14 14:07:14 +08:00
2026-10-14 22:17:00 +08:00
2026-10-13 20:30:02 +08:00
2026-10-14 20:05:23 +08:00
2026-10-13 20:30:02 +08:00
2026-10-17 08:51:51 +08:00
2026-10-16 10:45:45 +08:00
2026-10-15 19:43:29 +08:00
2026-10-17 07:59:19 +08:00
2026-10-16 14:17:06 +08:00
2026-10-14 16:11:04 +08:00
2026-10-14 09:51:49 +08:00
2026-10-17 09:12:29 +08:00
2026-10-16 12:02:41 +08:00
2026-10-14 16:11:04 +08:00
2026-10-16 10:28:01 +08:00
2026-10-14 20:05:23 +08:00
2026-10-12 15:55:19 +08:00
2026-10-16 10:59:15 +08:00
2026-10-15 13:55:19 +08:00
2026-10-16 12:46:36 +08:00
2026-10-14 21:55:51 +08:00
2026-10-16 10:45:45 +08:00
2026-10-16 10:59:15 +08:00
2026-10-15 13:55:19 +08:00
2026-10-14 20:05:23 +08:00
2026-10-16 10:45:45 +08:00
2026-10-16 10:45:45 +08:00
2026-10-16 10:45:45 +08:00
2026-10-16 10:45:45 +08:00
2026-10-16 10:45:45 +08:00
2026-10-16 10:45:45 +08:00
2026-10-16 10:45:45 +08:00
2026-10-14 20:05:23 +08:00
2026-10-16 10:45:45 +08:00
2026-10-15 14:59:40 +08:00
2026-10-16 10:45:45 +08:00
2026-10-16 12:23:19 +08:00
2026-10-16 14:17:06 +08:00
2026-10-16 10:24:22 +08:00
2026-10-17 08:17:12 +08:00
2026-10-17 08:17:12 +08:00
2026-10-16 10:14:27 +08:00
2026-10-12 12:24:14 +08:00
2026-10-15 07:15:37 +08:00
2026-10-16 13:58:36 +08:00
2026-10-16 16:49:47 +08:00
2026-10-16 17:08:29 +08:00
2026-10-16 16:49:47 +08:00
2026-10-16 14:06:29 +08:00
2026-10-16 10:18:12 +08:00
2026-10-17 09:10:52 +08:00
2026-10-16 19:41:57 +08:00
2026-10-16 17:11:09 +08:00
2026-10-16 14:05:22 +08:00
2026-10-16 17:11:09 +08:00
2026-10-16 14:05:22 +08:00
2026-10-16 21:41:30 +08:00
2026-10-16 11:04:41 +08:00
2026-10-12 13:50:31 +08:00
2026-10-12 17:23:27 +08:00
2026-10-12 13:50:31 +08:00
2026-10-12 17:23:27 +08:00
2026-10-12 10:48:19 +08:00
2026-10-12 12:24:14 +08:00
2026-10-15 13:55:19 +08:00
2026-10-16 20:46:18 +08:00
2026-10-15 13:55:19 +08:00
2026-10-12 15:55:19 +08:00
2026-10-12 15:55:19 +08:00
2026-10-16 10:33:41 +08:00
2026-10-16 15:36:21 +08:00
2026-10-16 09:59:44 +08:00
2026-10-12 13:50:31 +08:00
2026-10-17 09:19:24 +08:00
2026-10-17 12:09:58 +08:00
2026-10-17 11:47:26 +08:00
2026-10-16 13:49:53 +08:00
2026-10-16 22:16:58 +08:00
2026-10-16 19:09:47 +08:00
2026-10-16 14:23:41 +08:00
2026-10-17 11:49:31 +08:00
2026-10-17 09:15:07 +08:00
2026-10-16 19:46:03 +08:00
2026-10-14 20:05:23 +08:00
2026-10-16 14:26:04 +08:00
2026-10-16 22:02:09 +08:00
2026-10-12 10:48:19 +08:00
2026-10-12 10:48:19 +08:00
2026-10-12 13:14:36 +08:00
2026-10-12 10:50:40 +08:00
2026-10-13 16:59:58 +08:00
2026-10-12 12:18:34 +08:00
2026-10-14 20:05:23 +08:00
2026-10-17 12:05:12 +08:00
2026-10-15 07:15:37 +08:00
2026-10-15 07:15:37 +08:00
2026-10-14 20:05:23 +08:00
2026-10-16 17:11:54 +08:00
2026-10-16 22:30:09 +08:00
2026-10-16 18:20:52 +08:00
2026-10-16 10:14:27 +08:00
2026-10-16 10:18:12 +08:00
2026-10-15 12:09:29 +08:00
2026-10-15 07:15:37 +08:00
2026-10-16 10:14:27 +08:00
2026-10-14 22:08:33 +08:00
2026-10-16 10:14:27 +08:00
2026-10-17 07:59:19 +08:00
2026-10-16 12:06:24 +08:00
2026-10-16 14:26:04 +08:00
2026-10-12 10:17:40 +08:00
2026-10-16 16:21:41 +08:00
2026-10-16 10:34:18 +08:00
2026-10-16 21:41:30 +08:00
2026-10-16 11:16:33 +08:00
2026-10-16 11:16:33 +08:00
2026-10-16 11:16:33 +08:00
2026-10-16 12:23:19 +08:00
2026-10-16 11:09:39 +08:00
2026-10-16 11:09:39 +08:00
2026-10-16 12:23:19 +08:00
2026-10-16 11:09:39 +08:00
2026-10-16 11:09:39 +08:00
2026-10-16 11:09:39 +08:00
2026-10-16 11:09:39 +08:00
2026-10-16 10:14:27 +08:00
2026-10-14 20:05:23 +08:00
2026-10-12 14:26:43 +08:00
2026-10-13 10:04:30 +08:00
2026-10-10 12:59:21 +08:00
2026-10-12 13:50:31 +08:00
2026-10-12 23:01:09 +08:00
2026-10-12 12:33:32 +08:00
2026-10-12 23:01:09 +08:00
2026-10-12 23:01:09 +08:00
2026-10-12 19:09:50 +08:00
2026-10-12 17:23:27 +08:00
2026-10-12 13:50:31 +08:00
2026-10-12 17:23:27 +08:00
2026-10-16 19:30:47 +08:00
2026-10-14 22:08:33 +08:00
2026-10-16 14:02:55 +08:00
2026-10-17 08:31:17 +08:00
2026-10-14 20:05:23 +08:00
2026-10-14 20:05:23 +08:00
2026-10-14 21:55:51 +08:00
2026-10-16 16:38:09 +08:00
2026-10-15 07:15:37 +08:00
2026-10-16 10:14:27 +08:00
2026-10-16 22:02:09 +08:00
2026-10-16 18:37:51 +08:00
2026-10-16 16:26:11 +08:00
2026-10-16 16:21:41 +08:00
2026-10-16 16:21:41 +08:00
2026-10-17 09:19:24 +08:00
2026-10-16 10:54:30 +08:00
2026-10-16 19:46:14 +08:00
2026-10-16 19:31:21 +08:00
2026-10-17 08:51:51 +08:00
2026-10-16 19:46:14 +08:00
2026-10-16 11:04:41 +08:00
2026-10-16 13:39:15 +08:00
2026-10-16 13:39:15 +08:00
2026-10-17 11:49:31 +08:00
2026-10-17 11:47:26 +08:00
2026-10-17 08:17:12 +08:00
2026-10-17 08:17:12 +08:00
2026-10-16 12:53:07 +08:00
2026-10-14 21:55:51 +08:00
2026-10-15 07:15:37 +08:00
2026-10-14 20:05:23 +08:00
2026-10-15 07:15:37 +08:00
2026-10-14 21:55:51 +08:00
2026-10-17 08:24:15 +08:00
2026-10-15 13:55:19 +08:00
2026-10-16 14:26:04 +08:00
2026-10-17 07:59:19 +08:00
2026-10-12 12:24:14 +08:00
2026-10-14 22:17:00 +08:00
2026-10-07 01:19:26 +08:00
2026-10-16 16:30:42 +08:00
2026-10-15 07:15:37 +08:00
2026-10-12 17:23:27 +08:00
2026-10-14 21:55:51 +08:00