You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#5907 的 PR 在 remote-transport-aggregate-function-refusal.test.ts 里留了一条如实记录现状的用例([filed, not fixed] COUNT still compiles HERE while the local driver refuses it),这样下一个读者是读到它、而不是重新踩一遍;同一 PR 也把两面的拒收分类改为按调用方写的原始拼写判定,免得归一化差异顺着信封扩散(否则 COUNT_DISTINCT 会在 remote 拿 501、在 local 拿 400)。所以本单剩下的只有「什么能编译」这一半。
从 #5907(聚合函数拒收信封,两面同改)的落点实测中带出。不在该单的信封面内(该单只改拒收的
code/status与措辞,不动「什么能编译」),按 Prime Directive #10 单独记一笔。观察类:仓内没有活体发送方,协议门也表达不出这个输入 —— 严重度请分诊时判定。
事实
两个面对聚合函数名的归一化不一样:
packages/drivers/driver-turso/src/remote-transport.ts—aggregate()先.toLowerCase()再查自己的编译表;packages/drivers/driver-sql/src/sql-driver.ts—mapAggregateFunc()拿到什么查什么,不归一化。TursoDriver按url选面(本地/副本继承SqlDriver,远程委派RemoteTransport),于是同一个驱动、同一条查询,答案取决于连接串。在origin/main@80f7dc6a3实测(一条aggregations: [{ function, field: 'stage', alias: 'n' }]):第一行是分叉本身:一个面返回行,另一个面抛错。后两行是同一归一化的影子 —— 拒收消息回显的名字不是调用方写的那个。
为什么记一笔
$-算子键被当列名编译成静默空集 —— SqlDriver 已按 #5348 拒收,remote 是唯一剩余面(cloud#1077 移交) #5769 花整单去关的那类叉(一个条件、两种线上身份、取决于url),只是落在聚合层的编译能力上而不是拒收信封上。AggregationFunction是大小写敏感的z.enum,AggregationNodeSchema.function因此表达不出COUNT。所以 remote 今天接受的是一个协议从未声明的拼写 —— PD#12 的宽容消费方形状:声明侧只有小写,消费侧偷偷多认一种方言。为什么今天没人撞上(=> 观察类)
function: 'COUNT'/'SUM'/'AVG'/'MIN'/'MAX'(大写)零命中,没有活体发送方;AggregationNodeSchema,大写拼写在到达任何驱动之前就被拒;修法(供分诊,两个方向相反)
.toLowerCase(),两面都只认协议声明的小写拼写,COUNT在两面都落 drivers(sql,turso):Unsupported aggregate function两面都是裸Error(code/status 皆 undefined),且三个 spec 已声明的聚合函数无任何 SQL 后端编译 #5907 的第 1 类拒收(INVALID_QUERY/ 400,「不是已声明的聚合函数」)。与本仓两次同形先例一致(RemoteTransport.findOne的未声明 string-id 分支、FilterArray的第二套编译器,都是删掉后收敛到一种拼写)。代价:任何今天靠大写拼写工作的进程外调用方会开始拿到 400 —— 但那本来就不是协议表达得出的输入。mapAggregateFunc也加.toLowerCase()。两面同样收敛,但方向是把方言固化成第二套事实上的契约,PD#12 明确反对。已经钉住的部分
#5907 的 PR 在
remote-transport-aggregate-function-refusal.test.ts里留了一条如实记录现状的用例([filed, not fixed] COUNT still compiles HERE while the local driver refuses it),这样下一个读者是读到它、而不是重新踩一遍;同一 PR 也把两面的拒收分类改为按调用方写的原始拼写判定,免得归一化差异顺着信封扩散(否则COUNT_DISTINCT会在 remote 拿 501、在 local 拿 400)。所以本单剩下的只有「什么能编译」这一半。相关:#5907(带出本单)、#5769(同族 local/remote 叉)、#6188(那三个已声明未实现的函数按 ADR-0049 的去留)。