[错误] wren-core 在 transform_sql 期间默默丢弃显式的 ROWS 窗口框架
** 描述错误**
恶作剧 SessionContext.transform sql ()"可以默默地放下一个明确规定的"ROWS"窗口框架,当框架是:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? UNBODED PREBEDING和当前成长之间的道路
例如:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
独立
编号,
SUM(五) 结束(
按k顺序排列
UNBODED PREBEDING和当前成长之间的道路
) AS 运行 sum
从t在SQL规划/解析期间,可以省略明确的`UNBOUNDED PRECEDING和当前ROW之间的ROWS BETW'条款。
这并不总是保留语义。
对DuckDB来说,当“ORDER BY”出现且未指定明确的窗口框架时,默认行为使用“UNBOUNDED PRECEDING和当前ROW之间”的RANGE BETW。
ROWS ' 和RANGE ' 当`ORDER BY ' 表示包含重复值(同行)时行为不同。
因此,Wren可以生成成功执行但返回与原SQL不同的结果的SQL.
这对分析/代理生成的SQL特别危险,因为没有任何语法或执行错误表明计算语义发生变化.
** 废除**
使用 :
- "wrenai ==:0.14.0"
- `恶搞-py=-0.7.6'
- DuckDB / 本地文件数据源
创建一个最小的列表 :
导入基数64
导入 json
从 wren.mdl 导入获取 session context
显示={
"目录":"恶",".
"史记":"主",".
""模型": [
{
"名":"t","t".
"表格参考":{
"史记":"主",".
"表"曰:"t",""".
{\fn华文楷体\fs16\1cHE0E0E0}
"列传": [
{"姓名":"id","类型":"BIGINT"},,
{"名称":"k","类型":"BIGINT"},,
{"名称":"v","类型":"BIGINT"},,
[
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
[
"相会":[.
"观": [],.
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
显示 str = base64.b64encode ()
json.dumps(明显). encode () () (中文(简体) ).
.decode () (中文(简体) ).
ctx = 获取 session 上下文(
显示( S)
无
无
蠢货
(中文(简体) ).
sql = "" (中文(简体) ).
独立
编号,
SUM(五) 结束(
按k顺序排列
UNBODED PREBEDING和当前成长之间的道路
) AS 运行 sum
从t
"" "" ""
已规划 sql = ctx. transform sql( sql)
打印 ("INPUT SQL:")
打印( sql)
打印 ("PLAND SQL:")
打印( 计划中的 sql)投入明确包括:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? UNBODED PREBEDING和当前成长之间的道路
但计划中的 SQL 放弃了这个明确框架。
语义差异可以用下列方法证明:
页:1
页:1
---+--+--+--+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、导 言
2 | 1 | 20
页:1以明确的`ROWS ' 框架:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 独立 编号, SUM(五) 结束( 按k顺序排列 UNBODED PREBEDING和当前成长之间的道路 ) AS 运行 sum 从t;
预期成果是:
页:1
id QQ 运行 sum
---+---+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、导 言
3 | 60如果省略了明确的框架,而后端应用了"RANGE"语义,则前两行是同位素,因为两者都有"k = 1":
页:1 id QQ 运行 sum ---+---+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 一、导 言
3 | 60
SQL依然有效,但其语义已经改变.
. . . . . . .内容来源: Canner/WrenAI