代码拉取完成,页面将自动刷新
1735
修复函数中处理数组元素引用变量报错的问题
已合并
【标题】(请简要描述下实现的内容)
修复函数中处理数组元素引用变量报错的问题
【实现内容】:
将 array[index:length] 中的 :length
当成数组下标来处理
【根因分析】:
当前语法分析时把 array[index:length] 这种形式的写法中的 :length
当成了占位符来处理,导致函数中同时出现了 $1 和:length
两种写法,从而报不能同时使用 $ 和 :xx
当前语法分析的规则:
newParam :({identifier}|{integer})
newArray :({integer}{space}*\])
可以看出对于 array[index:length] 这种形式, 由于'length'是identifier,所以 :length
将匹配到 newParam,即占位符。只有对于 array[index:4],这种是 : + 数字 的场景才能匹配到 newArray,即数组的场景。但是,显然从实际语义分析 array[index:length] 中,length代表的不是占位符,而是一个普通变量,代表数组的下标,应当解析成 newArray。
【修改方案】:
- 修改 newArray 的匹配规则,对于
:identifier]
形式的,应该解析为 newArray - 匹配到 newArray 后,设置 yyloc(执行 SET_YYLOC()),正确标识当前位置,后续在组装动态sql时能正确识别词语的起始结束位置
【关联issue】:
#I3IPYJ:函数中处理数组元素引用变量报错
【开发自验报告】:
- 请附上自验结果(内容或者截图)
- 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
是,已添加 - 是否涉及资料修改,如是,在docs仓库补充资料
不涉及 - 是否考虑支撑升级和在线扩容等扩展场景
不涉及 - 是否考虑异常场景/并发场景/前向兼容/性能场景
不涉及 - 是否对其他模块产生影响
不涉及