一种数据库的字段引用重绑定解析方法、设备及介质与流程

摘要: 本申请涉及数据库sql语义解析,尤其涉及一种数据库的字段引用重绑定解析方法、设备及介质。背景技术:1、postgresql遵循标准sql规范,字段查找仅遍历各层...
一种数据库的字段引用重绑定解析方法、设备及介质与流程

本申请涉及数据库sql语义解析,尤其涉及一种数据库的字段引用重绑定解析方法、设备及介质。

背景技术:

1、postgresql遵循标准sql规范,字段查找仅遍历各层查询块的底层数据表,不识别select子句定义的输出别名,而mysql支持在having、order by中直接引用select别名,二者语义行为存在差异。

2、在数据库mysql兼容改造场景下,原有固定路径的字段绑定机制面对多层嵌套子查询时,无法跨查询块识别别名,当表原始列、select别名、group-by分组字段重名时易出现解析冲突。同时原有解析逻辑缺少统一的候选决策机制,字段解析失败后会进入伪列、函数等多条回退路径,报错表现与mysql不一致,导致部分mysql业务sql迁移后执行异常。若直接大规模改写原有解析框架,会破坏数据库内核稳定性。

技术实现思路

1、为了解决上述背景技术中存在的技术问题,本申请实施例提供一种数据库的字段引用重绑定解析方法、设备及介质,该方法包括:在sql语义解析阶段,当语法树中出现字段引用时,识别所述字段引用,并确定所述字段引用所在的表达式上下文;根据所述表达式上下文对应的查找顺序,以当前查询块的解析状态为起始解析层级,对所述字段引用依次匹配来源表字段、输出别名以及分组字段;若在当前查询块未得到所述字段引用的匹配结果,跳转至父级查询块,重复执行匹配操作,直至遍历全部层级的查询块;当所述字段引用匹配到外层查询块的字段时,对所述字段引用执行重绑定处理,生成最终表达式节点。

2、一个示例中,根据所述表达式上下文对应的查找顺序,以当前查询块的解析状态为起始解析层级,对所述字段引用依次匹配来源表字段、输出别名以及分组字段,具体包括:当判定为非having表达式上下文时,优先匹配当前查询块内的来源表字段;若来源表字段匹配失败,匹配当前查询块的输出别名以及分组字段;若输出别名以及分组字段匹配失败,跳转至父级查询块继续执行匹配操作。

3、一个示例中,根据所述表达式上下文对应的查找顺序,以当前查询块的解析状态为起始解析层级,对所述字段引用依次匹配来源表字段、输出别名以及分组字段,具体还包括:当判定为having表达式上下文时,优先匹配当前查询块的输出别名以及分组字段;若输出别名以及分组字段匹配失败,匹配当前查询块内的来源表字段;若来源表字段匹配失败,跳转至父级查询块继续执行匹配操作。

4、一个示例中,当所述字段引用匹配到输出别名且没匹配到分组字段时,所述方法包括:确定输出别名的候选类型,将用户显式定义的输出别名设置为高优先级候选,将数据表原始列对应的输出名称设置为低优先级候选;优先采用高优先级候选进行字段绑定,在不存在高优先级候选的情况下,采用低优先级候选完成字段绑定;若存在多个同优先级的不同候选,输出字段歧义错误。

5、一个示例中,当所述字段引用匹配到输出别名且匹配到分组字段时,所述方法包括:对比输出别名对应的表达式与分组字段对应的表达式;若表达式内容一致,直接选用表达式完成字段绑定;若表达式不一致且当前处于having表达式上下文,输出歧义提示并选用分组字段对应的表达式进行绑定;若二者表达式不一致且处于除having表达式上下文之外的上下文,输出字段歧义错误,终止字段解析流程。

6、一个示例中,当所述字段引用匹配到外层查询块的字段时,对所述字段引用执行重绑定处理,生成最终表达式节点,具体包括:根据外层查询块字段的表达式节点,反向提取字段对应的来源表名与来源列名;根据所述来源表名与来源列名,构造表名、列名格式的限定字段引用;将所述限定字段引用重新送入字段引用解析流程进行二次解析,得到对应的表达式中间节点;基于所述表达式中间节点生成最终表达式节点。

7、一个示例中,对限定字段引用进行二次解析时,所述方法还包括:根据层级偏移量定位限定字段引用对应的外层查询块,在外层查询块的命名空间内校验是否存在真实物理列;当所述真实物理列存在时,若所述限定字段引用处于having表达式上下文,且外层查询块存在分组字段,开启二次解析模式,屏蔽显式输出别名的匹配逻辑,仅校验原始表字段与分组字段。

8、一个示例中,方法还包括:当所述真实物理列以及外层查询块分组字段均不存在时,关闭二次解析模式,输出与mysql兼容语义一致的错误结果。

9、另一方面,本申请实施例提供了一种数据库的字段引用重绑定解析设备,包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述任一项的一种数据库的字段引用重绑定解析方法。

10、另一方面,本申请实施例提供了一种数据库的字段引用重绑定解析非易失性计算机存储介质,存储有计算机可执行指令,计算机可执行指令能够执行上述任一项的一种数据库的字段引用重绑定解析方法。

11、本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

12、本申请在保留数据库原有解析主体框架基础上,通过上下文驱动的动态查找逻辑,支持having、order by场景直接引用输出别名,同时适配多层嵌套查询块,满足mysql兼容语义需求,减少业务sql迁移改写工作量。设置显式别名高优先级、原始列低优先级的候选区分机制,同时实现输出别名与分组字段的协同决策,解决重名带来的解析误判、歧义问题,提升sql语义解析准确性。针对外层重绑定生成的限定字段引用增加二次校验与错误收敛机制,屏蔽不合理的伪列、整行引用等回退解析路径,报错行为与mysql保持一致,避免出现非预期解析结果。

1.一种数据库的字段引用重绑定解析方法,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,根据所述表达式上下文对应的查找顺序,以当前查询块的解析状态为起始解析层级,对所述字段引用依次匹配来源表字段、输出别名以及分组字段,具体包括:

3.根据权利要求1所述的方法,其特征在于,根据所述表达式上下文对应的查找顺序,以当前查询块的解析状态为起始解析层级,对所述字段引用依次匹配来源表字段、输出别名以及分组字段,具体还包括:

4.根据权利要求1所述的方法,其特征在于,当所述字段引用匹配到输出别名且没匹配到分组字段时,所述方法包括:

5.根据权利要求1所述的方法,其特征在于,当所述字段引用匹配到输出别名且匹配到分组字段时,所述方法包括:

6.根据权利要求1所述的方法,其特征在于,所述当所述字段引用匹配到外层查询块的字段时,对所述字段引用执行重绑定处理,生成最终表达式节点,具体包括:

7.根据权利要求6所述的方法,其特征在于,对限定字段引用进行二次解析时,所述方法还包括:

8.根据权利要求7所述的方法,其特征在于,所述方法还包括:

9.一种数据库的字段引用重绑定解析设备,其特征在于,包括:

10.一种数据库的字段引用重绑定解析存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令能够执行上述权利要求1-8任一项所述的一种数据库的字段引用重绑定解析方法。