Expand description
存储层。TC 本身无状态,所有状态都在这里 —— 所以 TC 可以多实例、可以随时重启。
§一套 SQL 同时跑 sqlite / postgres / mysql
用 sqlx::Any + dtmrs_core::dialect 的模板渲染,而不是抽 Store trait
写三份实现。方言差异(占位符、冲突忽略、列类型、索引写法)全在 dialect 那层,
各家实测出来的坑也记在那个文件头,这里只遵守它的两条写法约定:
- 模板里统一写
?,由Backend::q渲染成各后端能吃的语句 (非 MySQL 转成$1..$n,MySQL 原样保留) - 模板的字符串字面量里不能出现
?—— 会被当成占位符
顺带一条只有 sqlite 有的老坑:它把 $4 当命名参数,所以同一个 $N 不能
复用。q() 逐个 ? 顺序编号,天然不会复用。
时间统一用 unix 秒(i64) 存,不用数据库的 datetime 类型 ——
跨库的时间类型映射是反复踩坑的地方,整数没有这个问题。
列类型用 BIGINT:postgres 的 INTEGER 只有 4 字节,装不下时间戳。
Structs§
Enums§
Constants§
Functions§
- hash_
token - 令牌的哈希。存哈希不存明文:库被看到也拿不到能用的凭据。
- is_
redis_ url - 这个 URL 是不是要走 Redis
- now
Type Aliases§
- Result
- Store
Error - 存储层的错误。